OpenGL:三维模型,模型网格点与面片同时显示,模型网格轮廓线与面片同时显示
2017-12-27 16:27
351 查看
1、 OpenGL多边形偏移函数glPolygonOffset(GLfloat factor,GLfloat units)
如果我们想显示一个三维模型的边缘,我们可能会采用GL_FILL先绘制一遍三维模型,然后在用GL_LINE用不同的颜色再绘制一遍,但是在这种情况下,我们所绘制的边缘线与面片叠在一起,时有时无,会产生非常不好的视觉效果。OpenGL采用了glPolygonOffset(GLfloat factor,GLfloat units)函数来解决这个问题,该函数有两个参数,如果我们启用了多边形偏移,那么在执行深度测试之前,每个片段的深度值都会加上通过这两个参数所计算的一个偏移量,这个偏移量按以下公式计算
offset=m∗factor+r∗units
m为多边形的最大深度斜率,r为可解析区别的窗口坐标深度值的最小值。
下文,介绍如果将三维模型的边缘线与面片叠加显示以及边缘点与面片叠加显示。
2、边缘线与三维模型面片叠加显示
/*-----先以面片的方式绘制三维网格模型---------------------------------*/ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);//设置绘制模型为绘制前面与背面模型,以填充的方式绘制 glColor3f(ColorRed,ColorGreen,ColorBlue);//设置三维模型绘制颜色 //已经将绘制的命令放在一个显示列表里面了,所以这里之间调用显示列表编号 glCallList(m_DisplayListIndex); //如果没有用到显示列表,则用绘制语句在这里绘制你想要绘制的三维网格模型 //drawsomething();//在这里写你的绘制语句 /*-----后做多边形偏移,以线的方式显示轮廓线---------------------------*/ glColor3f(1.0,0.0,0.0);//设置偏移轮廓线颜色 glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);//将绘制模式改为线 glEnable(GL_POLYGON_OFFSET_LINE);//开启多边形偏移 glPolygonOffset(-1.0, -1.0);//设置偏移量,一般-1,1即可 glCallList(m_DisplayListIndex);//重复绘制你的模型 //如果没有用到显示列表,则用绘制语句在这里绘制你想要绘制的三维网格模型 //drawsomething();//在这里写你的绘制语句 glDisable(GL_POLYGON_OFFSET_LINE);//关闭多边形偏移
3、边缘点与三维模型面片叠加显示
/*-----先以面片的方式绘制三维网格模型---------------------------------*/ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);//设置绘制模型为绘制前面与背面模型,以填充的方式绘制 glColor3f(ColorRed,ColorGreen,ColorBlue);//设置三维模型绘制颜色 //已经将绘制的命令放在一个显示列表里面了,所以这里之间调用显示列表编号 glCallList(m_DisplayListIndex); //如果没有用到显示列表,则用绘制语句在这里绘制你想要绘制的三维网格模型 //drawsomething();//在这里写你的绘制语句 /*-----后做多边形偏移,以点的方式显示轮廓线---------------------------*/ glColor3f(1.0,0.0,0.0);//设置偏移轮廓线颜色 glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);//将绘制模式改为点 glEnable(GL_POLYGON_OFFSET_POINT);//开启多边形偏移 glPolygonOffset(-1.0, -1.0);//设置偏移量,一般-1,1即可 glCallList(m_DisplayListIndex);//重复绘制你的模型 //如果没有用到显示列表,则用绘制语句在这里绘制你想要绘制的三维网格模型 //drawsomething();//在这里写你的绘制语句 glDisable(GL_POLYGON_OFFSET_POINT);//关闭多边形偏移
备忘,备忘,备忘。
相关文章推荐
- VS+OpenGl 显示三维STL模型 代码
- 从分析blender轮廓提取技术中学习opengl如何绘制三维模型轮廓
- python+opengl显示三维模型小程序
- openGL三维网格坐标,旋转,缩放,灯光设置,纹理读取,模型读取(MFC单文档)
- openGL三维网格坐标,旋转,缩放,灯光设置,纹理读取,模型读取(MFC单文档)
- openGL 解析ply文件并且显示三维模型
- Qt环境下利用OpenGL显示三维模型
- 使用OpenGL和OpenCV分别显示三维模型和图像
- Qt环境下利用OpenGL显示三维模型
- 如何通过三维网格自动生成纸制模型
- OpenGL读取显示3ds,flt模型的一般过程(小结)
- 如何能在浏览器中显示三维模型
- 在显示opengl三维场景的屏幕上也就是windows窗体上画线
- OpenGL-学习之路-三维观察 及 三位模型
- VTK:对输入的三维模型在某个方向等间距提取模型的切面轮廓线
- u3d游戏中显示模型的网格
- 双目测距与三维重建的OpenCV实现问题集锦(四)三维重建与OpenGL显示
- Opengl 导入3Dmax制作的.3ds模型 并显示出来
- 读取STL模型 并用opengl显示
- Opengl读取及渲染斯坦福三维ply模型