我为模型查看器编写了collada加载器。

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

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

或者,我可以在编写缓冲区之前对整个网格进行三角剖分,然后将缓冲区系统保持原样(它将假定网格是在手工之前进行三角剖分的)。

为了事先对模型进行三角剖分,我需要将整个对象加载到整个列表的链接列表循环中,并插入新索引以将4个以上的多边形切成三角形。

如果我在编写网格时进行了三角剖分,则需要依靠4个多边形的书写,将它们放入单独的缓冲区中,然后当该缓冲区中有整个4+多边形时,对其进行三角剖分并编写新的索引。

本质上,这将添加另一个for循环,该循环仅在遇到4+三角形时才触发。

到目前为止,这是迄今为止我写过的最复杂的事情,我很难把头放在哪个方向会更有效。

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

任何人都可以在不进行手工编写和测试的情况下就如何评估这两个选项的复杂性提供任何建议吗?

最佳答案

添加一个内部循环来处理偶发情况很好。如果我正确理解了您的问题,则需要测试多边形并根据需要对它们进行三角剖分;有条件执行的内部循环就是对此的适当反映。

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

10-06 05:22
查看更多