Как использовать clip () для проведения альфа-тестирования? - PullRequest
1 голос
/ 20 февраля 2011

Это вопрос HLSL, хотя я использую XNA, если вы хотите сослаться на эту платформу в своем ответе.

В XNA 4.0 у нас больше нет доступа к функциональности DX9 AlphaTest.

Я хочу:

  1. Визуализировать текстуру в буфер, используя только непрозрачные пиксели текстуры.
  2. Визуализировать текстуру, тексели которой нарисованы только в местах, где нет непрозрачныхпиксели с шага 1 были нарисованы.

Как это сделать?Если мне нужно использовать clip () в HLSL, как я могу проверить трафаретный буфер, который был нарисован на шаге 1, из моего кода HLSL?

До сих пор я сделал следующее:

_sparkStencil = new DepthStencilState
{
    StencilEnable = true,
    StencilFunction = CompareFunction.GreaterEqual,
    ReferenceStencil = 254,
    DepthBufferEnable = true
};


DepthStencilState old = gd.DepthStencilState;
gd.DepthStencilState = _sparkStencil;

// Only opaque texels should be drawn.
DrawTexture1();

gd.DepthStencilState = old;

// Texels that were rendered from texture1 should
// prevent texels in texture 2 from appearing.
DrawTexture2();

Ответы [ 2 ]

0 голосов
/ 20 февраля 2011

Для записи в буфер трафарета вы должны создать DepthStencilState, который записывает в буфер, затем нарисовать любую геометрию, которая должна быть отрисована в буфере трафарета, а затем переключиться на другой DepthStencilState, который использует соответствующую функцию сравнения.

Если есть какой-то предел, по которому альфа-значения должны быть отображены в буфере трафарета, то используйте шейдер в первом проходе, который вызывает clip() свойственный floor(alpha - val) - 1, где val - это число в (0,1) это ограничивает выводимые альфа-значения.

Я написал более подробный ответ здесь:

Трафаретное тестирование в XNA 4

0 голосов
/ 20 февраля 2011

Звучит так, будто вы хотите рисовать только пиксели, которые находятся в эпсилоне полной альфы (1.0, 255) в первый раз, но не влияют на пиксели, которые находятся в эпсилоне полной альфы во второй раз.

Я не специалист по графике, и я слишком мало сплю, но вы должны быть в состоянии добраться отсюда через файл сценария эффекта.

...