25.线框模式
在三维软件中线框模式是最基本的显示模式之一,用户在这种简化的视觉表示方式下,可以更清晰地看到模型的结构,便于进行编辑和调整。
一般不会直接采用类似glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
的方式切换为线框模式,那样线会很密很杂,因为以三角面边线的方式绘制,而通常用户不会关心组件细分之后的三角面情况,而更关心组件本身的轮廓信息。
本节课程以仅绘制轮廓线的方式显示模型线框。
void Mesh::DrawWireframe(QOpenGLShaderProgram& shader)
{
shader.setUniformValue("objectColor", 0.f, 0.f, 0.f, 1.f);
m_glFunc->glLineWidth(1.0f);
QOpenGLVertexArrayObject::Binder bind2(&m_VAOEdge);
m_glFunc->glDrawElements(GL_LINES, static_cast<unsigned int>(edges.size()), GL_UNSIGNED_INT, 0);
}
补充
Mesh
中的轮廓线数据来源于原始的几何体Body
,在CGLib
中Body
是采用一种类似BRep
的简化表达,可以拿到组成Body
的Face
的轮廓数据,从而在网格化后保留下来并在转换为Mesh
过程中进行传递。
同样线框模式的标识wireframeMode
被存放在了ViewerSetting
中,我们回顾下,ViewerSetting
的作用是存储Viewer相关设置数据并提供接口。
我们来看下接口调用逻辑,
- 点击按钮调用
GLView.wireFrame
函数,进而调用ViewerSetting.SwitchWireframeMode
切换显示模式; - 在每个渲染循环中
DrawingComponentHolder
会根据显示模式来决定渲染方式,如果是现况模式,则Mesh.Draw
会以仅绘制轮廓线的方式渲染。
如果一切正常,或者遇到的问题被排查解决,切换为线框模式后将有下图类似的效果,有问题或疑问请查看工程代码或联系我。