Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Tower Defense 3D
pozitiffcat, с учетом того, что у тебя вид сверху, можно легко написать функцию которая покрасит мир в один цвет, а предметы в другой. Рендришь с направления света так чтобы твой квадратный мир влез в границы вьюпорта. Это будет лайтмапа. Накладываешь её по вторым текстурным координатам, которые получаешь проецируя вершины твоего квадратного мира на камеру с которой ты рендрил лайтмапу.
лайтмапа получается примерно вот таким кодом. Нужно только верхним слоем на все объекты добавить текстуру которая их перекрасит в однотонный цвет и ставить им флаг, чтобы они рендрелись без затенения.

Function castshadow2(selectedmesh,currentlightmap)
PointEntity supershadowcamera,selectedmesh
;zooming to object
CameraZoom supershadowcamera,0.15*Sqr(MeshWidth(selectedmesh)^2+MeshDepth(selectedmesh)^2+MeshHeight(selectedmesh)^2)
;setting texture set for lightmap and right order for cameras
CameraProjMode camera,0
CameraProjMode supershadowcamera,2
TextureBlend groundshadowtex,1
TextureBlend lightmap,0
TextureBlend shadowtex,1
; for not rendring objects behind of current
clipplane=CreateSprite()
EntityColor clipplane,105,105,105
ScaleSprite clipplane,5,5
PositionEntity clipplane,EntityX(selectedmesh,1),EntityY(selectedmesh,1),EntityZ(selectedmesh,1)
HideEntity selectedmesh
RenderWorld
;reseting for normal render
ShowEntity selectedmesh
TextureBlend groundshadowtex,0
TextureBlend lightmap,5
TextureBlend shadowtex,0
;aplying results
FitShadow2(selectedmesh)
TextureCoords currentlightmap,1
EntityTexture selectedmesh,currentlightmap,0,7
CopyRect 0,0,supersizeofshadow,supersizeofshadow,0,0,BackBuffer(),TextureBuffer(currentlightmap)
CameraProjMode camera,1
CameraProjMode supershadowcamera,0
;clearing entitys which become totaly useless
FreeEntity clipplane
End Function
|