XNA - 顶点流?

时间:2011-01-19 17:18:12

标签: xna hlsl

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

我已经看到了一些关于将多个顶点流用于实例化几何体的示例,但是我很难将我的头部缠绕在底层机制上。

更新

如果我有一个顶点着色器,它接受两个参数(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;
}

从示例中可以看出,我从instanceTransform中提取了此内容,而input是从单独的流中提取的。但是,在这种情况下,input流是六个顶点的列表,instanceTransform来自包含翻译矩阵的更多元素的流。这应该用于实例几何。

我对这个着色器被执行多少次感到困惑 - 它是VertexBuffer0.VertexCount * VertexBuffer1.VertexCount吗?这种事情的问题在于,一旦有人想出来,他们就不会费心地将一份精心编写的文件反馈给社区,详细说明他们的发现。

哎呀。

1 个答案:

答案 0 :(得分:1)

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

来自其中一个答案:

  

要点是:不同的流   可以有不同的数据布局,和   你的VertexDeclaration确定了什么   数据从什么流中提取。   所以,例如,你可以有一个   存储所有职位的缓冲区   和一个存储所有你的缓冲区   颜色,你可以设置为   不同的溪流;或者你   可以将它们组合成一个流,   但这并不总是方便。

希望它有所帮助; - )