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, это будет влиять на отражения? Картинку всё равно дай (интересно чё там, может неплохо)


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

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