0

我为我的模型查看器编写了一个 collada 加载程序。

现在写它循环遍历所有顶点和索引并创建索引和顶点缓冲区,以便我可以渲染网格。

如果模型不是三角化的,我有两个选择。我可以在将索引写入缓冲区时对其进行训练(即计算并添加更多索引以创建三角形)。

或者,我可以在编写缓冲区之前对整个网格进行三角化,并保持缓冲区系统不变(它将假定事先对网格进行了三角剖分)。

为了事先对模型进行分割,我需要通过列表将整个事物加载到链表循环中,并插入新索引以将 4 个以上的多边形分解为 tirangles。

如果我在编写网格时进行三角剖分,我需要延迟写入 4 个以上的多边形,将它们放入一个单独的缓冲区中,然后当该缓冲区包含整个 4 个以上的多边形时,对其进行三角剖分并写入新的索引。

这实际上会添加另一个 for 循环,该循环只会在每次遇到 4+ 三角形时触发。

这是迄今为止我写过的最复杂的东西,我很难弄清楚哪个方向会更有效。

一个涉及通过复制整个网格使我使用的内存量增加一倍,以便我可以对其进行处理,另一个涉及嵌套的 for 循环,该循环仅在遇到 4 个以上的多边形时触发。

任何人都可以就如何在不实际编写和测试这两个选项的情况下衡量这两个选项的复杂性提供任何建议吗?

4

1 回答 1

1

添加一个内部循环来处理偶尔的情况很好。如果我正确理解您的问题,您将需要测试多边形并根据需要以一种或另一种方式对它们进行三角测量;有条件执行的内部循环是对此的适当反映。

如果您认为内部循环会使您的函数太长/丑陋/难以阅读,您可以编写一个单独的包含内部循环的“triangulate_polygon()”函数,并有条件地调用它。

于 2012-06-22T00:59:43.953 回答