На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, barazuk, Mikle
  
> Отражение светового луча в OpenGL
Если светить фонарем на зеркало в реальности , то увидим следующее:

1. Луч "проходит" сквозь зеркало и падает на отражение соответствующей стены в нем.
2. Отражение луча "выходит" из зеркала и падает на реальную стену.

При моделировании этого в OpenGL фактически потребуются 2 источника -- сам фонарь и его отражение.
Проблема в том, что количество источников света сильно ограничено (в моем случае -- 8) и при построении сцены с зеркалами их тривиально не хватает.

Как можно обойти это ограничение?
Рендерить отражение вторым проходом, зеркально переместив камеру, ограничить зеркало стенсилом. Или, если зеркало прямоугольное, рендерить его первым проходом, используя четыре плоскости отсечения, потом рендерить основную камеру.
Но, если луч света делится, только частично попадая в зеркало, то всё равно понадобится два источника света.
В моем случае сделано так:

1. "Реальный мир" построен как дисплейный список glNewList(1). В нем на месте зеркал полигоны отсутствуют. В него же включил источники света.

2. Отражения строятся в glNewList(2), в котором для каждого отражения вызывается первый список. Контур зеркала через Stencil.

Как "рендерить отражение вторым проходом" разобраться не могу.
Цитата ksvsvk @
Как "рендерить отражение вторым проходом" разобраться не могу.

Так это и есть второй проход (если я правильно понял, я больше по DirectX):
Цитата ksvsvk @
Отражения строятся в glNewList(2), в котором для каждого отражения вызывается первый список. Контур зеркала через Stencil.


Как я выше писал, в первом проходе ставим все источники света, попадающие мимо зеркала, а те, что попадают в зеркало, ставим отражёнными. При рендере второго прохода меняем их местами. Только источники, попадающие и туда, и туда, удваиваются.
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 2,0741 ]   [ 19 queries used ]   [ Generated: 21.07.18, 13:41 GMT ]