【发布时间】:2014-04-27 04:43:25
【问题描述】:
如何解析.obj文件并在opengl中加载它。我从Blendswap.com下载了.obj
【问题讨论】:
-
stackoverflow.com/questions/15542139/… 的近似副本。你尝试了什么?你走了多远?您有需要帮助的具体问题吗?
如何解析.obj文件并在opengl中加载它。我从Blendswap.com下载了.obj
【问题讨论】:
实际上,如果您在 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);
}
【讨论】: