【问题标题】:DX10+ multiple vertex buffers, single index bufferDX10+ 多顶点缓冲区,单索引缓冲区
【发布时间】:2013-06-03 23:50:00
【问题描述】:

我有点困惑,为什么您可以设置活动顶点缓冲区数组但只能设置一个索引缓冲区?那一个索引缓冲区能否处理所有顶点缓冲区中的顶点?如果是这样,我将如何指定索引属于哪个缓冲区?

我遇到的另一个问题是,由于我使用的是索引三角形列表,因此索引数据的大小与每个网格的顶点数据的大小大致相同。我正在考虑为每个顶点缓冲区创建一个索引缓冲区。我将动态添加网格,直到其中一个缓冲区用完,然后创建另一对。这样做不可避免地,这对缓冲区中的一个缓冲区将始终在另一个缓冲区之前填满,并且永远不会使用剩余空间。该空间实际上是否在gpu中被标记为保留? 例如,我可以将 4 个包含 32MB 数据但以 64MB 字节宽度创建的缓冲区放入 128MB 的 vram 中吗?

【问题讨论】:

    标签: c++ directx


    【解决方案1】:

    所有顶点缓冲区必须同时使用相同的索引。这样做的目的是允许不同的顶点缓冲区包含顶点数据的不同分量。例如,您可能决定将位置存储在一个顶点缓冲区中,并将纹理坐标存储在第二个缓冲区中。第零个索引将访问第一个顶点缓冲区的第一个位置和第二个顶点缓冲区的第一个纹理坐标。

    如果您想每帧更新纹理坐标但从不改变位置,这将节省带宽。

    多个顶点缓冲区也用于实例化。

    当您创建一个顶点或索引缓冲区时,您指定缓冲区的大小。然后,此内存量将保留在视频 RAM 中,不能被其他任何东西使用。

    所以如果我理解您的问题,不,您不能将四个 64mb 缓冲区放入 128mb 的内存中。

    【讨论】:

    • 好吧,这一切都清楚了,但是从多个缓冲区获取每个顶点数据如何影响性能呢?如果两个顶点缓冲区都有位置数据会发生什么?我可以同时获得并为动画等进行插值吗?
    • DX10+ 中没有固定的管线,因此完全取决于您(当您编写着色器时)对同一顶点的两个不同位置做什么。动画通常使用世界矩阵之间的插值而不是两个顶点缓冲区之间的插值来完成,但这是另一个话题!
    猜你喜欢
    • 2013-04-16
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多