OpenGL中的多重采样 抗锯齿处理的最大优点之一就是它能够使多边形的边缘更为平滑,使渲染效果显得更为真和自然。点和直线的抗锯齿处理是得到广泛支持的,但遗憾的是,对多边形的平滑处理并没有在所有平台上都得到实现。并且,即使在可以使用GL_POLYGON_SMOOTH的时候,对整个场景进行抗锯齿处理也没有想象中的那么方便。这是因为,抗锯齿处理是基于混合操作的,这就需要从前到后对所有的图元进行排序,这是十分麻烦的。 在OpenGL中还有一个功能,称为多重采样(multisampling),可以用来解决抗锯齿处理中的这个问题。支持多重采样的OpenGL实现中,在已经包含了颜色、深度、模板的帧缓冲区中还会添加一个额外的缓冲区,所有的图元在每个像素上都进行多次采样,其结果就存储在这个新增的缓冲区中。每次当像素进行更新时,就会针对这些采样进行解析,以产生一个单独的。这个处理属于是在“幕后发生的事情”,它会带来额外的内存和处理器开销,会对性能造成一定的影响。因此,有些OpenGL实现可能并不支持多渲染环境中的多重采样处理。 为了进行多重采样,首先必须获得一个支持多重采样帧缓冲区的渲染环境,这在不同的平台中获取方法可能各不相同。GLUT提供了一个位段(GLUT_MULTISAMPLE),允许请求这种帧缓冲区。例如,为了请求一个多重采样、完全颜色、带深度的双缓冲帧缓冲区,可以调用: glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); 然后,我们可以使用glEnable/glDisable组合来打开或关闭多重采样: // 打开多重采样 glEnable(GL_MULTISAMPLE); // 关闭多重采样 glDisable(GL_MULTISAMPLE); 关于多重采样还需要特别注意的一个地方是当它被启用时,点、直线和多边形的平滑特性都将被忽略(如果开启了的话)。这意味着在使用多重采样时,就不能同时使用点、直线和多边形的平滑处理了。但是在有些情况下,点和直线如果采用平滑处理可能会比使用多重采样得到的效果更好。因此,当我们绘制点和直线时,可以关闭多重采样,在绘制其它实心几何图形时再打开多重采样。代码如下所示: // 关闭多重采样 glDisable(GL_MULTISAMPLE); // 打开顶点的平滑处理 glEnable(GL_POINT_SMOOTH); // 绘制一些平滑的点 // ... // 关闭顶点的平滑处理 glDisable(GL_POINT_SMOOTH); // 打开多重采样 glEnable(GL_MULTISAMPLE); 注意,如果没有多重采样缓冲区,OpenGL就会把GL_MULTISAMPLE当做是被禁用的。 多重采样缓冲区在默认情况下使用片段的RGB,并不包括颜色的alpha成分。我们可以通过调用glEnable方法配合下面的参数来修改这个行为: GL_SAMPLE_ALPHA_TO_COVERAGE 使用alpha GL_SAMPLE_ALPHA_TO_ONE 把alpha设为1,并使用它 GL_SAMPLE_COVERAGE 使用glSampleCoverage函数所设置的 当启用了GL_SAMPLE_COVERAGE时,glSampleCoverage函数允许指定一个特定的,它是与片断覆盖进行位与(AND)操作的结果。 void glSampleCoverage(GLclampf value, GLboolean invert); 这种对多重采样的优化并不是严由OpenGL规范所规定的,其确切的结果可能因不同的OpenGL实现而异。 OpenGL中的状态排序 打开或关闭不同的OpenGL特性将会修改驱动程序的内部状态,这种状态的改变可能会对渲染的性能造成影响。所以,对性能非常敏感的程序员常常会不辞辛苦地对所有的绘图命令进行排序,使需要相同状态的几何图形在一起进行绘制。这种状态排序的手段是游戏程序员非常常用的提高渲染速度的方法之一。 未完待续... 本文出自杜晓萌的博客,请勿用于任何商业用途,转载请保持完整性并标明出处:
推荐整理分享OpenGL中的多重采样(opengl多级采样消除锯齿有什么用),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:opengl多级采样消除锯齿有什么用,opengl 局部重绘,opengl多级采样消除锯齿有什么用,opengl 局部重绘,opengl拾取例子,opengl绘制多个物体,opengl 局部重绘,opengl多级采样消除锯齿有什么用,内容如对您有帮助,希望把文章链接给更多的朋友!
MFC下二维OpenGL环境详细配置 一直以来,网上有很多关于OpenGL在MFC环境下配置的教程,但是,一般都说的不够详细,或者配置过程不够完整,今天我在自己摸索和学习的基础了,写
解决vtkXOpenGLRenderWindow (0x2a9db): Could not find a decent visual 系统当前环境描述:bitUbuntu..5,gcc和g4.6.3,clangllvm-3.3,Mesa-.3.5,vtk-5..1。错误详情:ERROR:In/usr/local/src/VTK5..1/Rendering/vtkXOpenGLRenderWindow.cxx,linevtkXOp
OpenGL启用双缓冲时颜色变淡或者不纯的解法方法 初学OpenGL,什么都不太会,在开启双缓冲并进行实时绘图的时候发现,颜色和设置的颜色并不完全一样,不太纯正,一直找不到原因,互联网上也搜不