forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Отражения в воде Что есчё за SetCubeFace? (http://forum.boolean.name/showthread.php?t=2989)

ABTOMAT 19.03.2007 20:38

Отражения в воде Что есчё за SetCubeFace?
 
Вот решил создать отражаюсчую воду у себя в игре. В одном хорошем месте нашёл код:

Код:

Function RenderWater(WaterMapTexture,cam,WaterCamera)

CameraProjMode cam,0
CameraProjMode WaterCamera,1

PositionEntity WaterCamera,EntityX(cam),1500,EntityZ(cam)

;Left view
SetCubeFace WaterMapTexture,0
RotateEntity WaterCamera,0,90,0
RenderWorld
CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
;forward view
SetCubeFace WaterMapTexture,1
RotateEntity WaterCamera,0,0,0
RenderWorld
CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
;right view
SetCubeFace WaterMapTexture,2
RotateEntity WaterCamera,0,-90,0
RenderWorld
CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
;backward view
SetCubeFace WaterMapTexture,3
RotateEntity WaterCamera,0,180,0
RenderWorld
CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
;up view
SetCubeFace WaterMapTexture,4
RotateEntity WaterCamera,-90,0,0
RenderWorld
CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
RotateEntity WaterCamera,0,0,0

CameraProjMode WaterCamera,0
CameraProjMode cam,1
End Function

Смысл тут такой: каждый цикл рендерится шесть сторон куба: левая, правая, верхняя, нижняя, задняя, передняя. Потом это дело проецируется на воду в результате чего возникает отражение. Но вот фигня: отражение работает нормально токо в том случае, если: камера находится в определённой точке в пространстве и размер текстуры воды равен разрешению экрана (причем только квадратный). Если это соблюдается, то всё классно:



Но стоит мне поездить камерой как вылезают глюки:



Причём если двигать не камеру, а террайн, то глюки не лазут.

Вопрос: объясните подробно если кто знает, что это за таинственный куб, с которого всё проекцируется и как он устроен. Как заставить его перемещаться вместе с камерой (я так понял, глюки лезут из-за разницы их положений) и как растягивать текстуру? Поясню последнее. При рендере просто вырезается квадрат размера текстуры воды и нашлёпывается SetCubeFace'ом, а обрезанная часть теряется. Вопрос: как сжать (неважно, пропорционально или нет, но надо чтоб всё уместилось) текстуру до нужных размеров? И что это за таинственный куб? Жду ответов.

Чуть не забыл, код, которым создаётся вода:

Код:

WaterMapTexture=CreateTexture(watermapsize,watermapsize,128+256+48)
water=LoadTerrain("Testlevel\Matvey1w.bmp")
EntityTexture water,WaterMapTexture,0,0
EntityAlpha water,.9

Заранее спасибо если кто знает :)

Progger_Leo 19.03.2007 21:10

Re: Отражения в воде Что есчё за SetCubeFace?
 
Цитата:

Как растягивать текстуру
Юзай ScaleTexture ;)

ABTOMAT 19.03.2007 22:08

Re: Отражения в воде Что есчё за SetCubeFace?
 
Progger_Leo, спасибо. А как быть с кубом отражений? Кто-нить знает, что ето такое?

ЛысыЙ_Чук-Иванчук 19.03.2007 22:22

Re: Отражения в воде Что есчё за SetCubeFace?
 
Ну ето простой способ сделать отражение(авто например)

jimon 19.03.2007 22:35

Re: Отражения в воде Что есчё за SetCubeFace?
 
думаю вот ета картинка http://en.wikipedia.org/wiki/Image:C...on_example.jpg немного прояснит процес :)

НУБ 20.03.2007 03:20

Re: Отражения в воде Что есчё за SetCubeFace?
 
А потому, что нужно не копировать чужие исходники, а сесть и самому во всём разобраться ;)

Нет смысла делать динамическое отражение на воду кубемапой ;)

HolyDel 20.03.2007 03:23

