OBJ Model Parser не работает правильно OpenGL

Я работаю над парсером 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)

Я пытался с Сюзанной, и это выглядело очень грязно.
Я пробовал с кубом и вершины тоже не правы!

Что мне не хватает?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector