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

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=mfactor+runits

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/,更多博文干货等着您。

这里写图片描述

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值