Проблема с использованием вершин в пиксельном шейдере - PullRequest
0 голосов
/ 20 июня 2019

Попытка раскрасить вершины, используя их положение Y для рельефа, но я получаю действительно странный результат.

struct InputType
{
    float4 position : SV_POSITION;
    float2 tex : TEXCOORD0;
    float3 normal : NORMAL;
    float4 sunlightPos : TEXCOORD1;
};
float4 main(InputType input) : SV_TARGET
{
    float4 textureColour = float4(0.0, 0.0, 0.0, 1.0);

    if (input.position.y > 0.0f) //r
    {
        textureColour.r = 1;
        textureColour.g = 0;
        textureColour.b = 0;
    }
    if (input.position.y > 20.f) //g
    {
        textureColour.r = 0;
        textureColour.g = 1;
        textureColour.b = 0;
    }
    if (input.position.y > 40.f) //b
    {
        textureColour.r = 0;
        textureColour.g = 0;
        textureColour.b = 1;
    }
    return textureColour;
}

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

Вид местности сверху (в перспективе)

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

1 Ответ

0 голосов
/ 21 июня 2019

При использовании в шейдере SV_Position описывает местоположение пикселя.Доступно во всех шейдерах для получения центра пикселя со смещением 0,5.

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

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

...