在像素着色器中使用顶点位置时出现问题



尝试使用地形的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;
}

但是在结果中,所有顶点都是蓝色的,并且有两条红色和绿色条纹跟随我的相机在相对于地形中的屏幕的同一位置,并且当我改变角度时,不同的顶点正在改变它们的颜色,但相对于屏幕总是在同一位置。这根本不是我理解着色器应该工作的方式。我做错了什么吗?

从顶部查看地形(透视(

我曾经将高度贴图应用于平面,我会使用纹理的颜色值以相同的方式为顶点着色,并使用纹理的颜色值更改顶点着色器中的高度,因此顶点着色器中的位置输出应该是正确的。

在着色器中使用时,SV_Position描述像素位置。在所有着色器中均可用,以获得偏移量为 0.5 的像素中心。

SV_POSITION是屏幕空间中的像素位置(对于像素着色器(,有关此问题的答案中的更多信息。

Afaik 顶点位置没有像素着色器语义,因此您必须通过删除语义标识符并从顶点着色器中写入它来手动从顶点着色器传递它。

最新更新