我为我的模型查看器写了一个collada加载器。
现在写它循环遍历所有顶点和索引并创建和索引和顶点缓冲区,以便我可以渲染网格。
如果模型没有三角测量,我有两个选择。我可以在将索引写入缓冲区时对其进行跟踪(即计算并添加更多索引以创建三角形)。
或者我可以在编写缓冲区之前对整个网格进行三角化,然后保持缓冲区系统不变(假设网格在手工之前进行三角测量)。
为了预先模拟模型,我需要将整个事物加载到列表中的链表循环中,并插入新索引以将4+多边形修改为tirangles。
如果我在编写网格时进行三角测量,我需要编写4+多边形,将它们放入单独的缓冲区,然后当缓冲区中包含整个4+多边形时,对其进行三角测量并编写新索引
这实际上会添加另一个for循环,只有在遇到4+三角形时才会触发。
到目前为止,这是迄今为止我写过的最复杂的事情,而且我很难绕过哪个方向会更有效。
一个涉及通过复制整个网格使用的内存量增加一倍,因此我可以使用它,另一个涉及嵌套的for循环,只有在遇到4个以上的多边形时才会触发。
任何人都可以提供任何建议,如何在没有实际编写和测试两者的情况下评估这两个选项的复杂性?
答案 0 :(得分:1)
添加内循环以处理偶然情况很好。如果我正确理解您的问题,您将需要测试多边形并根据需要对其进行三角测量;条件执行的内循环是对此的恰当反映。
如果您认为内部循环会使您的函数太长/丑/难以阅读,您可以编写一个单独的“triangulate_polygon()”函数,其中包含内部循环,并有条件地调用它。