Re: Как определить, освещён энтити или нет?
Я когда-то писал просчет лайтмапы для левела, помоему тебе нужен тот же алгоритм, хотя может проще и по лайтмапе:
получаем dx,dy,dz - вектор освещения(разница координат источникасвета и мишени)
max_lvl_height - предел высоты уровня(допускаем, что солнце не опустится ниже уровня)
d=dy/max_lvl_height ;получаем отношение высот
dx=dx/d ;пропорционально уменьшаем отрезок проверки
dy=dy/d ;для экономии производительности
dz=dz/d
for all.Unit=Each Unit
if LinePick (entityx(all\object),entityy(all\object),entityz(a ll\object),dx,dy,dz)=my_terrain then
all\light=1
else
all\light=0
endif
next
для движущегося юнита нужно просчитать переменные заранее, проверять затененность раз в N циклов, и дописать просчет плавного изменения тени.
это в теории.. может где ошибся
|