哪些网格数据格式分别提供位置、法线和 UV 坐标的索引?

Posted

技术标签:

【中文标题】哪些网格数据格式分别提供位置、法线和 UV 坐标的索引?【英文标题】:Which Mesh Data Formats provide Indices for Positions, Normals and UV Coords separately? 【发布时间】:2017-04-27 08:56:09 【问题描述】:

我的游戏将使用大量带有硬边的低多边形网格。这意味着很多时候,一个顶点位置将使用多个法线和 UV 坐标。 因此,将顶点位置、法线和 UV 拆分为 3 个单独的数组,然后每个顶点使用 3 个索引来构造网格对我来说是很有意义的。 是否有任何网格数据格式支持骨骼动画、灯光、纹理、材质和所有垃圾以及单独索引位置、法线和 UV?还是我在 3D 编辑器 (Blender) 中保存数据的方式的问题?

【问题讨论】:

【参考方案1】:

遗憾的是,没有有效的方法可以为位置、法线、UV 等使用不同的索引。每个组合都必须是一个单独的顶点。

This 线程讨论了这个问题,但使用单个顶点通常效率更高。

如果您决定从 3D 编辑器导出为 .obj 格式,文件中将提供每个顶点及其数据。

This video 显示了加载 .obj 文件的完整示例,从 Blender 一直到 OpenGL。

【讨论】:

我还注意到 .obj 文件使用这种存储顶点的方式。有所有的位置、法线和 uvs,面由 3*3 整数构成。不幸的是,obj 没有我需要的所有功能。我现在决定暂时只使用 .dae,然后我将自己加载 3 个单独的数组并在加载网格时对它们进行索引。这样我就不必向我的着色器发送尽可能多的数据,并且我可以将更多的计算转移到显卡上,这似乎是一件好事,因为我的程序一开始就不会使用显卡。谢谢! @stimulate 没问题,别忘了标记为答案 :) 嘿嘿,你这个贪婪的老家伙;) @stimulate 这是我的燃料 ;) @SporreKing:“遗憾的是,没有有效的方法来为位置、法线、UV 等使用不同的索引。”That is untrue.

以上是关于哪些网格数据格式分别提供位置、法线和 UV 坐标的索引?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 3D 模型具有不同 uv 坐标的重复顶点位置

如何在 Blender 导出脚本中导出每个顶点的 UV 坐标

用opengl实现网格[重复]

如何处理 COLLADA 指数?

通用三角形网格的简单纹理映射

UE4 FBX静态网格物体通道