Re: Отражения в воде Что есчё за SetCubeFace?
 
да, меня тоже этот вопрос беспокоил, чо они в стандартных примера сделали на воду отражение кубемапой?
SetCubeFace - задает грань для текстуры. чти Хелп.

johnk 20.03.2007 03:54

Re: Отражения в воде Что есчё за SetCubeFace?
 
Прошу прощения если не в тему. А не проще использовать AShadow?

ABTOMAT 20.03.2007 10:26

Re: Отражения в воде Что есчё за SetCubeFace?
 
jimon, спасибо за картинку, теперь стало намного понятнее. Но как заставить этот куб двигаться вместе с камерой? Им вообще можно как-то управлять? :dontknow:
НУБ, вот я и пытаюсь разобраться. ;)
JohnK, Ashadow - крайний вариант, я хотел сделать всё сам, даже если это будет смотреться хуже чем Ашэдоу. Зато своё будет ;)

johnk 20.03.2007 15:00

Re: Отражения в воде Что есчё за SetCubeFace?
 
Могу сказать только одно: Не стоит изобретать велосипед.

Vovan_X 20.03.2007 15:02

Re: Отражения в воде Что есчё за SetCubeFace?
 
Код:
WaterMapTexture=CreateTexture(watermapsize,waterma psize,128+256+48)water=LoadTerrain("Testlevel\Matv ey1w.bmp")EntityTexture water,WaterMapTexture,0,0EntityAlpha water,.9
Попробуй ещё так Voda=Createmiror()
Будет круто

ABTOMAT 20.03.2007 16:07

Re: Отражения в воде Что есчё за SetCubeFace?
 
Но всё-таки можно как-нить этим кубом управлять или нет?

ABTOMAT 22.03.2007 16:31

Re: Отражения в воде Что есчё за SetCubeFace?
 
Уря! Исправил глюки с водой. Кто-нить знает как сделать колыхания волн на воде? (Так чтоб влияло на отражение)

johnk 22.03.2007 16:42

Re: Отражения в воде Что есчё за SetCubeFace?
 
ABTOMAT, вот пример, попробуй под себя подстроить:
Код:

Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
RotateEntity  light,90,0,0
cube=CreateCube()
PositionEntity cube,0,0,5
; Load anim texture
anim_tex=LoadAnimTexture(  "wateranim.jpg",1,124,124,0,23 )
While  Not KeyDown( 1 )
  frame=MilliSecs()/30 Mod  23
  EntityTexture  cube,anim_tex,frame

  pitch#=0
  yaw#=0
  roll#=0

  If KeyDown( 208 )=True  Then pitch#=-1
  If  KeyDown( 200 )=True Then pitch#=1
  If KeyDown( 203 )=True  Then yaw#=-1
  If  KeyDown( 205 )=True Then yaw#=1
  If KeyDown( 45 )=True  Then roll#=-1
  If  KeyDown( 44 )=True Then  roll#=1

TurnEntity  cube,pitch#,yaw#,roll#

RenderWorld
Flip

Wend

End

Картинку скинуть?

ABTOMAT 22.03.2007 21:43

Re: Отражения в воде Что есчё за SetCubeFace?
 
JohnK, это будет влиять на отражения? Картинку всё равно дай (интересно чё там, может неплохо)

moka 23.03.2007 00:46

Re: Отражения в воде Что есчё за SetCubeFace?
 
Идея есть. Скинь если не жалко код, с реализацией отражения. И я попробую замутить.

ABTOMAT 23.03.2007 17:15

Re: Отражения в воде Что есчё за SetCubeFace?
 
MoKa? весь код в 1-м посте в начале темы, только чтобы не глючило нужно террайн воды возюкать сместе с камерой чтобы камера всегдв была в центре этой воды.

moka 24.03.2007 02:09

Re: Отражения в воде Что есчё за SetCubeFace?
 
Дык, ты сказал что поправил баг, вот тот и давай. А я нормал картой попробую замутить.

