5

我为文件格式写了一个简单的阅读器COLLADA,它似乎工作正常。现在,我有一个 Blender 导出的立方体网格,它是边缘分割和三角化的,所以它应该有 12 个三角形(每个面 2 个)、24 个顶点(每个面 4 个)和 36 个索引(每个面 6 个)。该网格还具有法线数据和 UV 贴图。

COLLADA文件有 24 个顶点、12 个法线和 36 个 UV,所以我假设法线是每个三角形的,UV 是每个索引的。三角形的polylist计数是 12,这是正确的,并且vcount有 12 个 '3',所以这也是正确的。现在,<p>索引列表有 108 个条目,其中 0、3、6 等是顶点索引,1、4、7 等是普通索引,2、5、8 等是 UV 索引。

我有一个用于顶点的内部结构,它由位置 ( vec3)、法线 ( vec3) 和 UV 坐标 ( vec2) 组成。为了绘制网格,我使用 OpenGL 的顶点缓冲区,并有一个单独的索引列表。

问题是,加载网格后我不应该有 24 个顶点吗?中的 108 个条目<p>转换为 36 个顶点。索引有什么问题?

我可能在这里遗漏了一些非常简单的东西,但不能只是看到它。

COLLADA文件在这里

4

1 回答 1

7

好的,我找到了解决方案,只好用一个简单的飞机来理清思路。由于每个面都是一个三角形,因此最终的顶点数是 polylist 的 count 属性中描述的数量的三倍。因此,对于立方体,它是 36 - 而不是 24。最后,36 确实正确绘制了立方体。所以,主要是我的大脑发疯了。

于 2013-02-16T16:38:53.217 回答