Я экспортировал файл .obj, и я проанализировал информацию внутри в векторы вершин, uvs и нормалей (C++). Как я рисую эти данные в OpenGL. Обратите внимание, что я запускаю старую версию OpenGL, и я вынужден использовать полосы треугольников и квадранты. Код ниже показывает, что я до сих пор.Рисунок в OpenGL с использованием треугольных полосок или четырехполосных полос
OpenGLObject::OpenGLObject(std::string& fileName) {
std::ifstream inFile(fileName.c_str());
if (!inFile.is_open()) {
std::string err = "[Error] Unable to open file " + fileName + ".";
throw(err);
}
std::vector<unsigned int> vertexIndices, uvIndices, normalIndices;
std::vector<glm::vec3> vertices;
std::vector<glm::vec2> uvs;
std::vector<glm::vec3> normals;
// Reading file contents
while (inFile.good()) {
std::string token;
inFile >> token;
// Parsing verticies
if (token == "v") {
glm::vec3 tempVect;
inFile >> tempVect.x;
inFile >> tempVect.y;
inFile >> tempVect.z;
vertices.push_back(tempVect);
}
// Parsing uvs
else if (token == "vt") {
glm::vec2 tempUv;
inFile >> tempUv.x;
inFile >> tempUv.y;
uvs.push_back(tempUv);
}
// Parsing normals
else if (token == "vn") {
glm::vec3 tempNormal;
inFile >> tempNormal.x;
inFile >> tempNormal.y;
inFile >> tempNormal.z;
normals.push_back(tempNormal);
}
// Parsing faces (Note: not robust for all .obj files)
else if (token == "f") {
unsigned int vertexIndex[4], uvIndex[4], normalIndex[4];
for (unsigned int i = 0; i < 4; ++i) {
inFile >> vertexIndex[i];
vertexIndices.push_back(vertexIndex[i]);
inFile.ignore(1, '/');
inFile >> uvIndex[i];
uvIndices.push_back(uvIndex[i]);
inFile.ignore(1, '/');
inFile >> normalIndex[i];
normalIndices.push_back(normalIndex[i]);
}
}
}
inFile.close();
for (unsigned int i = 0; i < vertexIndices.size(); ++i) {
unsigned int vertexIndex = vertexIndices[i];
glm::vec3 vertex = vertices[vertexIndex - 1];
vertices_.push_back(vertex);
}
for (unsigned int i = 0; i < uvIndices.size(); ++i) {
unsigned int uvIndex = uvIndices[i];
glm::vec2 uv = uvs[uvIndex - 1];
uvs_.push_back(uv);
}
for (unsigned int i = 0; i < normalIndices.size(); ++i) {
unsigned int normalIndex = normalIndices[i];
glm::vec3 normal = normals[normalIndex - 1];
normals_.push_back(normal);
}
}
В чем проблема? – Andreas