Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.85.72] |
|
Сообщ.
#1
,
|
|
|
Если светить фонарем на зеркало в реальности , то увидим следующее:
1. Луч "проходит" сквозь зеркало и падает на отражение соответствующей стены в нем. 2. Отражение луча "выходит" из зеркала и падает на реальную стену. При моделировании этого в OpenGL фактически потребуются 2 источника -- сам фонарь и его отражение. Проблема в том, что количество источников света сильно ограничено (в моем случае -- 8) и при построении сцены с зеркалами их тривиально не хватает. Как можно обойти это ограничение? |
Сообщ.
#2
,
|
|
|
Рендерить отражение вторым проходом, зеркально переместив камеру, ограничить зеркало стенсилом. Или, если зеркало прямоугольное, рендерить его первым проходом, используя четыре плоскости отсечения, потом рендерить основную камеру.
Но, если луч света делится, только частично попадая в зеркало, то всё равно понадобится два источника света. |
Сообщ.
#3
,
|
|
|
В моем случае сделано так:
1. "Реальный мир" построен как дисплейный список glNewList(1). В нем на месте зеркал полигоны отсутствуют. В него же включил источники света. 2. Отражения строятся в glNewList(2), в котором для каждого отражения вызывается первый список. Контур зеркала через Stencil. Как "рендерить отражение вторым проходом" разобраться не могу. |
Сообщ.
#4
,
|
|
|
Цитата ksvsvk @ Как "рендерить отражение вторым проходом" разобраться не могу. Так это и есть второй проход (если я правильно понял, я больше по DirectX): Цитата ksvsvk @ Отражения строятся в glNewList(2), в котором для каждого отражения вызывается первый список. Контур зеркала через Stencil. Как я выше писал, в первом проходе ставим все источники света, попадающие мимо зеркала, а те, что попадают в зеркало, ставим отражёнными. При рендере второго прохода меняем их местами. Только источники, попадающие и туда, и туда, удваиваются. |