2012-04-11 2 views
0

Я пытаюсь написать obj viewer с openGl. Эта программа должна рисовать только линии линий модели, поэтому мне нужно загрузить:Рисование модели из файла obj

  • вершины: иногда в 3D, а иногда и в 4D;
  • лица: индексные списки со случайными длинами;

Теперь я загрузить только OBJ файл, с 3 элемента в лицо, так что я могу сделать элемент в режиме GL_TRIANGLE, но я получаю Somes проблемы с некоторыми моделями:

http://people.sc.fsu.edu/~jburkardt/data/obj/icosahedron.obj

в фаза загрузки кажется работает хорошо, я думаю, что проблема в функции визуализации():

static void render(void) 
{ 
    glClearColor(0.0f, 0.0f, 0.0, 0.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glBindBuffer(GL_ARRAY_BUFFER, g_resources.vertex_buffer); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(
     3,        /* size */ 
     GL_FLOAT,       /* type */ 
     3*sizeof(GLfloat),    /* stride */ 
     (void*)0       /* array buffer offset */ 
    ); 

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_resources.element_buffer); 

    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
    glEnable(GL_CULL_FACE); 
    glCullFace(GL_BACK); 

    glDrawElements(
     GL_TRIANGLES,   /* mode */ 
     theModel->face.size(), /* count */ 
     GL_UNSIGNED_INT,  /* type */ 
     (void*)0    /* element array buffer offset */ 
    ); 

    glDisableClientState(GL_VERTEX_ARRAY); 

    glutSwapBuffers(); 
} 

Я также некоторые вопросы:

  • Осечки начинаются с 1 или 0?
  • Что такое перечисление индексов? Это по часовой стрелке?
  • Является ли это хорошим решением для триангуляции лиц с более чем 3-мя галочками?

ответ

1

если вы получаете выпускать только с некоторые модели, попробуйте отключить GL_CULL_FACE, чтобы увидеть разницу возможное быть вещественной вещью.

Индексы в OBJ основаны на 1, GL основаны на 0, поэтому вам нужно -1 при создании буфера.

5
  • Индексы 1 на основе
  • против часовой
  • Да
+2

+1 Короткие, но сладкие. :) – Bart

Смежные вопросы