Основы построения 3-х мерных сцен с использованием библиотеки DirectX. Макушкина Л.А - 32 стр.

UptoLike

34
После этого возникает два вопроса - как строить Shadow Volume для данного
объекта, и как проверять, какая часть сцены находится внутри этого объекта.
Надо сказать, что эти вопросы связаны друг с другом, то есть от того как
строить Shadow Volume будет зависеть то, как будет находиться часть сцены
внутри него, и наоборот.
В самом простом случае ответ на первый вопрос звучит так - Shadow Volume
это силуэт объекта с точки зрения источника света, вытянутый до бесконечности.
То есть метод построения такой необходимо найти все силуэтные ребра
объекта (с позиции источника света), и каждое такое ребро превратить в квад из
двух треугольников, вытянутый по направлению света. Понятно, что до
бесконечности вытянуть его нельзя, поэтому вытягивание происходит на какую-
то величину, заведомо превышающую размеры сцены.
Для нахождения части сцены, попадающей внутрь этого теневого объема,
используется стенсил-буфер (в дальнейшем - просто стенсил).
Стенсил-буфер это дополнительный буфер размера экрана, то есть каждому
пикселю экрана соответствует свое значение в стенсил-буфере. Каждый раз, когда
точка рисуется на экране, то кроме тестов вроде сравнения с глубиной в Z-буфере
она проходит еще и стенсил тест. То есть, например, можно сказать - точка
рисуется, только если в стенсиле значение больше единицы. С другой стороны,
можно сказать, как изменить значение стенсила после того как пиксель в этом
месте отрисуется.
Это, например, полезно для разного рода отсечений. Характерный пример -
портальное отсечение. Пусть имеется портал в виде какого-то набора
треугольников, и необходимо, чтобы та часть сцены, которая за порталом,
выходила за его границы. Если портал произвольной формы, то гарантировать это
при простой отрисовке сложновато. Но если есть стенсил, то все становится
просто - сначала выполняется отрисовка портала в стенсил определенным
значением (запись на экран или в Z-буфер отключаем), а потом при отрисовке
сцены за порталом включается на это значение стенсил-тест. На запись в стенсил
есть следующие команды - что делать со стенсилом и при каких условиях.
Действия со стенсилом: "увеличить значение в стенсиле", "уменьшить значение в
    После этого возникает два вопроса - как строить Shadow Volume для данного
объекта, и как проверять, какая часть сцены находится внутри этого объекта.
    Надо сказать, что эти вопросы связаны друг с другом, то есть от того как
строить Shadow Volume будет зависеть то, как будет находиться часть сцены
внутри него, и наоборот.
    В самом простом случае ответ на первый вопрос звучит так - Shadow Volume
это силуэт объекта с точки зрения источника света, вытянутый до бесконечности.




    То есть метод построения такой – необходимо найти все силуэтные ребра
объекта (с позиции источника света), и каждое такое ребро превратить в квад из
двух треугольников, вытянутый по направлению света. Понятно, что до
бесконечности вытянуть его нельзя, поэтому вытягивание происходит на какую-
то величину, заведомо превышающую размеры сцены.
    Для нахождения части сцены, попадающей внутрь этого теневого объема,
используется стенсил-буфер (в дальнейшем - просто стенсил).
    Стенсил-буфер – это дополнительный буфер размера экрана, то есть каждому
пикселю экрана соответствует свое значение в стенсил-буфере. Каждый раз, когда
точка рисуется на экране, то кроме тестов вроде сравнения с глубиной в Z-буфере
она проходит еще и стенсил тест. То есть, например, можно сказать - точка
рисуется, только если в стенсиле значение больше единицы. С другой стороны,
можно сказать, как изменить значение стенсила после того как пиксель в этом
месте отрисуется.
    Это, например, полезно для разного рода отсечений. Характерный пример -
портальное отсечение. Пусть имеется портал в виде какого-то набора
треугольников, и необходимо, чтобы та часть сцены, которая за порталом,
выходила за его границы. Если портал произвольной формы, то гарантировать это
при простой отрисовке сложновато. Но если есть стенсил, то все становится
просто - сначала выполняется отрисовка портала в стенсил определенным
значением (запись на экран или в Z-буфер отключаем), а потом при отрисовке
сцены за порталом включается на это значение стенсил-тест. На запись в стенсил
есть следующие команды - что делать со стенсилом и при каких условиях.
Действия со стенсилом: "увеличить значение в стенсиле", "уменьшить значение в

                                         34