2

私が探しているのは、ピクセル シェーダーを通過する各ピクセルのワールド空間座標を取得する簡単な方法です。

このトピックを見つけました: Pixel World Position

動作しているように見えますが、私はまだシェーダー言語に慣れていないため、完全に理解できていません。

これを解決する簡単な方法はありませんか?

敬具、マリウス

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 に答える