C++ 用于将三维模型导入OpenGL/C++;项目

C++ 用于将三维模型导入OpenGL/C++;项目,c++,opengl,graphics,3d,file-format,C++,Opengl,Graphics,3d,File Format,如果您想: 在3D编辑器中为对象建模,例如Blender、Maya等 将模型导出为数据/文件格式 使用OpenGL和C/C++将模型导入到项目中 然后: 您建议导出到哪种文件格式,即简单性、可移植性和兼容性(即通用/流行) 您建议使用哪些图形库将模型导入到OpenGL C/C++项目中(即最好是开源) 此外,是否存在也捕获动画的数据/文件格式,即“动画模型”格式,以便动画可以在3D编辑器中建模,并在代码中以某种方式调用(例如,可访问动画序列中的帧或用于保存/加载随时间变化相关细节的其他范例

如果您想:

  • 在3D编辑器中为对象建模,例如Blender、Maya等
  • 将模型导出为数据/文件格式
  • 使用OpenGL和C/C++将模型导入到项目中
然后:

  • 您建议导出到哪种文件格式,即简单性、可移植性和兼容性(即通用/流行)
  • 您建议使用哪些图形库将模型导入到OpenGL C/C++项目中(即最好是开源)
  • 此外,是否存在也捕获动画的数据/文件格式,即“动画模型”格式,以便动画可以在3D编辑器中建模,并在代码中以某种方式调用(例如,可访问动画序列中的帧或用于保存/加载随时间变化相关细节的其他范例)
总的来说,我把简单作为首要任务,也就是说,结合我在艺术和计算机科学方面的背景,帮助我起步。我在麻省理工大学主修计算机科学,同时,我在大学选修了平面设计的选修课,并在波士顿艺术学院参加了夏/冬课程,因此,换句话说,我不是一个完全的新手,但同时我也不想让那些疯狂的高级配置让我很难开始一个基本的演示项目;i、 e.作为理解如何弥合这两个世界之间差距的第一步,例如,创建一个具有用户可以交互的3D角色的程序。

(我在结尾用一个“啊”表示),以及(诸如此类)

那么,为什么是科拉达?简单:

  • COLLADA是由Khronos(特别是索尼)制作的开放标准。开放标准格式的美妙之处在于它是一个标准!您可以确信,标准一致性产品的任何输出也会被另一个标准一致性产品正确读取。但遗憾的是,一些3d建模产品在衡量COLLADA的标准一致性方面并没有那么特别。但仍然可以放心:Blender、Maya、3ds Max和所有其他3d建模领域的大牌公司都对该格式有很好的支持
  • COLLADA使用XML。如果你打算创建自己的读者或作者,这会让你变得更简单
  • 附加:我认为COLLADA是唯一一种与特定公司无关的格式。你知道,这对我们来说是件好事
  • 附加2:众所周知,COLLADA的解析速度很慢。没错。但想想看:所有其他非二进制格式(如fbx)也有同样的问题。对于您的需要,COLLADA应该足够了
  • 附加3:COLLADA支持动画
对于导入器库,我强烈推荐ASIMP。为什么?

  • Assimp支持您可以想象的任何流行格式。它有一个针对所有格式的统一接口,因此切换到另一种格式不那么麻烦
  • Assimp是可扩展的。因此,您可以导入专有格式,但仍然不修改代码
  • 附加4:ASIMP是开源的!让我们支持开源软件吧
首先,您可以阅读有关建议的模型加载lbs的内容。Lib非常好,支持多种格式。对于首选格式,我不推荐使用Collada,因为它是基于XML(文本)的格式,解析速度较慢。Obj格式也很普遍,但与Collada存在相同的问题。如果您想编写自己的解析器,它仍然很好,因为它的结构非常简单。但是我建议使用二进制的3Ds。尽管它不支持动画。目前最流行的支持静态网格和动画的格式是FBX。您可以使用FBX SDK我之所以选择FBX,是因为SDK和格式都非常强大。例如,在FBX中,您不仅可以嵌入几何体和动画,还可以嵌入场景对象,如灯光、相机等。Autodesk文档也非常好。
希望有帮助。

我建议使用您自己的自定义格式,基本上只是程序中使用的顶点缓冲区和索引缓冲区的二进制转储。(使用d3d术语,我知道opengl有相同的概念,但不记得它们是否有不同的名称)


然后,我将使用assimp编写一个单独的程序,该程序采用几乎任何格式,并以自定义格式写出文件。然后,您可以使用collada或whatver来存储实际模型,但不具备在运行时加载该格式的复杂性和缓慢性。

+1,这是一个很好的问题。至于“也捕捉动画的数据/文件格式”,它几乎就是为此而设计的。如果你在Windows上,祝你好运;-)好的,我去看看。(通过命令行在Mac OSX上构建)谢谢!:DCollada解析速度慢,特别是对于复杂模型;)@米切利夫绝对正确。但就他的目的而言,COLLADA比他所要求的要多,所以在这种情况下,他也可以使用3Ds和lib3ds。快速简单。科拉达有点老派;)我认为你错了:“非二进制格式(如fbx)”fbx是二进制的!:)@MichaelIV请参见:+1了解FBX建议。我在工作中使用过它,其他游戏工作室也使用过。SDK很好,支持很多东西。你为FBX做了一个很好的案例。我一定会探索FBX SDK和Assimp。另外,谢谢你指出另一个stackoverflow帖子。非常有用。:)如果这样做有实际意义的话,也许这是未来需要探索的问题。以前也曾走过这条路,也就是说,我曾经认为建立自己的图书馆是“一切”的最佳解决方案,但主要是不值得“重新发明wh”