一些面孔的颜色不同

时间:2014-05-13 12:06:42

标签: c++ opengl 3d

我正在尝试使用OpenGL渲染网格,然后以不同的颜色渲染其边界面。我是从DirectX来的,所以我不太了解我在做什么,但到目前为止,它有点令人沮丧。

以下是我的代码,它似乎根本不渲染边框。我也试过禁用照明和其他一些没有效果的东西。

void RendererWidget::drawModel()
{
    glEnable(GL_LIGHTING);
    glShadeModel(GL_SMOOTH);

    drawMeshFaceted(m_model->getMesh());

    drawMeshBorder(m_model->getMesh());
}

void RendererWidget::drawMeshFaceted(const MyMesh *m)
{
    MyMesh::ConstFaceIter fIt(m->faces_begin());
    MyMesh::ConstFaceIter fEnd(m->faces_end());
    MyMesh::ConstFaceVertexIter fvIt;

    glBegin(GL_TRIANGLES);
    for (; fIt != fEnd; ++fIt)
    {
        glNormal3fv( &m->normal(*fIt)[0]);

        fvIt = m->cfv_iter(*fIt);
        glVertex3fv( &m->point(*fvIt)[0] );
        ++fvIt;
        glVertex3fv( &m->point(*fvIt)[0] );
        ++fvIt;
        glVertex3fv( &m->point(*fvIt)[0] );
    }
    glEnd();
}

void RendererWidget::drawMeshBorder(const MyMesh *m)
{
    MyMesh::ConstFaceIter fIt(m->faces_begin());
    MyMesh::ConstFaceIter fEnd(m->faces_end());
    MyMesh::ConstFaceVertexIter fvIt;

    glEnable(GL_COLOR_MATERIAL);

    glColor3f(1.0, 0.0, 0.0);

    glBegin(GL_TRIANGLES);
    for (; fIt != fEnd; ++fIt)
    {
        if (m->is_boundary(*fIt))
        {
            glNormal3fv( &m->normal(*fIt)[0]);

            fvIt = m->cfv_iter(*fIt);
            glVertex3fv( &m->point(*fvIt)[0] );
            ++fvIt;
            glVertex3fv( &m->point(*fvIt)[0] );
            ++fvIt;
            glVertex3fv( &m->point(*fvIt)[0] );
        }
    }
    glEnd();

    glDisable(GL_COLOR_MATERIAL);
}

如果我单独调用上述任何一种方法,它们就可以正常工作。我认为这很简单,我很遗憾。

0 个答案:

没有答案