Тема: Tower Defense 3D
Показать сообщение отдельно
Старый 27.10.2011, 13:19   #111
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 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
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (27.10.2011)