【问题标题】:Back Face Culling for Line Loop线环的背面剔除
【发布时间】:2015-11-14 16:28:20
【问题描述】:

我正在使用 z-buffer 来渲染我的 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();
    }

}

但是,我仍然得到与添加背面剔除之前相同的结果。你能帮我找出我在这里遗漏了什么吗?

谢谢。

【问题讨论】:

    标签: c++ opengl culling


    【解决方案1】:

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

    如果你想要这样的图元的线框图,你可以直接把它们画成三角形(或其他类型)并设置glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)以获得线框可视化。在这种情况下,背面剔除将产生所需的效果。还要注意设置glPolygonMode就足够了,所以线框和实体渲染不需要不同的绘制方法。

    【讨论】:

    • 非常感谢您的快速回复! glPolygonMode() 完全解决了我的问题!虽然,我仍然必须明确启用背面剔除才能进行剔除。我学到了一些新东西。再次感谢:)
    • 好吧,你当然必须启用GL_CULL_FACE 才能进行面部剔除... :)
    • @wateva:顺便说一句,您可以将答案标记为“已接受”。这就是这个网站的样子supposed to work...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多