如何在CGAL中使用.obj文件

时间:2015-07-19 21:28:12

标签: c++ opengl cgal

我正在尝试使用openGL,SDL和CGAL构建一个简单的第一人称射击游戏。我希望能够将我在blender中创建的纹理对象加载到游戏中并使用CGAL对对象/纹理执行计算(例如细分)但我无法弄清楚如何将.obj文件转换为CGAL我可以使用的容器。

只需使用openGL和过剩我就可以将.obj文件加载到游戏中,并使用矢量为obj的每个坐标及其相应的纹理将纹理映射到对象。

使用CGAL我可以使用我在此处找到的代码将.obj文件中的对象加载到Polyhedron网格中:http://jamesgregson.blogspot.ca/2012/05/example-code-for-building.html

在CGAL中使用.obj文件的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您需要扩展CGAL的顶点类,以便能够在其中存储纹理坐标。在CGAL中有一个ParameterizationMesh类,可以或多或少地执行所需的操作:

http://doc.cgal.org/latest/Surface_mesh_parameterization/classParameterizationMesh__3.html

然后你有两个选择:(1)如果符合你的需要,直接使用ParameterizationMesh;或者(2)看看ParameterizationMesh是如何工作的,并扩展CGAL Polyhedron的顶点并做类似的事情。

答案 1 :(得分:1)

我不熟悉CGAL,但我曾使用* .obj文件几次。这将是一项乏味的任务,但你需要一些东西来实现你的目标。

  • 一个文件解析器,用于解析所有元素的* .obj文件:顶点数据,索引数据,纹理坐标,材质数据等,您需要在引擎中使用。
  • 自定义用户定义的结构,包含适当的构造函数以包含这些元素。
  • 您将需要一个独立的函数或一个ManagerClass对象,它允许您使用用户定义的结构向量将它们转换为CGAL库 - API期望的结构对象。

似乎你的工作完成了1/2,因为你可以读入并将模型数据从blender加载到你的GameEngine并正确渲染模型。您可能必须修改用户定义的结构,函数或类对象才能使用CGAL。

测试文件加载器/解析器是否正常工作的一种好方法是将数据结构记录为文本文件格式以便于阅读。这样,当您阅读文本文件时,您可以测试您是否获得了正确的数据。

为了将其合并到CGAL中进行数据处理,您需要知道库 - api和要使用的函数调用,它们期望的数据类型,以及调用方法的时间或顺序。

这不是您当前问题的明确或直接答案,但应作为有用的指导。