У меня возникла проблема с отображением всех моих объектов с помощью openGL. У меня есть 5 разных файлов obj: куб, чайник, лампа, мужчина и автомобиль. Куб, лампа и человек рисуют точно, однако чайник и автомобиль не отображаются правильно.Рисунок OBJ-файла с openGL
У меня есть метод, который читается в файле obj, и я сделал распечатки, чтобы проверить, соответствует ли результат файлу obj, и все они правильные.
Вот мой код для розыгрыша() и я думаю, что этот вопрос находится здесь
glBegin(GL_TRIANGLES);
for(int i = 0; i < f_count; i++){
if(f[i].type == 'c'){
GLfloat * color = new GLfloat[4];
color[0] = f[i].x;
color[1] = f[i].y;
color[2] = f[i].z;
color[3] = 1;
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
}
else{
glVertex3f(vn[(f[i].vn1-1)].x, vn[(f[i].vn1-1)].y, vn[(f[i].vn1-1)].z); // normals
glVertex3f(vn[(f[i].vn2-1)].x, vn[(f[i].vn2-1)].y, vn[(f[i].vn2-1)].z); // normals
glVertex3f(vn[(f[i].vn3-1)].x, vn[(f[i].vn3-1)].y, vn[(f[i].vn3-1)].z); // normals
glVertex3f(v[(f[i].v1-1)].x, v[(f[i].v1-1)].y, v[(f[i].v1-1)].z);
glVertex3f(v[(f[i].v2-1)].x, v[(f[i].v2-1)].y, v[(f[i].v2-1)].z);
glVertex3f(v[(f[i].v3-1)].x, v[(f[i].v3-1)].y, v[(f[i].v3-1)].z);
}
}
glEnd();
первые 3 являются нормали, а другой 3 являются вершинами Вот мой файл заголовок с моим Структуры
struct NormalVector
{
GLfloat x, y, z;
};
struct Vertex
{
GLfloat x, y, z, w;
};
struct Faces
{
int v1,v2,v3, vn1,vn2,vn3;
char type;
GLfloat x,y,z;
};
Я не уверен, что я делаю неправильно или если я делаю что-то неправильно с кодом я представил .. однако это где я «чувствую» ошибка находится.
ОБЪЯСНЕНИЕ:
Vertex * v это указатель вершины VectorNormal * VN нормального вектора указатель Лица * Р лицо указателя
в методе дро(), то петли через F struct pointer и проверяет тип, если он имеет тип цвета, он добавляет glMaterialfv (.., .., ..); Если это не так, то он захватывает индексное значение граней и передает его через указатель на структуру Вершины и указатель векторной структуры Vector Normal.
Вот мой чайник Вот чайник его предположит выглядеть
Есть ли что-нибудь еще, что по-другому о кубе, лампы и человека против чайника и автомобиля? Все объекты загружены из .obj-файлов, и все они должны быть нарисованы с помощью освещения? – svk
почему это было downvoted? – DWolf
Я знаю, что современный OpenGL имеет очень крутую кривую обучения, но немедленный режим (glVertex и т. П.) Устарел с OpenGL 3. – Marius