我正在尝试使用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);
}
如果我单独调用上述任何一种方法,它们就可以正常工作。我认为这很简单,我很遗憾。