Изрязване на задното лице за линия

Използвам z-буфер, за да изобразя моята 3D триъгълна мрежа. Въпреки това, когато изобразих модела като мрежа с телена рамка, видях и триъгълните лица, които трябваше да бъдат скрити от предната страна. И така, използвах изрязването на задната страна, както следва:

            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)


Линиите нямат предна и задна страна - линиите изобщо нямат лица. Отстраняването на задните повърхности работи само върху примитивни типове, които дефинират лица, а именно триъгълници (и примитиви с основа на триъгълник, като ленти и ветрила), а за отхвърления 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