1

有人会提供/指向我关于在 HLSL 和 XNA 中使用多个顶点流的解释或教程吗?我对 GPU 如何存储/访问它们、自定义着色器中流的优势或用途等感兴趣。

我已经看到了一些关于将多个顶点流用于实例化几何的示例,但是我很难理解底层机制。

更新

如果我有一个接受两个参数的顶点着色器(借自本教程

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;
}

从示例看来,我从中提取了这个instanceTransforminput从单独的流中提取。但是,在这种情况下,input流是一个包含六个顶点的列表,并且instanceTransform来自一个包含大量元素的流,其中包括平移矩阵。这应该用于实例化几何体。

我对这个着色器执行了多少次感到困惑——它是 VertexBuffer0.VertexCount*VertexBuffer1.VertexCount 吗?这种事情的问题在于,一旦有人弄清楚了,他们就不会费心向社区贡献一份写得很好的文档来详细说明他们的发现。

啊。

4

1 回答 1

1

由于还没有其他人参与进来,我会试一试 :-) 这是关于 Vertex Streams 的 apphub 论坛上的一个很棒的帖子:
http ://forums.create.msdn.com/forums/p/46229/ 276901.aspx

从答案之一:

要点是:不同的流可以有不同的数据布局,而您的 VertexDeclaration 决定了从哪个流中提取哪些数据。因此,例如,您可以拥有一个存储所有位置的缓冲区和一个存储所有颜色的缓冲区,您可以将它们设置为不同的流;或者,您可以将它们组合成一个流,但这并不总是很方便。

希望能帮助到你 ;-)

于 2011-01-20T12:16:48.770 回答