Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Динамическое освещение в 2Д   Найти похожие ветки 

 
П7   (2005-04-08 14:51) [0]

Мастера! Объясните мне суть реализации сего чуда на OpenGL? Особенно этот вопрос хотелось бы адресоват XPoroger"у, который его уже реализовывал в своей игре, и Darthman"у, который на форуме GameDev.ru говорил что это легко! (:
А то я чего-то не догоняю, как бы это так хитро реализовать...


 
A22 ©   (2005-04-08 15:44) [1]

спрайт выводится на кран как прямоугольник (состоящий из 2 треугольников) с натянутой текстурой, так? так. у вершин прямоугольника кроме текстурных координат есть еще такой параметр как цвет. с этим цветом разные вещи вытворять можно, но для освещения нужно вссего лишь указать api, что результирующий цвет пикселя на экране = цвет текстуры * цвет вершины полигона. далее (возьмем простой случай) для point лампочки, стоящей в позиции light_pos, с заданным радиусом освещения radius и мощностью power считаешь силу света в конкретной точке p:
light_power = power *(1 - VectorLength(p - light_pos) / radius);
для усорения расчетов можно заранее посчитать power/radius, назвать это чудо coeff и переписать формулу как
light_power = power - VectorLength(p - light_pos) * coeff;
кстати, если VectorLength > radius, light_power сразу = 0

теперь для создания освещения цвет вершины устанавливаешь как
LightColor * light_power (LightColor - трехкомпонентный вектор);
если лампочек много - считаешь для каждой и интерполируешь значение (берешь среднее арифметическое).

наверное, все. для 2-д хватит с головой, не переусердствуй с лампочками...

P.S. если у тебя в 2-д какой-нибудь светящийся шарик летает, лучше всего вообще градиент света в фотошопе сделай и рисуй с альфа-каналом, дешевле будет, чем считать как выше описано


 
П7   (2005-04-08 16:14) [2]

Это я все понимаю. Но динамическое освещение предполагает наличие динамических теней... (: Вот это-то мне и нужно.


 
П7   (2005-04-08 16:22) [3]

Как пример могу ещё привести GISH (так вроде пишется). Там есть уровень, где на цепи болтается фонарик, а он блоков пляшут тени. Простенькие, без наворотов, но смотреть приятно... (:


 
A22 ©   (2005-04-08 17:24) [4]

тогда вопрос бы иначе обозвал, освещение освещением, а тени - совсем другой вопрос..

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


 
П7   (2005-04-08 21:22) [5]

Мутно пишете, товарищЪ... (: При чём тут релизация? Если всё дело в "ручной геометрии", тогда проблем нет, но если есть иные способы, то о них мне и хотелось бы узнать.


 
XProger ©   (2005-04-08 22:01) [6]

Хм... :)
Если ты имел ввиду TFK то там нет динамических теней (и не будет).
А те тени что есть расчитываются перед первым запуском карты в игре и сохраняются в неё же. Зовётся это Lightmap"ом.
А расчитывается довольно просто и качественно, но достаточно долго для реалтайм :)

А вот свет от ракет и прочей бяки, делал обычным цветастым спрайтом с ч/б текстурой, перед выводом которого включал блендинг и использовал glBlendFunc(GL_SRC_ALPHA, GL_ONE) (умножение)

Но вот тени (лайтмэп) накладывал после отрисовки всей сцены, но немного другим умножением glBlendFunc(GL_ZERO, GL_SRC_COLOR); (1 - С)

От динамических теней отказался из-за их тормознутости... :)


 
П7   (2005-04-09 00:22) [7]

Хым. Ясно. Я, кстати, только сейчас заметил, что я твой ник не правильно написал, извини, если что. (:
Блендинг, лайт-мепы, не то, а жаль, ладно, будем делать через одно место... (:


 
XProger ©   (2005-04-09 00:32) [8]

Хочешь сделать Дум3 в 2д? Юзай стенсил, но при этом будь готов к письмам "Вон у меня GF2 и твоя %$#@ на ней свыше 5 фпс не показывает" :)

Хотя, если ухудшить качество лайтмэпа то можно будет генерировать его в реальном времени... :)


 
П7   (2005-04-09 00:53) [9]

Не, какой нах стенсил? (: всё плоское, что моя справка из психушки (:
Лады, спосибо за консультацию.
Тема временно закрыта. (:


 
Zer0[np]   (2005-04-09 01:01) [10]

хех. есть подозрение что в гише тени стенсильные.


 
Zer0[np]   (2005-04-09 01:04) [11]

есть подозрение что в гише стенсельные тени.
имеем источник света, считаем направление луча от кажой точки "непрозрачного" полигона в бесконечность. рисуем стенсильный полигон.
рисуем свет с проверкой на поподание в область тени.



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
3-1117598099
Ярослав
2005-06-01 07:54
2005.07.18
База FB тормозит


1-1119990182
Monk
2005-06-29 00:23
2005.07.18
RichEdit отображает не всё


9-1112702530
Marl
2005-04-05 16:02
2005.07.18
PowerTimer


1-1120200037
aleshka-a
2005-07-01 10:40
2005.07.18
Уважаемые альмаматеры


3-1118154518
ryds
2005-06-07 18:28
2005.07.18
Подскажите какой есть аналог SQL-функции REPLACE в IB?