Horror 24.03.2007 11:09

Re: Отражения в воде Что есчё за SetCubeFace?
 
JohnK помойму это пример где просто анимированная текстура!
вроде в уроке 5 (если это то а чем я думую) там есть вода из меша
и она двигается вот она подойдет..

johnk 24.03.2007 11:21

Re: Отражения в воде Что есчё за SetCubeFace?
 
Да да, это пример из уроков. Эта вода только "шевелится", а насчет искривления изображения - я не в курсе, как это сделать.

ABTOMAT 24.03.2007 14:57

Re: Отражения в воде Что есчё за SetCubeFace?
 
MoKa, код тот же самый что и в первом посте, только в цикле нужно прописать:
Код:

PositionEntity water, entityx(cam) - (1/2 ширины террайна воды), entityy(water), entityz(cam) - (1/2 ширины террайна воды)

ABTOMAT 24.03.2007 19:09

Re: Отражения в воде Что есчё за SetCubeFace?
 
Raiter, этот код мне ещё переделывать и переделывать....

ABTOMAT 24.03.2007 19:56

Re: Отражения в воде Что есчё за SetCubeFace?
 
Raiter, по крайней мере, разобраться в вопросе это лучше чем просто тупо копировать исходник.

ABTOMAT 25.03.2007 15:54

Re: Отражения в воде Что есчё за SetCubeFace?
 
Raiter, кто скажет false пусть первым кинет в меня камень :-)
Гы, кстати я там уже пару багов поправил:-)
Такой вопрос: я например, хочу чтоб камера рендерила только то, что находится над водой, а то, что находится под ней не рендерила, а то от "подводного рендера" у меня пара багов (скрин потом дам). Как такое сделать?

johnk 25.03.2007 16:13

Re: Отражения в воде Что есчё за SetCubeFace?
 
Может надо прятать подводные объекты командой HideEntity? Если пользоваться ей, то объекты и вправду, не рендерятся.

HolyDel 25.03.2007 18:19

Re: Отражения в воде Что есчё за SetCubeFace?
 
да. пробегаешся по всем объектам и прячеш их.
сцылки на объекты придеццо где то хранить.

ABTOMAT 25.03.2007 19:52

Re: Отражения в воде Что есчё за SetCubeFace?
 
HolyDel, JohnK, я знаю про ети команды, но у меня ландшафт и под водой, и над водой, мне нужно скрыть ту часть, что под водой (временно), нужно чё-то типа CameraRange но только у неё объекты скрываются в определённом радиусе, а мне нужно по плоскости.
Ну чё, кто-нить знает?

johnk 25.03.2007 19:56

Re: Отражения в воде Что есчё за SetCubeFace?
 
Может стоит разбить террайн на куски, и прятать "подводные"?

PS Я не вижу смысла прятать террайн, ведь он же низкополигональный, и в Блитз он сделан по технологии MipMapping'а.

HolyDel 25.03.2007 22:13

Re: Отражения в воде Что есчё за SetCubeFace?
 
не, аффтару надо чтоб его видно не было. ;)
аффтар, ставь плэйн чуть ниже воды. черный, или какого там тебе цвета надо, еще лутче затекстуренный под цвет дна морского ;)

ABTOMAT 26.03.2007 13:50

Re: Отражения в воде Что есчё за SetCubeFace?
 
Не, вы не поняли, мне нужно скрыть подводную часть террайна (и других объектов) потому что у меня от них лезут глюки:

Конечно, можно разбить террайн на две части (подводную и надводную и менять их, но ето неудобно и сказывается на производительности, другие объекты мне бы тоже не хотелось делить, кроме того, нельзя будет поменять уровень воды. Есть же вот команда CameraRange, но она скрывает объекты в радиусе, а мне надо по плоскости:dontknow:

HolyDel 26.03.2007 14:31

Re: Отражения в воде Что есчё за SetCubeFace?
 
чем тебе не подходит плэйн?

ABTOMAT 26.03.2007 14:49

Re: Отражения в воде Что есчё за SetCubeFace?
 
HolyDel, тем, что у меня камера под водой, и он скроет как раз то, что нужно рендерить, а мне нужно с точностью наоборот

HolyDel 26.03.2007 14:54

Re: Отражения в воде Что есчё за SetCubeFace?
 
ну дык плейн можно и перевернуть. и тогда он будет скрывать все по другую сторону от воды, по отношению к камере. Можно и два плейна создать.
Можно и квад создать и отключить у него обрезку задних треугольников.
EntityFx ent,16

ABTOMAT 26.03.2007 16:39

Re: Отражения в воде Что есчё за SetCubeFace?
 
HolyDel, вот примерный рисунок того, что у меня творится:

Объясни, куды плейн класть? И что ты там про квады говорил?

HolyDel 26.03.2007 17:25

Re: Отражения в воде Что есчё за SetCubeFace?
 
а почему у тебя камера под воду ставится?
надо над водой. ишо смотри CameraZoom

ABTOMAT 26.03.2007 17:30

Re: Отражения в воде Что есчё за SetCubeFace?
 
HolyDel, под водой - чтобы отрендерить отражение из-под воды. Ну так ты знаешь как сделать?

Diplomat 26.03.2007 18:56

Re: Отражения в воде Что есчё за SetCubeFace?
 
Вложений: 2
HolyDel: А в чём смысл ставить камеру над водой? ;)

АВТОМАТ: Не иди по пути армянского комсомола, брось кубемапы и используй обычную текстуру. При том же видимом эффекте можно в 6 раз увеличить скорость обработки.
Принцип создания отражений крайне прост: камера для рендеринга отражений располагается под водой симметрично основной камере и рендеримая ею картинка копируется в текстуру водной поверхности. Естественно, для корректной работы нужно правильно задать зуум камеры отражений и корректно ориентировать текстуру воды.
Всё!
Не сиди просто так: думай! (с) Мама Жванецкого.

ABTOMAT 26.03.2007 19:16

Re: Отражения в воде Что есчё за SetCubeFace?
 
Diplomat, спасибо, ща попробую...

moka 27.03.2007 00:02

Re: Отражения в воде Что есчё за SetCubeFace?
 
Тебе и ландшафт? Тогда поможет для реалистичности Динамик Фог =)))))) Толкьо реализации его на блице собственно ручно я не пробывал, поэтому сказать дельно как не могу =)

Tadeus 05.09.2007 22:13

Re: Отражения в воде Что есчё за SetCubeFace?
 
Почему же? Если брать кубемапу один раз на цикл, то скорость повысится в 6 раз, а вот побочных эффектов не будет. Извините, что поднимаю старую тему.

ABTOMAT 05.09.2007 22:45

Re: Отражения в воде Что есчё за SetCubeFace?
 
Tadeus, я уже давно написал другую воду, не кубомапную ;)

к сожалению не довёл до конца нормальные волны, есть пара багов + я знаю как оптимизировать пикая всего лишь 4 точки... Но лень математику учить, а без неё туго будет :( Ну, и времени пока на сию воду нету совсем, но потом вернусь к ней обязятельно :)

Tadeus 05.09.2007 22:47

Re: Отражения в воде Что есчё за SetCubeFace?
 
Помню, ты мне еще скидывал. А как ты там преломление сделал?

ABTOMAT 05.09.2007 23:28

Re: Отражения в воде Что есчё за SetCubeFace?
 
Tadeus, вершины меша воды ввэрх-вныз двигаю.. Но получается в динамике.. неествественно... Я ж говорил что волны ещё не доделал...
Кстати раз уж тему подняли, огромное спасибо Дипломату, который мне подкинул картинку в посте №37, моя новая вода сделана по тому принцыпу ;)

Кстати ответа на вопрос "как скрыть подводную часть сцены" так никто и не ответил...
("Разрежь мешь уровня в 3Д Максе и скрывай когда надо нижнюю половину" просьба не предлагать, я так и делаю, но это не то чтобы очень практично)

