2011-01-19 20 views
1

誰かがHLSLとXNAで複数の頂点ストリームを使用する際の説明やチュートリアルを教えてくれますか? GPUがどのように格納/アクセスしているか、カスタムシェーダーのストリームの利点や用途などに興味があります。XNA - 頂点ストリーム?

インスタンス化されたジオメトリに対して複数の頂点ストリームを使用する例をいくつか見てきましたが、根底にある機構の周りに頭を巻きつけるのは苦労している。

更新

私はそれは私が別々のストリームから引き出されinstanceTransforminputことから、これを引っ張っ例からと思われる二つのパラメータ(borrowed from this tutorial

InstancingVSoutput InstancingVS(InstancingVSinput input, float4x4 instanceTransform : TEXCOORD0, float4 color : TEXCOORD4) 
{ 
InstancingVSoutput output; 
float4 pos = input.Position; 
pos = mul(pos, transpose(instanceTransform)); 
pos = mul(pos, WVP); 
output.Position = pos; 
output.Color = color; 
return output; 
} 

を受け入れ、頂点シェーダを持っている場合。しかし、この場合、inputストリームは6つの頂点のリストであり、instanceTransformは変換行列からなるはるかに多くの要素のストリームに由来します。これはインスタンス化されたジオメトリに使用されることになっています。

このシェーダが何回実行されるのか混乱しています。それはVertexBuffer0.VertexCount * VertexBuffer1.VertexCountですか?このような問題の問題は、誰かがそれを理解した後、彼らの発見を詳述しているよく書かれた文書をコミュニティに戻すことを気にしないということです。

答えて

1

誰もまだで相づちを打っていないので、私はこの:-)それをやってみるよ頂点ストリームについてapphubフォーラムに大きなスレッドです:答えの1から
http://forums.create.msdn.com/forums/p/46229/276901.aspx

異なるストリーム が異なるデータレイアウトを持つことができ、かつ あなたVertexDeclarationは 、データがどのようなストリームから引き出されますが決まり:

要旨はこれです。 例えば、 のバッファには、すべて の位置と、すべての の色を格納するバッファがあり、それらを 異なるストリームに設定することができます。代わりに を単一のストリーム に書き込むこともできますが、これは必ずしも便利ではありません。

は、それは確かに役立ちます;-)

+0

+1に役立ちます願っています。私の更新を参照してください。 –

+0

答えがあれば勝ちます。 =) –