OpenGL:三维模型,模型网格点与面片同时显示,模型网格轮廓线与面片同时显示

您所在的位置:网站首页 3dmax单个物体显示线框颜色不一致怎么办 OpenGL:三维模型,模型网格点与面片同时显示,模型网格轮廓线与面片同时显示

OpenGL:三维模型,模型网格点与面片同时显示,模型网格轮廓线与面片同时显示

2024-07-10 17:59| 来源: 网络整理| 查看: 265

1 OpenGL多边形偏移函数glPolygonOffset(GLfloat factor,GLfloat units)

如果我们想显示一个三维模型的边缘,我们可能会采用GL_FILL先绘制一遍三维模型,然后在用GL_LINE用不同的颜色再绘制一遍,但是在这种情况下,我们所绘制的边缘线与面片叠在一起,时有时无,会产生非常不好的视觉效果。 OpenGL采用了glPolygonOffset(GLfloat factor,GLfloat units)函数来解决这个问题,该函数有两个参数,如果我们启用了多边形偏移,那么在执行深度测试之前,每个片段的深度值都会加上通过这两个参数所计算的一个偏移量,这个偏移量按以下公式计算

o f f s e t = m ∗ f a c t o r + r ∗ u n i t s offset = m*factor+r*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);//关闭多边形偏移

这里写图片描述

备忘,备忘,备忘。

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com/,更多博文干货等着您。

这里写图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3