johnk 06.09.2007 04:15

Re: Отражения в воде Что есчё за SetCubeFace?
 
Может HideEntity все объкты, чья Y координата ниже воды?

ABTOMAT 06.09.2007 09:13

Re: Отражения в воде Что есчё за SetCubeFace?
 
JohnK, а если у меня земля находтся и ниже и выше воды? Тогда ведь надо как то скрыть только часть...

johnk 06.09.2007 09:17

Re: Отражения в воде Что есчё за SetCubeFace?
 
Ну дык землю на это не проверяй...тебе же только объекты скрыть надо? Ну тогда все в норме быть должно :))) Если я тебя правельно конечно понял.. :)

ABTOMAT 06.09.2007 09:33

Re: Отражения в воде Что есчё за SetCubeFace?
 
JohnK, именно что землю... Если не скрыть подводную часть земли, страшные глюки вылазят.

johnk 06.09.2007 09:38

Re: Отражения в воде Что есчё за SetCubeFace?
 
Ну тогда на сектора разбить....Подземные - прятать, Не подземные - ПОказывать :)

Tadeus 06.09.2007 11:53

Re: Отражения в воде Что есчё за SetCubeFace?
 
Извини, если скажу ща тупое, но почему бы тебе не разместить подводную камеру на уровне с водой?

IGR 06.09.2007 13:58

Re: Отражения в воде Что есчё за SetCubeFace?
 
Цитата:

почему бы тебе не разместить подводную камеру на уровне с водой?
именно на самом уровне ??
и что по-твоему это даст ??

moka 06.09.2007 14:25

Re: Отражения в воде Что есчё за SetCubeFace?
 
Хм, ABTOMAT, а ты не эксперементировал так:
Двигаем в точку на воде куда смотрит камера, вторую камеру, гдето на 75% и скалим саму камеру (либо привязываем её к пустому мэшу и скалим мэш). Пробовал? Просто вспомнил что камера скалиться, и вылазять тогда интерестные артефакты, а вот если этим воспользоваться? Я про то что увеличить ей градус обзора, и придвинуть, тем самым мы уже часть избегаем. Да и кстать, у ашадовса был тоже этот артефакт, что ландшафт рендерился :)

IGR 06.09.2007 14:27

Re: Отражения в воде Что есчё за SetCubeFace?
 
Цитата:

ашадовса был тоже этот артефакт
был т.е. его устранили ??

moka 06.09.2007 14:28

Re: Отражения в воде Что есчё за SetCubeFace?
 
IGR незнаю, просто когда я его щупал, тогда был, а как щас хз ;)

ABTOMAT 06.09.2007 18:50

Re: Отражения в воде Что есчё за SetCubeFace?
 
JohnK, у меня сейчас оно так и есть, но я спрашиваю, как по-другому это можно сделать?
MoKa, камеру нельзя трогать! С ней у меня всё очень точно, чуток не так и отражение в сторону поплывёт.
Tadeus, нельзя, я пробывал, отражение получается неверное! Нужно чтоб вторая камера была бы на той же глубине, что и высота первой камеры над уровнем моря (см. 37 пост за авторством Дипломата)

Tadeus 06.09.2007 20:36

Re: Отражения в воде Что есчё за SetCubeFace?
 
Кстати, действительно поэксперементировал с SetCubeFace и рекомендую не возлагать на него надежд :)

Данил 06.09.2007 21:25

Re: Отражения в воде Что есчё за SetCubeFace?
 
Я думаю, SetCubeFace гафно ибо там КУЧА лишних рендеров... а это никому не надо...

ЛысыЙ_Чук-Иванчук 07.09.2007 10:13

Re: Отражения в воде Что есчё за SetCubeFace?
 
Цитата:

Сообщение от Данил
Я думаю, SetCubeFace гафно ибо там КУЧА лишних рендеров... а это никому не надо...

