C++ OBJ模型解析器不';OpenGL不能正常工作

C++ OBJ模型解析器不';OpenGL不能正常工作,c++,opengl,.obj,C++,Opengl,.obj,我正在为我的引擎开发一个OBJ解析器,模型显示错误 代码如下: //Variables vector<float> pVertexData; vector<float> pNormalData; vector<float> pTexCoordData; 我试着和苏珊娜在一起,结果看起来很乱。 我试过用立方体,但顶点也错了 我遗漏了什么?f记录中的索引是以1为基础的,因此在使用它们为以0为基础的向量编制索引时,必须减去1。此外,您还部分使用了3个组件作为纹理坐

我正在为我的引擎开发一个OBJ解析器,模型显示错误

代码如下:

//Variables
vector<float> pVertexData;
vector<float> pNormalData;
vector<float> pTexCoordData;
我试着和苏珊娜在一起,结果看起来很乱。 我试过用立方体,但顶点也错了


我遗漏了什么?

f记录中的索引是以1为基础的,因此在使用它们为以0为基础的向量编制索引时,必须减去1。此外,您还部分使用了3个组件作为纹理坐标,尽管它们的类型为
vec2
。谢谢!
string line;
ifstream objFile(filename);
if (objFile.is_open())
{
    vector<vec3> vertices;
    vector<vec3> normals;
    vector<vec2> texcoords;


    while (!objFile.eof())                                          
    {
        getline(objFile, line);                                         

        //Vertex--------------------------------------------------------------
        if (line.c_str()[0] == 'v' && line.c_str()[1] == ' ')                                       
        {
            line[0] = ' ';                                              

            float x, y, z;

            x = 0;
            y = 0;
            z = 0;

            sscanf_s(line.c_str(), "%f %f %f",                          
                &x,
                &y,
                &z);

            vertices.push_back(vec3(x, y, z));
        }

        //Texture Coord--------------------------------------------------------
        if (line.c_str()[0] == 'v' && line.c_str()[1] == 't')                                       
        {
            line[0] = ' ';                                              
            line[1] = ' ';                                              

            float s, t;

            s = 0;
            t = 0;

            sscanf_s(line.c_str(), "%f %f",
                &s,
                &t);

            texcoords.push_back(vec2(s, t));

        }
        //Normal---------------------------------------------------------------
        if (line.c_str()[0] == 'v' && line.c_str()[1] == 'n')                                       
        {
            line[0] = ' ';                                              
            line[1] = ' ';                                              

            float x, y, z;

            x = 0;
            y = 0;
            z = 0;

            sscanf_s(line.c_str(), "%f %f %f",
                &x,
                &y,
                &z);

            normals.push_back(vec3(x, y, z));
        }
        //Triangle-----------------------------------------------------------
        if (line.c_str()[0] == 'f')                                 
        {
            line[0] = ' ';

            int vIndices[3];
            int tIndices[3];
            int nIndices[3];

            sscanf_s(line.c_str(), "%i/%i/%i %i/%i/%i %i/%i/%i",
                &vIndices[0],
                &tIndices[0],
                &nIndices[0],

                &vIndices[1],
                &tIndices[1],
                &nIndices[1],

                &vIndices[2],
                &tIndices[2],
                &nIndices[2]
                );

            pVertexData.push_back(vertices[vIndices[0]][0]);
            pVertexData.push_back(vertices[vIndices[0]][1]);
            pVertexData.push_back(vertices[vIndices[0]][2]);

            pTexCoordData.push_back(texcoords[tIndices[0]][0]);
            pTexCoordData.push_back(texcoords[tIndices[0]][1]);
            pTexCoordData.push_back(texcoords[tIndices[0]][2]);

            pNormalData.push_back(normals[nIndices[0]][0]);
            pNormalData.push_back(normals[nIndices[0]][1]);
            pNormalData.push_back(normals[nIndices[0]][2]);


            pVertexData.push_back(vertices[vIndices[1]][0]);
            pVertexData.push_back(vertices[vIndices[1]][1]);
            pVertexData.push_back(vertices[vIndices[1]][2]);

            pTexCoordData.push_back(texcoords[tIndices[1]][0]);
            pTexCoordData.push_back(texcoords[tIndices[1]][1]);
            pTexCoordData.push_back(texcoords[tIndices[1]][2]);

            pNormalData.push_back(normals[nIndices[1]][0]);
            pNormalData.push_back(normals[nIndices[1]][1]);
            pNormalData.push_back(normals[nIndices[1]][2]);


            pVertexData.push_back(vertices[vIndices[2]][0]);
            pVertexData.push_back(vertices[vIndices[2]][1]);
            pVertexData.push_back(vertices[vIndices[2]][2]);

            pTexCoordData.push_back(texcoords[tIndices[2]][0]);
            pTexCoordData.push_back(texcoords[tIndices[2]][1]);
            pTexCoordData.push_back(texcoords[tIndices[2]][2]);

            pNormalData.push_back(normals[nIndices[2]][0]);
            pNormalData.push_back(normals[nIndices[2]][1]);
            pNormalData.push_back(normals[nIndices[2]][2]);
        }
    }
    objFile.close();                

    vBuff->SetData<float>(&pVertexData[0], 0, pVertexData.size());
    vBuff->SetData<float>(&pNormalData[0], 1, pNormalData.size());
    vBuff->SetData<float>(&pTexCoordData[0], 2, pTexCoordData.size());

    vBuff->CreateVertexArrayObject();
}
else
{
    cout << "Unable to open file";
}

return 0;
vBuff->SetData - a command I use for my custom buffer object to put in all data. Translates to:

glBindBuffer(GL_ARRAY_BUFFER, bufferID-second argumet)
glBufferData(GL_ARRAY_BUFFER, data-1st argument)