Показать сообщение отдельно
Старый 19.03.2007, 20:38   #1
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,743
Написано 5,461 полезных сообщений
(для 15,676 пользователей)
Вопрос Отражения в воде Что есчё за 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
Заранее спасибо если кто знает
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием