我正在为我的引擎开发一个OBJ解析器,并且模型显示错误。
以下是代码:
//Variables
vector<float> pVertexData;
vector<float> pNormalData;
vector<float> pTexCoordData;
LoadModel函数
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)
我试着和Suzanne一起看起来很乱。 我尝试使用立方体,顶点也是错误的!
我错过了什么?