0

我读到将网格组合成一个网格并渲染速度要快得多,因为您一次发送所有数据。我使用的是directx9.0c,固定函数,c++。我有很多 LP3DXMESH,我想合并并一次发送来绘制。

我用谷歌搜索答案,我得到垃圾结果。我怎样才能做到这一点?

4

1 回答 1

1

要将多个网格合并为一个,非常简单,只需满足以下几个条件即可。

您的所有网格必须具有相同的顶点大小/布局(或声明

鉴于此,假设您有 3 个模型: 模型 1 有 10 个顶点和 21 个索引 模型 2 有 20 个顶点和 30 个索引 模型 3 有 25 个顶点和 45 个索引

创建一个能够容纳所有数据的顶点缓冲区(例如:10+20+25 个顶点)

将模型 1、模型 2 和模型 3 中的每个顶点复制到这个新的顶点缓冲区中。

以与顶点缓冲区相同的方式创建索引缓冲区(例如:21 + 30 + 45 个索引)

现在对于模型一,只需复制索引。

对于模型 2,您需要复制索引,但将 10 添加到每个索引(第一个顶点缓冲区的大小)。

对于模型 3,您执行与第二个相同的操作,但需要添加 10 + 20(每个先前大小的总和)。

使用新缓冲区创建网格。

关于一些考虑:

  • 如果您不经常绘制模型(例如,每个绘制 3 个网格),那几乎不会给您带来任何好处。
  • 如果您的每个模型都需要使用不同的转换(也经常更改)来绘制,那么您还需要在 cpu 中转换顶点(这会给您带来潜在的性能损失),或者在您的模型中添加一些额外的数据(就像只是一个 ID),并使用任何形式的查找(数组或纹理查找很常见)在 vertexshader 中进行转换。
  • 在某些情况下使用这种技术实际上可能很好(比如多次重复同一个对象),但看起来不像您的用例。
于 2013-01-29T17:02:10.603 回答