转自:http://blog.csdn.net/fuyajun01/article/details/6853246
1. 使用颜色混合来消除一些锯齿, 主要针对点和线以及不相互重叠的多边形的反锯齿。
反锯齿设置代码如下:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POLYGON_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
取消反锯齿代码如下:
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_POINT_SMOOTH);
glDisable(GL_POLYGON_SMOOTH);
2. 多重采样(Multisample)
并不是所有的平台都支持通过颜色混合来消除多边形锯齿,此外,多边形混合还有顺序的问题,使用起来不方便。OpenGL引入了多重采样来解决多边形锯齿的问题,并增加了一个包含颜色、尝试以及模块缓存值的帧缓存。开启多重采样功能的代码如下:
//申请一个采用了双重缓存,包含颜色,深度的帧缓存和多重采样。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE);
glEnable(GL_MULTISAMPLE);//开启多重缓存
glDisable(GL_MULTISAMPLE);//关闭多重缓存
注: 多重采样和混合不能同时开启, 这两种方法只能互斥使用。即使用任何一个方法前需要禁用另一个方法
补充:
在默认情况下,多重采样计算的覆盖值是独立于alpha值的,但是可以指定特殊模式,是计算片断覆盖值时考虑alpha值因素。
GL_SAMPLE_ALPHA_TO_COVERAGE、GL_SAMPLE_ALPHA_TO_ONE、GL_SAMPLE_COVERAGE。
void glSampleCoverage( GLclampf value, GLboolen invert);//设置参数,用于计算多重采样覆盖值时解释alpha值。