2

在我的场景中,我有一棵网格树。每个网格包含一个变换矩阵、一个顶点列表、法线、uvs 和一个子网格列表。

我想使用 VBO 将“结构数组”中的几何图形发送到 glsl,但我不知道在父网格矩阵变换的情况下如何处理更新每个网格的矩阵。我应该遍历网格树并为每帧的每个顶点添加一个矩阵吗?我应该对每帧的顶点进行预乘吗?我应该保持一个统一的矩阵列表并按索引引用当前顶点的矩阵吗?我应该为每个网格使用一个 glDrawArrays 还是 glDrawElements?

4

1 回答 1

1

“标准”方法是在每个网格上使用 glDraw 调用。

对于每个网格,您将其变换矩阵输入到应用于整个网格的单个统一中。然后在顶点着色器中使用该矩阵将网格从“对象空间”转换为“剪辑空间”。

一个网格(或绘图调用)具有多个矩阵通常用于网格上的非刚性变换(例如由骨骼引起的变形)。

另一种方法是使用“硬件实例化”,具体取决于您必须绘制的网格数量。您可以在其中多次绘制类似的网格,提供矩阵数组,并让硬件在给定正在绘制的 instanceID 的情况下选择相应的矩阵。

于 2010-12-16T08:10:28.480 回答