HLSL获得了PIXEL的世界地位

时间:2012-11-06 14:16:47

标签: shader hlsl

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

我找到了这个话题: Pixel World Position

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

难道没有一种简单的方法可以解决这个问题吗?

亲切的问候, 的Marius

1 个答案:

答案 0 :(得分: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);
}