导入3D模型到OpenGL/C++项目中,推荐使用的文件格式和图形库是什么?

30
如果你想要:
  • 在3D编辑器(例如Blender,Maya等)中建模一个对象
  • 将该模型导出成数据/文件格式
  • 使用OpenGL和C/C++将该模型导入到项目中
那么:
  • 您会推荐导出哪种文件格式,即在简单性、可移植性和兼容性方面(即常见/流行的)?
  • 您会推荐使用哪些图形库将模型导入到OpenGL C/C++项目中(最好是开源的)?
  • 此外,是否有能够捕捉动画的数据/文件格式,即“动画模型”格式,以便可以在3D编辑器中建模动画并在代码中调用(例如访问动画序列中的帧或保存/加载与随时间变化相关的详细信息的其他范例)?
总的来说,我更注重简单性,即需要帮助我开始将艺术和计算机科学结合起来。我是一名麻省大学(UMass)的计算机科学专业学生,同时也通过选修图形设计课程和参加波士顿艺术学院的暑期/冬季课程等方式成为了一位类似“伪双修”的艺术专业学生。换句话说,我并不是一个完全的新手,但同时我也不想选用过于复杂的选项来制作基本示范项目,例如创建一个用户可以与之交互的3D角色的程序,这是了解如何桥接这两个领域的第一步。

3
+1,非常好的问题。至于“同时捕捉动画的数据/文件格式”,Alembic 已经被设计用来处理此类情况。不过,如果您在 Windows 平台上构建它,祝您好运。;-) - Cameron
好的,我会检查一下。(通过命令行在Mac OSX上构建。)谢谢!:D - Simone
3个回答

17
COLLADA(我念的时候在最后加上"啊"音),以及Assimp(发音类似"ple")。为什么要使用COLLADA呢?因为:
  • COLLADA是由Khronos(具体来说是索尼)制定的开放标准。开放标准的美妙之处在于它是一个标准!你可以确信,由符合标准的产品输出的任何内容都可以被另一个符合标准的产品正确读取。不过有点遗憾的是,有些三维建模产品对于COLLADA标准的符合度并不是特别看重。但还是可以放心:Blender、Maya、3ds Max以及其他大型三维建模软件都支持该格式。
  • COLLADA使用XML格式。如果您计划创建自己的读写器,这将使得工作变得更加简单。
  • 附加:我认为COLLADA是唯一没有与特定公司绑定的格式。这对我们来说是很好的。
  • 附加2:众所周知,解析COLLADA需要花费较长时间。这是事实。但是请想一想:所有其他非二进制格式(如fbx)也有相同的问题。对于您的需求,COLLADA应该足够了。
  • 附加3:COLLADA支持动画!
为导入库,我强烈推荐使用Assimp。为什么呢?
  • Assimp支持你能想象到的任何流行格式。它为所有格式提供了统一接口,这样切换到另一种格式就不那么痛苦了。
  • Assimp是可扩展的。这样,您即使导入自己的专有格式,也无需修改代码。
  • 附加4:Assimp是开源的!让我们支持开源软件吧!

1
Collada解析速度较慢,尤其是对于复杂模型而言 ;) - Michael IV
1
所以在这种情况下,他也可以使用3Ds并使用lib3ds。快速简单。Collada有点老派 ;) - Michael IV
我认为你在这件事上错了:“非二进制格式(比如fbx)”,FBX是二进制的!:)) - Michael IV
@MichaelIV 请参见:http://download.autodesk.com/us/fbx/20112/FBX_SDK_HELP/index.html?url=WS1a9193826455f5ff-150b16da11960d83164-6c6f.htm,topicNumber=d0e294 - Mark Garcia
让我们在聊天中继续这个讨论。 (Let's continue this discussion in chat.) - Michael IV
显示剩余6条评论

6

首先,在这里 你可以了解建议的模型加载lbs.Lib Assimp,它非常好并支持许多格式。对于首选格式,Collada不推荐使用,因为它是基于XML(文本)的格式,解析速度较慢。Obj格式也很普遍,但与Collada存在相同的问题。如果您想编写自己的解析器,那么它仍然很好,因为其结构非常简单。但是,我建议使用二进制格式3Ds。虽然它不支持动画,但它仍然是一个不错的选择。今天最流行的同时支持静态网格和动画的格式是FBX。您可以从Autodesk 免费下载 FBX SDK,并将其连接到您的引擎中。我选择FBX的原因是SDK和格式都非常强大。例如,在FBX中,您不仅可以嵌入几何和动画,还可以包括场景对象,如灯光、相机等。Autodesk文档也非常好。


3
+1 推荐使用 FBX。我在工作中用过它,其他游戏工作室也在使用。SDK 很好,支持很多功能。 - Lyubomir Vasilev
你对FBX的论述很有说服力。我一定会探索FBX SDK和Assimp。另外,感谢你指出了那篇其他的stackoverflow帖子。非常有用。 :) - Simone

4
我建议使用自定义格式,基本上只需将程序中使用的顶点缓冲区和索引缓冲区的二进制转储。 (这里使用了d3d术语,我知道opengl有相同的概念,但无法记住它们是否有不同的名称)。
然后,我会编写一个单独的程序,使用assimp几乎可以读取任何格式,并将文件写入您的自定义格式。 然后,您可以使用collada或其他方式存储实际模型,但不必在运行时加载该格式带来的复杂性和速度缓慢的问题。

1
也许这是未来要探索的事情,如果实际上这样做是有意义的。以前曾经走过这条路,即认为构建自己的库是“万能”的最佳解决方案,但大多数情况下,除非你正在为实际目的而这样做,否则不值得“重新发明轮子”,即改进现有解决方案,并且当然有一些经验可以帮助你在设计改进版本时做出决策。如今,我遵循帕累托法则,即80-20%的规则,而不是陷入完美主义。 - Simone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接