Введение в программирование трехмерных игр с DX9

       

Обновление буфера трафарета



8.1.4. Обновление буфера трафарета

Помимо алгоритма принятия решения записывать конкретный пиксель во вторичный буфер или нет, мы можем задать правила обновления элементов буфера трафарета в следующих случаях:

Проверка трафарета для пикселя в позиции (i,j) завершилась неудачно. Мы можем определить, как в таком случае будет обновляться элемент (i, j) буфера трафарета установив режим визуализации D3DRS_STENCILFAIL:

Device->SetRenderState(D3DRS_STENCILFAIL, StencilOperation);

Тест глубины для пикселя в позиции (i, j) завершился неудачно. Мы можем определить, как в таком случае будет обновляться элемент (i, j) буфера трафарета установив режим визуализации D3DRS_STENCILZFAIL:

Device->SetRenderState(D3DRS_STENCILZFAIL, StencilOperation);

Тест глубины и проверка трафарета для пикселя в позиции (i, j) завершились успешно. Мы можем определить, как в таком случае будет обновляться элемент (i, j) буфера трафарета установив режим визуализации D3DRS_STENCILPASS:

Device->SetRenderState(D3DRS_STENCILPASS, StencilOperation);

В приведенных выше примерах StencilOperation — это одна из перечисленных ниже предопределенных констант:

D3DSTENCILOP_KEEP — Значение в буфере трафарета не должно меняться (следовательно, остается то значение, которое было в буфере до этого).

D3DSTENCILOP_ZERO — Элементу буфера трафарета присваивается ноль.

D3DSTENCILOP_REPLACE — Элемент буфера трафарета будет замен на эталонное значение трафарета.

D3DSTENCILOP_INCRSAT — Элемент буфера трафарета будет увеличен. Если в результате увеличения будет превышено максимальное допустимое значение элемента буфера трафарета, элементу будет присвоено максимальное допустимое значение.

D3DSTENCILOP_DECRSAT — Элемент буфера трафарета будет уменьшен. Если в результате уменьшения значение элемента буфера трафарета станет меньше нуля, элементу будет присвоен ноль.

D3DSTENCILOP_INVERT — Элемент буфера трафарета будет поразрядно инвертирован.

D3DSTENCILOP_INCR — Элемент буфера трафарета будет увеличен. Если в результате увеличения будет превышено максимальное допустимое значение элемента буфера трафарета, элементу будет присвоен ноль.

D3DSTENCILOP_DECR — Элемент буфера трафарета будет уменьшен. Если в результате уменьшения значение элемента буфера трафарета станет меньше нуля, элементу будет присвоено максимальное допустимое значение.



Содержание раздела