Почему в SVS-образном шейдере HLSL, почему SV_POSITION отличается от другой семантики?

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

Например, я использую треугольник со следующими координатами:

(0.0f, 0.5f)
(0.5f, -0.5f)
(-0.5f, -0.5f)

Значения w и z равны 0 и 1 соответственно.

Это пиксельный шейдер.

struct VS_IN
{
    float4 pos : POSITION;
};

struct PS_IN
{
    float4 pos : SV_POSITION;
    float4 k : LOLIMASEMANTIC;
};

PS_IN VS( VS_IN input )
{
    PS_IN output = (PS_IN)0;
    output.pos = input.pos;
    output.k = input.pos;
    return output;
}

float4 PS( PS_IN input ) : SV_Target
{
    // screenshot 1
    return input.pos;

    // screenshot 2
    return input.k;
}

technique10 Render
{
    pass P0
    {
        SetGeometryShader( 0 );
        SetVertexShader( CompileShader( vs_4_0, VS() ) );
        SetPixelShader( CompileShader( ps_4_0, PS() ) );
    }
}

Снимок экрана 1

Снимок экрана 2

Когда я использую первый оператор (результат - первый снимок экрана), тот, который использует семантику SV_POSITION, результат совершенно неожиданно и является желтым, тогда как использование любой другой семантики приведет к ожидаемому результату. Почему это?

6 голосов | спросил tina nyaa 25 72012vEurope/Moscow11bEurope/MoscowSun, 25 Nov 2012 16:09:44 +0400 2012, 16:09:44

1 ответ


11

SV_Position дает вам положение в координатах экрана, а не в диапазоне [0,1], но в основном в пиксельных координатах. Диапазон будет соответствовать значению D3D11_VIEWPORT, возможно, что-то вроде строк:

D3D11_VIEWPORT viewport = {0};
viewport.Width = 1280;
viewport.Height = 720;

Итак, чтобы снова получить диапазон [0,1], для цветов вы можете сделать:

return float4(input.pos.r/1280, input.pos.g/720, 0, 1);

ответил 25 72012vEurope/Moscow11bEurope/MoscowSun, 25 Nov 2012 20:30:49 +0400 2012, 20:30:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132