如何处理 COLLADA 指数?

Posted

技术标签:

【中文标题】如何处理 COLLADA 指数?【英文标题】:How to handle COLLADA indices? 【发布时间】:2013-02-01 09:26:59 【问题描述】:

我为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 个顶点吗? <p> 中的 108 个条目转换为 36 个顶点。索引有什么问题?

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

COLLADA 文件是 here。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何处理 COLLADA 指数?的主要内容,如果未能解决你的问题,请参考以下文章

从 A-Frame 或 JS 更新 Collada (.dae) 文件代码

Three.js Collada - 在三个 js 中加载多个 Collada 对象

使用 COLLADA DOM 将 COLLADA 文档输出为字符串

搅拌机 collada 导出/导入

SceneKit + Collada + 动画

COLLADA 文件查看器 [关闭]