forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Как определить, освещён энтити или нет? (http://forum.boolean.name/showthread.php?t=3452)

ABTOMAT 26.05.2007 15:23

Как определить, освещён энтити или нет?
 
Воть скрин для раздумий:

Здеся мы видим 2 телепорта - 1 находится на освещённой области карты и потому освещён, а другойнаходится в тени и потому неосвещён. Вопрос: как определять, объект находится в тени или на освещённой лайтмэпом территории?

jimon 26.05.2007 17:31

Re: Как определить, освещён энтити или нет?
 
Найти ближайшие вертексы на карте ... и посмотреть освещены ли они ..

ABTOMAT 26.05.2007 17:34

Re: Как определить, освещён энтити или нет?
 
А как узнать освещённость вертекса? Можешь показать кодом?

jimon 26.05.2007 20:45

Re: Как определить, освещён энтити или нет?
 
давай за 70$ напишу тебе код ... :-)
(ето эгоизм с моей стороны ... да да ...)

в общем imho алгоритм таков
ищем ближайшие вертексы (или вертекс)
и смотрим на lightmap текстуру которая ложится на етот вертекс
там проводим не большой анализ ... типа вертекс вообще не освещен, или освещен не полностью, или освещен полностью
изходя из етого смотрим на остальные вертексы и приходим к одному из трех выводов ...
1) обьект не освещен
2) обьект полуосвещен
3) обьект освещен :)

ps. я блиц уже давным давно не юзаю ... потому о реализации пунктов ко мне можно не обращатся :)

Platon 27.05.2007 03:30

Re: Как определить, освещён энтити или нет?
 
Если лайтмап и телепорты статичны, то ты заранее должен знать какой из них освещен, а какой нет.
Если же телепорты динамичные, то можно просто от источника освещения или с его позиции "пикать" (ты же когда создавал лайтмап, ставил лампочку?) до телепорта и если возвращает хендл меша телепорта, значит освещен.
Пикать можно с помощью LinePick или использовать EntityVisible
предварительно поставив карту и телепорты на проверку EntityPickMode()
ЗЫ
Последний параметр у EntityPickMode не забудь ;)

ABTOMAT 27.05.2007 13:03

Во!! Меня осенила мысль!! Я кажется придумал как это сделать - у меня ж у террайна пространственные координаты соответствуют текстурным - это упростит задачу. jimon, спасибо шо навёл на мысль.

Cyan, не-е-е, я ж сам занимался мапперством в Team Fortress: в данном случае там нет лампочки, а свет проецируется с неба. Т.е. там точно не Visibl'ом и не Pick'ом делают. У меня хоть и есть лампочка, но она не соответствует лайтмапе, ещё для этого нужно будет деревьям делать PickMode'ы, это всё увеличивает тормоза и геморрой. + если у меня буит смена дня и ночи, то мне нужно поменять освещённость объектов вместе с лайтмапой...

В-общем, у меня есть идея на этот счёт, если получится - скажу как я это устроил.

Horror 27.05.2007 13:58

Re: Как определить, освещён энтити или нет?
 
Есть идея ты же лаит мапу делал в максе , она исходила от лампочики так?
ну вот на месте лампочи создай думми в блитце найди его финдчайлдом

и так если лампочка и телепорт на растояние менье 300 (сам подгони скоа надо) то телепорт освещен

ABTOMAT 27.05.2007 14:56

Re: Как определить, освещён энтити или нет?
 
Horror, не, мне надо именно затенён он чем-то или нет.

ЛысыЙ_Чук-Иванчук 27.05.2007 22:50

Re: Как определить, освещён энтити или нет?
 
Они у тебя же не денамично перемещяются, и их у тебя небудет Мильён, просто каждый находи и ставь ему значение затемнен он или нет!

ABTOMAT 27.05.2007 23:51

Re: Как определить, освещён энтити или нет?
 
vlad, я затенение буду использовать для травы, которой как раз и буит мильон, а значит, мне нужна автоматизация.
З.Ы. так же мне надо определять освещённость не только статики, но и мобов - а они бегают, значит, жёстко им установить параметры нельзя.
З.З.Ы. Кстати, телепорты на картинке строятся игроком прямо во время игры, т.е. он может оказаться в любой области освещения.

FrankH 16.12.2007 14:51

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 циклов, и дописать просчет плавного изменения тени.
это в теории.. может где ошибся


Часовой пояс GMT +4, время: 01:33.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot