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

UptoLike

35
стенсиле", "записать в стенсил данное значение". Условия на запись - "точка
прошла Z-Test", "точка не прошла Z-Test", "точка прошла стенсил-тест", "точка не
прошла стенсил-тест".
То есть можно установить, например, что при пройденном Z-Test'e значение в
стенсиле увеличивается, а при непройденном стенсил тесте, уменьшается и так
далее, в любых комбинациях.
Сначала выполняется отрисовка всей сцены без теней. Основная задача -
чтобы Z-буфер был правильно заполнен. Далее два раза выполняется отрисовка
объема (оба раза запись в Frame buffer отключена, то есть на экран ничего не
выводится). Первый раз выполняется отрисока тех граней, которые повернуты
лицевой стороной к камере (front-cull), и при этом необходимо увеличить стенсил
там, где пройден Z-test. В результате в стенсиле будут находиться значения
больше нуля там, где передняя часть волюма находится к наблюдателю ближе
чем к сцене:
За второй проход выполняется отрисока граней, которые повернуты лицевой
стороной от камеры (back-cull), и уменьшение значения стенсила там, где пройден
Z-test. На картинке - те точки, где надо уменьшить значения стенсила:
В результате после обоих проходов будут получены ненулевые значения там,
где передняя часть волюма прошла тест, а задняя - не прошла. На самом деле, это
и есть та часть сцены на экране, которая находится внутри волюма, а значит - в
тени от того объекта, от которого строили волюм. Те области, которые не были
вычеркнуты вторым проходом, и есть то, что лежит в тени.
стенсиле", "записать в стенсил данное значение". Условия на запись - "точка
прошла Z-Test", "точка не прошла Z-Test", "точка прошла стенсил-тест", "точка не
прошла стенсил-тест".
    То есть можно установить, например, что при пройденном Z-Test'e значение в
стенсиле увеличивается, а при непройденном стенсил тесте, уменьшается и так
далее, в любых комбинациях.
    Сначала выполняется отрисовка всей сцены без теней. Основная задача -
чтобы Z-буфер был правильно заполнен. Далее два раза выполняется отрисовка
объема (оба раза запись в Frame buffer отключена, то есть на экран ничего не
выводится). Первый раз выполняется отрисока тех граней, которые повернуты
лицевой стороной к камере (front-cull), и при этом необходимо увеличить стенсил
там, где пройден Z-test. В результате в стенсиле будут находиться значения
больше нуля там, где передняя часть волюма находится к наблюдателю ближе
чем к сцене:




    За второй проход выполняется отрисока граней, которые повернуты лицевой
стороной от камеры (back-cull), и уменьшение значения стенсила там, где пройден
Z-test. На картинке - те точки, где надо уменьшить значения стенсила:




    В результате после обоих проходов будут получены ненулевые значения там,
где передняя часть волюма прошла тест, а задняя - не прошла. На самом деле, это
и есть та часть сцены на экране, которая находится внутри волюма, а значит - в
тени от того объекта, от которого строили волюм. Те области, которые не были
вычеркнуты вторым проходом, и есть то, что лежит в тени.




                                         35