Составители:
Рубрика:
36
Естественно, во время отрисовки никакие такие цвета не рисуются, все эти
значения - только в стенсиле.
Еще одна важная деталь - во время отрисовки волюмы необходимо
выключить запись в Z-буфер. То есть сам Z-буфер по-прежнему работает, но если
точка волюма прошла Z-test, то ее координата не записывается в Z-буфер.
После того как в стенсиле были получены ненулевые значения только там где
есть тень, то наложить эту тень уже несложно. Самый простой метод - нарисовать
черный полупрозрачный квад во весь экран и выводить его с блендингом там, где
стенсил-тест пройден. Тогда там где есть тень освещение станет меньше.
Для более сложных объектов все построения становятся гораздо запутанней
из-за того что по одному месту может проходить больше граней волюмов, но
прицип остается тем же.
1. Построение теневого объема.
Собственно, волюм - это все силуэтные ребра объекта вытянутые в квад по
направлению от источника света, вопрос - как эти ребра находить.
Ребра, как известно, находятся на стыке треугольников, и в этой реализации
предполагается, что у любого ребра всегда можно выделить ровно 2
треугольника, между которыми оно находится. Это налагает некоторые
ограничения на модель - во-первых, она должна быть замкнута, во-вторых, не
должно быть ребер, на которых пересекаются больше 2-х треугольников.
Если все эти условия выполнены, то условие того, что ребро принадлежит
силуэту - если один из треугольников ребра лицевой стороной повернут к свету, а
второй - нет. Понятно, что для сетки, для которой хранятся вершины и индексы
находить ребра и соответствующие им треугольники каждый раз при построении
- медленно и незачем. Все эти данные можно просчитать заранее, тем более
обсчет этого не быстрый. В принципе, эта информация эквивалентна так
называемой adjacency - информации о соседях каждого треугольника по каждому
ребру. То есть существует структура:
struct ADJ
{
DWORD face1;
DWORD face2;
DWORD face3;
};
Естественно, во время отрисовки никакие такие цвета не рисуются, все эти значения - только в стенсиле. Еще одна важная деталь - во время отрисовки волюмы необходимо выключить запись в Z-буфер. То есть сам Z-буфер по-прежнему работает, но если точка волюма прошла Z-test, то ее координата не записывается в Z-буфер. После того как в стенсиле были получены ненулевые значения только там где есть тень, то наложить эту тень уже несложно. Самый простой метод - нарисовать черный полупрозрачный квад во весь экран и выводить его с блендингом там, где стенсил-тест пройден. Тогда там где есть тень освещение станет меньше. Для более сложных объектов все построения становятся гораздо запутанней из-за того что по одному месту может проходить больше граней волюмов, но прицип остается тем же. 1. Построение теневого объема. Собственно, волюм - это все силуэтные ребра объекта вытянутые в квад по направлению от источника света, вопрос - как эти ребра находить. Ребра, как известно, находятся на стыке треугольников, и в этой реализации предполагается, что у любого ребра всегда можно выделить ровно 2 треугольника, между которыми оно находится. Это налагает некоторые ограничения на модель - во-первых, она должна быть замкнута, во-вторых, не должно быть ребер, на которых пересекаются больше 2-х треугольников. Если все эти условия выполнены, то условие того, что ребро принадлежит силуэту - если один из треугольников ребра лицевой стороной повернут к свету, а второй - нет. Понятно, что для сетки, для которой хранятся вершины и индексы находить ребра и соответствующие им треугольники каждый раз при построении - медленно и незачем. Все эти данные можно просчитать заранее, тем более обсчет этого не быстрый. В принципе, эта информация эквивалентна так называемой adjacency - информации о соседях каждого треугольника по каждому ребру. То есть существует структура: struct ADJ { DWORD face1; DWORD face2; DWORD face3; }; 36
Страницы
- « первая
- ‹ предыдущая
- …
- 32
- 33
- 34
- 35
- 36
- …
- следующая ›
- последняя »