Отбраковка спины для линии Loop

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

            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 достаточно, поэтому вам не нужны разные методы рисования для каркасной и сплошной визуализации.

1

Другие решения

Других решений пока нет …