我正在寻找的是一种简单的方法,可以通过像素着色器获取每个像素的世界空间坐标。
我找到了这个话题: Pixel World Position
它似乎有效,但我还没有习惯于使用我完全理解它的语言。
难道没有一种简单的方法可以解决这个问题吗?
亲切的问候, 的Marius
答案 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);
}