【问题标题】:XNA - vertex streams?XNA - 顶点流?
【发布时间】:2011-01-21 00:33:43
【问题描述】:

有人会提供/指向我关于在 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;
}

从我的示例中看来,instanceTransforminput 是从不同的流中提取的。然而,在这种情况下,input 流是一个包含六个顶点的列表,而instanceTransform 来自一个由翻译矩阵组成的大量元素的流。这应该用于实例化几何体。

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

啊。

【问题讨论】:

    标签: xna hlsl


    【解决方案1】:

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

    来自一个答案:

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

    希望对你有帮助 ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多