Отбор задней грани для петли лески

Я использую 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();
    }

}

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

Спасибо.


person wateva    schedule 14.11.2015    source источник


Ответы (1)


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

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

person derhass    schedule 14.11.2015
comment
Большое спасибо за такой быстрый ответ! glPolygonMode () полностью решил мою проблему! Хотя мне все равно пришлось явно включить отбраковку задней грани, чтобы она работала. Я узнал кое-что новое. Еще раз спасибо :) - person wateva; 14.11.2015
comment
Ну, вы, конечно, должны включить GL_CULL_FACE, чтобы отбраковка лиц работала ... :) - person derhass; 14.11.2015
comment
@wateva: кстати, вы можете отметить ответ как принятый. Вот как этот сайт должен работать ... - person derhass; 14.11.2015