1

頂点シェーダーから出力される一連のパラメーターがあり、それらをピクセル シェーダーに渡したいと考えています。

これを行う通常の方法は、出力構造体を宣言することです

struct vOut
{
    float4 param0 : TEXCOORD0 ;
    float4 param1 : TEXCOORD1 ;
} ;

そのため、個別の変数を作成し、それぞれをテクスチャ座標に配置する必要があります。

16 個の * float4 の配列を宣言し、TEXCOORD0 -> TEXCOORD15このような頂点宣言を書き出すことなく占有させる方法はありますか?

4

1 に答える 1

1

次のように宣言するだけです:

struct VertexOutput_Test
{
  float4 hPosition    : POSITION;
  float4 vArr[5]     : TEXCOORD0;
};

通常、頂点およびピクセル シェーダー内でアドレス指定します。たとえば、このダミー コードは次のとおりです。

VertexOutput_Test VS_Test(VertexInput_1UV IN) 
{
  VertexOutput_Test OUT = (VertexOutput_Test)0;
  float4 Po = float4(IN.position.xyz,1.0);
  float3 No = IN.normal.xyz;
  OUT.hPosition = mul(Po,worldViewProj);
  OUT.vArr[0] = float4(1,0,0,0);
  OUT.vArr[1] = float4(1,1,0,0);
  OUT.vArr[2] = float4(1,0,1,0);
  OUT.vArr[3] = float4(1,0,0,1);
  OUT.vArr[4] = float4(1,1,1,1);
  return OUT;
}

fxc の出力を見ると、それらが適切に配置されていることがわかります。

于 2012-12-04T21:32:06.160 に答える