我正在使用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();
    }

}

但是,在添加背面剔除之前,我仍然得到与以前相同的结果。您能否帮助我确定我在这里想念的是什么。

谢谢。

最佳答案

线没有正面和背面-线根本没有面。背面剔除仅适用于定义面的图元类型,即三角形(以及基于三角形的基元,如 strip 和扇形),对于已弃用的GL,也适用于基于四边形的图元和多边形。

如果要绘制此类图元的线框图,则可以将其直接绘制为三角形(或其他类型),并设置glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)以获得线框可视化。在这种情况下,背面剔除将具有所需的效果。还要注意,设置glPolygonMode就足够了,因此对于线框和实体渲染,您不需要其他绘制方法。

关于c++ - 背面剔除线路环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33710612/

10-10 13:41