[opengl]opengl加载maya的obj模型并显示

obj文件的理解请参考:http://foolog.net/?p=941

 

要注意一点,obj文件中面的保存,有的是按照三角形(也就是只有三个点),有的是按照空间四边形保存(包含四个点),这里是按照四个点来的,注释中已经给出。

 

#ifndef GLUT_DISABLE_ATEXIT_HACK
#define GLUT_DISABLE_ATEXIT_HACK
#endif #define GLEW_STATIC
#include 
#include 
#include 
#include 
#include 
#include  //for matrices
#include 
//undefine if u want to use the default bending constraint of pbd
#include
#include 
#include
using namespace std;

GLfloat rtx = 0.0f, rty = 0.0f, rtz = 0.0;
GLfloat step = 0.1;
//float exp1 = 1e-3;
const int GRID_SIZE = 10;
GLint viewport[4];
GLdouble PP[16];

int v_num; //记录点的数量
int vn_num;//记录法线的数量
int vt_num;//
int f_num; //记录面的数量
GLfloat **vArr; //存放点的二维数组
GLfloat **vnArr;//存放法线的二维数组
int **fvArr; //存放面顶点的二维数组
int **fnArr; //存放面法线的二维数组

int readfile(string addrstr) //将文件内容读到数组中去
{
    int i;
    string s1;
    float f2,f3,f4;
    vArr=new GLfloat*[v_num];
    for (i=0; i>s1>>f2>>f3>>f4;
                vnArr[ii][0]=f2;
                vnArr[ii][1]=f3;
                vnArr[ii][2]=f4;
                ii++;
            }
            else if(sline[1] == 't'){}
            else//v
            {
                istringstream sin(sline);
                sin>>s1>>f2>>f3>>f4;
                vArr[jj][0]=f2;
                vArr[jj][1]=f3;
                vArr[jj][2]=f4;
                jj++;
            }
        }
        if (sline[0]=='f') //读取面
        {
            istringstream in(sline);
            GLfloat a;

            in>>s1;//去掉前缀f
            int i,k;
//点数改这里
            for(i=0; i<4; i++)
            {
                in>>s1;
//                cout<

 

你可能感兴趣的:(opengl)