Ференька
Регистрация: 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
Заранее спасибо если кто знает 
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|