А вот тут ты глубоко ошибаешся!!!!
Естественно для воды 6 рендеров некчему!
Однако если тебе нужно чтобы объект отрожал окружающий мир?
Да и кто тебя заставляет рендерить каждый проход цикла, раз в 5 сек и норм!;)

moka 07.09.2007 11:46

Re: Отражения в воде Что есчё за SetCubeFace?
 
Многие как я вижу непонимают что такое кубемапа? Так вот она абсолютно ну никак не подойдёт для плоскостей. Это отражение ОДНОЙ точки и всё. Для сферы идёт хорошо, но никак подругому.
Отражение для воды, это уже будет одна текстура, которая наложиться на воду, но с рефракциями.
Так что кубемапы не трогайте, они для мелочей как красивый эффект идут безупречно, для металла, стекла и других бликующих предметов.
А воду уж придёться делать самому.

Tadeus 07.09.2007 16:24

Re: Отражения в воде Что есчё за SetCubeFace?
 
Цитата:

Я думаю, SetCubeFace гафно ибо там КУЧА лишних рендеров... а это никому не надо...
Блин, ну я же уже говорил, что можно рендерить за цикл только одну сторону! Для тех кто не понимает - вот:

Код:


Global water_side

Function RenderWater()

CameraProjMode camera,0
CameraProjMode WaterCamera,1

PositionEntity WaterCamera,EntityX(player),EntityY(water),EntityZ(player)

;Left view
If water_side = 0
  SetCubeFace WaterMapTexture,0
  RotateEntity WaterCamera,0,90,0
  RenderWorld
  CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
Endif
;forward view
If water_side = 1
  SetCubeFace WaterMapTexture,1
  RotateEntity WaterCamera,0,0,0
  RenderWorld
  CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
Endif
;right view
If water_side = 2
  SetCubeFace WaterMapTexture,2
  RotateEntity WaterCamera,0,-90,0
  RenderWorld
  CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
Endif
;backward view
If water_side = 3
  SetCubeFace WaterMapTexture,3
  RotateEntity WaterCamera,0,180,0
  RenderWorld
  CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
Endif
;up view
If water_side = 0
  SetCubeFace WaterMapTexture,4
  RotateEntity WaterCamera,-90,0,0
  RenderWorld
  CopyRect 0,0,WaterMapSize,WaterMapSize,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
Endif

water_side = water_side + 1
If water_side > 4
  water_side = 0
EndIf

CameraProjMode WaterCamera,0
CameraProjMode camera,1

End Function

Причем, отражение такое же, но в 6 раз быстрее.

Но искажения действительно есть. Что является существенным недостатком.

HolyDel 07.09.2007 21:31

Re: Отражения в воде Что есчё за SetCubeFace?
 
MoKa, вода невсегда плоскость. Иногда это анимировнный меш, который имеет высоту отличную от нуля, а ето уже паралеллипипед, и чтобы "сторона волны" отражала то что должна - юзают кубемапу. Такой вариант часто используют извращенцы, которых еще непоймали и не запрятали в психушку, поэтому они внаглую развращают молодежь.

Tadeus, когда самая главная грань - верхняя, небудет отрендерина и юзеру вздумается повернуть камеру, градусов едак на 45 (а на это уйдет времени, меньше чем 6 тактов), то картинка что отображается (террайн, деревья) и картинка того что отражается в воде (то-же самое) будут несовпадать, что может причинить хрупкой психики юзера некоторые неудобства.
ПС. а чо ты не предлагаеш игровой цикл разделить на пару сегментов, если один то просчитываем логику, если два то обрабатываем спецэффекты, если три то физику, если 4 то рендерим все ето, если пять то ждем пока все отрсуется на мониторе?

Tadeus 07.09.2007 22:42

Re: Отражения в воде Что есчё за SetCubeFace?
 
Ага, вот откуда это :-D


Часовой пояс GMT +4, время: 22:19.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot