Рисование файла OBJ с помощью openGLC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Рисование файла OBJ с помощью openGL

Сообщение Anonymous »

У меня возникла проблема с отображением всех моих объектов с помощью openGL. У меня есть 5 разных obj-файлов: куб, чайник, лампа, мужчина и машина. Куб, лампа и человек рисуются нормально, однако чайник и машина отображаются неправильно.

У меня есть метод, который читает файл obj, и я распечатал его. чтобы дважды проверить, соответствуют ли выходные данные файлу obj и все ли они верны.

Вот мой код для draw(), и я думаю, что проблема здесь < /p>

Код: Выделить всё

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;
};
Я не уверен, что я делаю неправильно или делаю ли я что-то не так с представленным кодом. Однако именно здесь я «чувствую», что находится ошибка. .

ОБЪЯСНЕНИЕ:

Вершина *v — указатель вершины
VectorNormal *vn — нормаль векторный указатель
Грани *f — грани указатель

в методе draw() он проходит через указатель структуры f и проверяет тип, если это цветовой тип, он добавляет glMaterialfv(..,. .,..); Если это не так, то он захватывает значение индекса граней и передает его через указатель структуры Vertex и указатель структуры Vector Normal.

Вот мой чайник
Изображение
Вот как должен выглядеть чайник
Изображение


Подробнее здесь: https://stackoverflow.com/questions/200 ... ith-opengl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»