2

我正在寻找的是一种简单的方法来获取通过像素着色器运行的每个像素的世界空间坐标。

我找到了这个主题: 像素世界位置

它似乎有效,但我还没有习惯于我完全理解它的着色器语言。

没有简单的方法来解决这个问题吗?

亲切的问候,马吕斯

4

1 回答 1

3

最简单的方法是将它从顶点着色器作为纹理坐标传递,像这样(dx9 样本很容易转换为 10,如果你使用它):

cbuffer cbmat : register( b0 )
{
    float4x4 tW; //World transform
    float4x4 tWVP: //World * View * Projection
};



struct vs2ps
{
    float4 Pos : POSITION;
    float4 TexCd : TEXCOORD0;
    float3 PosW : TEXCOORD1;
};

vs2ps VS(float4 Pos : POSITION,float4 TexCd : TEXCOORD0)
{
    vs2ps Out;
    Out.Pos = mul(Pos, tWVP);
    Out.TexCd = TexCd;
    Out.PosW = mul(Pos, tW);
    return Out;
}

float4 PS(vs2ps In): COLOR
{
    return float4(In.PosW,1.0f);
}
于 2012-11-09T14:46:11.673 回答