OpenGL中的颜色混合功能(二)——抗锯齿的处理

来源:互联网 发布:cdn加速 知乎 编辑:程序博客网 时间:2024/05/19 09:13
OpenGL中的颜色混合功能(二)——抗锯齿的处理
     
       在OpenGL中,混合功能的另一个用途是抗锯齿的处理。在绝大多数情况下,一个渲染片段映射到计算机屏幕上的一个像素。因为这些像素都是正方形的,所以通常我们可以清晰的看到两种不同颜色的分界,它们就是我们通常所说的锯齿。锯齿的出现会让人觉得图像是不自然的,极为影响观感。这种锯齿现象是计算机所产生的图像的弱点,这对于我们的许多要求尽可能逼真的渲染任务,都带来了消极的影响。 

     为了消除图元之间的锯齿状边缘,OpenGL使用混合功能来混合片段的颜色,也就是把像素的目标颜色与周围相邻像素的颜色进行混合。从本质上说,在任何图元的边缘上,像素颜色都会稍微延伸到相邻的像素,以此来达到平滑像素颜色的效果。打开抗锯齿功能十分简单,首先我们必须启用混合功能,并对混合函数进行一些设置:

     // 设置混合因子
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     // 启用混合
     glEnable(GL_BLEND);

     我们还需要确保把混合方程式设置为GL_ADD的模式,这也是默认的设置。在启用混合功能并选择正确的混合方程式后,便可以调用glEnable函数对点、直线或多边形(任何实心图元)进行抗锯齿处理,如下所示:

     // 启用点平滑处理
     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);

     不过,我们在使用GL_POLYGON_SMOOTH时应该注意,我们可能想用它使实心几何图元的边缘变得平滑。但想要实现这个目的,还需要其他一些规则。并且,对实心物体进行抗锯齿处理并不常用,一种被称为多重采用的方式通常是更好的选择。glHint方法允许我们在实现抗锯齿的处理时选择不同的实现方法,GL_FASTEST(速度最快)或者GL_NICEST(效果最佳),我们使用了效果最佳的方式。在我们的示例程序中,启用抗锯齿处理的前后对比如图所示,注意观察画面中的点、直线以及多边形边缘的变化:

      
                          未开启抗锯齿处理

      
                         开启抗锯齿处理

     示例程序通过对右键菜单的响应,我们可以在抗锯齿和非抗锯齿渲染模式间进行切换。这一部分的示例程序完整代码已经放到了GitHub上,有需要的朋友可以参考一下(https://github.com/dxm3dp/OpenGL-06-Smoother点击打开链接)。


     本文出自杜晓萌的博客,请勿用于任何商业用途,转载请保持完整性并标明出处:http://blog.csdn.net/haohan_meng
0 0
原创粉丝点击