使用c ++和opengl加载.obj文件[关闭]

Posted

技术标签:

【中文标题】使用c ++和opengl加载.obj文件[关闭]【英文标题】:Loading .obj file using c++ and opengl [closed] 【发布时间】:2014-04-27 04:43:25 【问题描述】:

如何解析.obj文件并在opengl中加载它。我从Blendswap.com下载了.obj

【问题讨论】:

***.com/questions/15542139/… 的近似副本。你尝试了什么?你走了多远?您有需要帮助的具体问题吗? 【参考方案1】:

实际上,如果您在 Google 中搜索,则有很多解决方案。下面是一个简单的解决方案。

首先定义一个包含人脸和顶点信息的模型:

class obj3dmodel

   struct vertex
        double x;
        double y;
        double z;
   ;
   struct face
         unsigned int v1,v2,v3;
   ;
   std::vector<vertex> vetexes;
   std::vector<face> faces;

public:
  void readfile(const char* filename);
  void draw();
;

然后在readfile()中读取文件:

void obj3dmodel::readfile(const char *filename) 

   string s;
   ifstream fin(filename);
   if(!fin)
         return;
   while(fin>>s)
   
         switch(*s.c_str())
         
         case 'v':
              
                    vertex v;
                    fin>>v.x>>v.y>>v.z;
                    this->vetexes.push_back(v);
              
              break;            
         case 'f':
              
                    face f;
                    fin>>f.v1>>f.v2>>f.v3;
                    faces.push_back(f);
              
              break;
        
        

现在你可以使用顶点和面信息来做draw():

void obj3dmodel::draw()

   glBegin(GL_TRIANGLES);
   for(int i=0;i<faces.size();i++)
                            
      vertex v1= vetexes[faces[i].v1-1];
      vertex v2=vetexes[faces[i].v2-1];
      vertex v3=vetexes[faces[i].v3-1];

      glVertex3f(v1.x,v1.y,v1.z);
      glVertex3f(v2.x,v2.y,v2.z);
      glVertex3f(v3.x,v3.y,v3.z);
   
   glEnd(GL_TRIANGLES);
 

【讨论】:

仅适用于三角形:-(

以上是关于使用c ++和opengl加载.obj文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

导出对象渲染opengl

从服务器加载文件[关闭]

为什么我的2D OpenGL纹理无法正确加载? [关闭]

如何使用OpenGL知道所有顶点的当前坐标

如何在 SceneKit 中使用 OBJ 文件或 CTM 文件而不是 DAE 文件?

如何在 c# wpf 中一次加载/保存多个文件? [关闭]