码迷,mamicode.com
首页 > 其他好文 > 详细

OpenGL中的抗锯齿技术

时间:2014-10-30 22:40:08      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:opengl   抗锯齿   反走样   

       计算机通过离散(不连续)的像素来绘制图形,想象一下,真实世界中,我们画直线,是比连续画的,还是一个点一个点画的?计算机就是一个点一个点画的(很小的矩形).这样就会导致绘制的图形走样(锯齿),消除锯齿的技术就叫反走样(抗锯齿)

可以看这篇:http://blog.csdn.net/mikewolf2009/archive/2009/08/18/4460421.aspx

点示例

当点很大时,显示如下

bubuko.com,布布扣

而我们实际想看到的是一个圆点,而不是矩形

启用抗锯齿后的效果

bubuko.com,布布扣

有点圆了bubuko.com,布布扣

代码

glPointSize(10);
glEnable (GL_POINT_SMOOTH);
glHint (GL_POINT_SMOOTH, GL_NICEST);

启用抗锯齿

还是以glEnable来启用抗锯齿,可以根据不同图形进行处理

  1. GL_POINT_SMOOTH 点
  2. GL_LINE_SMOOTH 线
  3. GL_POLYGON_SMOOTH 多边形

抗锯齿质量

当然效果越好,那么计算机速度就越慢,即有一个参数设置

glHint用于对点,线,多边形的抗锯齿程度进行设置

  1. GL_DONT_CARE 放弃,应该是系统默认吧
  2. GL_FASTEST 速度优先
  3. GL_NICEST 图形显示质量优先

线示例

未启用

bubuko.com,布布扣

启用后

bubuko.com,布布扣

很明显,启用抗锯齿后,粗线变成了矩形,而未启动则是一个平行四边形

代码

glEnable (GL_LINE_SMOOTH);
glHint (GL_LINE_SMOOTH, GL_NICEST);
glLineWidth (10);

多重采样

其根据像素样本数量具有多种颜色,深度和多组纹理坐标来处理,特别适合多边形

三个步骤

1. Obtain a window that supports multisampling. With GLUT, you can ask for one by calling 
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | 
GLUT_MULTISAMPLE); 
2. After you’ve opened a window, you will need to verify that multisampling 
is available. For instance, GLUT may give you a window 
with “almost” what you have asked for. If querying the state variable 
GL_SAMPLE_BUFFERS returns a value of one and GL_SAMPLES returns 
a value greater than one, then you’ll be able to use multisampling. 
(GL_SAMPLES returns the number of subpixel samples. If there is only 
one sample, multisampling is effectively disabled.) 
GLint bufs, samples; 
glGetIntegerv(GL_SAMPLE_BUFFERS, &bufs); 
glGetIntegerv(GL_SAMPLES, &samples); 
3. To turn on multisampling, call 
glEnable(GL_MULTISAMPLE);

 

如下两图的比较

bubuko.com,布布扣

bubuko.com,布布扣

OpenGL中的抗锯齿技术

标签:opengl   抗锯齿   反走样   

原文地址:http://blog.csdn.net/u013467442/article/details/40627717

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!