2015-11-14 2 views
1

Я использую z-буфер для рендеринга моей трехмерной треугольной сетки. Однако, когда я представлял модель в виде каркасной сетки, я также видел грани треугольника, которые должны были быть скрыты передним лицом. Таким образом, я использовал заднюю грань выбраковки следующим образом:Обратное обрамление лица для линии Loop

  glEnable(GL_CULL_FACE); 
      glCullFace(GL_BACK); 
      drawWireFrame(); 
      glDisable(GL_CULL_FACE); 

Функция drawWireFrame выглядит следующим образом:

void drawWireFrame() 
{ 
    int i, j; 
    glColor3d(1., 0., 0.); 

    HE_edge *curr; 

    for (int i = 0; i < he_f_count; i++) 
    { 
     glBegin(GL_LINE_LOOP); 
     curr = m_HE_face[i].edge; 
     glNormal3f(curr->prev->vert->vnx, curr->prev->vert->vny, curr->prev->vert->vnz); 
     glVertex3f(curr->prev->vert->x, curr->prev->vert->y, curr->prev->vert->z); 
     glNormal3f(curr->vert->vnx, curr->vert->vny, curr->vert->vnz); 
     glVertex3f(curr->vert->x, curr->vert->y, curr->vert->z); 
     glNormal3f(curr->next->vert->vnx, curr->next->vert->vny, curr->next->vert->vnz); 
     glVertex3f(curr->next->vert->x, curr->next->vert->y, curr->next->vert->z); 
     glEnd(); 
    } 

} 

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

спасибо.

ответ

1

Линии не имеют передней и задней сторон - линии не имеют лиц вообще. Обратное отбрасывание работает только на примитивных типах, которые определяют грани, а именно треугольники (и примитивы на основе трайлинга, такие как полосы и вентиляторы), а также для устаревших GL, а также основанные на четырех основах и многоугольники.

Если вы хотите каркасные рисунки таких примитивов, вы можете напрямую нарисовать их как треугольники (или другие типы) и установить glPolygonMode(GL_FRONT_AND_BACK, GL_LINE), чтобы получить визуализацию каркаса. В этом случае отбраковка задней поверхности будет иметь желаемый эффект. Также обратите внимание, что настройки glPolygonMode достаточно, поэтому вам не нужны разные методы рисования для каркаса и сплошной визуализации.

+0

Спасибо за такой быстрый ответ! glPolygonMode() полностью решила мою проблему! Хотя, я все еще должен был разрешить прямое отбрасывание лица явно для отбраковки, чтобы работать. Я узнал что-то новое. Еще раз спасибо :) – wateva

+0

Ну, вы, конечно, должны включить 'GL_CULL_FACE' для удаления лица, чтобы работать ... :) – derhass

+0

@wateva: Кстати, вы могли бы отметить ответ как« принятый ». Вот как этот сайт [должен работать] (http://stackoverflow.com/tour) ... – derhass