将转换后的.obj文件更改为OpenGL基元

时间:2011-12-06 08:14:16

标签: c++ opengl .obj

我在Blender中创建了一个房子并将其导出为.obj文件。然后我使用3DWin将其转换为scene.cpp。我很困惑如何将这些数据导入我的代码来渲染房子。

我现在有一个网格数组,其坐标如下所示

static float mesh01_coords[] = {
50, 0.1, 50,
-50, 0.1, 50,
-50, 0.1, -50,
50, 0.1, -50,
...

我是否只是遍历每个数组索引,在每个点设置一个顶点? 如:

glVertex3f(50, 0.1, 50);
glVertex3f(-50, 0.1, 50);
glVertex3f(-50, 0.1, -50);
glVertex3f(50, 0.1, -50);

2 个答案:

答案 0 :(得分:5)

  

然后我使用3DWin将其转换为scene.cpp

这样做没有意义。它只会使您的可执行文件膨胀,如果您对模型进行任何更改,则必须重新编译您的程序。

直接阅读OBJ文件。为它编写解析器非常简单http://www.royriggs.com/obj.html

  

我很困惑如何将这些数据导入我的代码以渲染房子。

您的模型由一个索引的顶点列表和一个面列表组成,其中每个面都是顶点列表中的索引元组。您可以相当懒惰,将顶点列表加载到顶点数组中,然后将索引列表提供给 glDrawElements ,然后根据面部列表绘制顶点。

答案 1 :(得分:2)

首先 - OBJ specification。现在,您可以自己实现它,也可以使用可以为您提供此功能的库。

DirectX SDK中有一个名为MeshFromOBJ的示例;它是基于C ++的,据我记得提供了良好的学习体验。基本上你需要做的就是将Direct3D调用(没有那么多)转换成OpenGL调用。 gamedev.net上还有一个可能有帮助的帖子。

或者,找到一个可以为您完成的库。试试谷歌吧。我发现的一个结果是GLM