转载自:http://blog.csdn.net/d04421024/article/details/4852698
由于计算机以离散点生成图形,生成图形必然与真实景物存在差距,这种差距表现为:直线或光滑曲面的锯齿、花纹失去原有色彩形状、细小物体在画面的消失等。统统叫做走样(aliasing)。反走样可以减少这种情况。粗略设想一下,就是把原来边界的地方锯齿部分用低饱和度的点补上,这样既不影响整体轮廓,又获得较好的平滑效果。
用于减少和消除各种走样现象的方法就是反走样。通常反走样的方法有提高分辨率法、非加权区域采样法、加权区域采样法等,但是在OpenGL中实现反走样就简单的多。
反走样前提供“提示”采用函数:
void glHint(GLenum target,GLenum hint);
其中hint可以是:
GL_FASTEST 给出最有效的选择
GL_NICEST 给出最高质量的选择
GL_DONT_CARE 没有选择
target 意义
GL_POINT_SMOOTH_HINT 指定点、
GL_LINE_SMOOTH_HINT 线、
GL_POLYGON_SMOOTH_HINT 多边形的采样质量
GL_FOG_HINT 指出雾化计算是按每个象素进行(GL_NICEST),还是按每个顶点进行(GL_FASTEST)
GL_PERSPECTIVE_CORRECTION_HINT 指定颜色纹理插值的质量
其中GL_PERSPECTIVE_CORRECTION_HINT用以纠正单纯线性插值带来的观察错误。
OpenGL实现反走样需要满足两个条件,一是启用混合,二是启用针对几何图元的反走样处理。
前面已经讲过,glEnable(GL_BLEND)启动混合,而glEnable(mode)则启用几何图元的反走样,其中mode取值为GL_POINT_SMOOTH、GL_LINE_SMOOTH或GL_POLYGON_SMOOTH。
接下来我们实现一个网格状球体的反走样处理。为了便于观察,我们不使用包括雾、光照、纹理等效果。
int glInit()
{
//启用阴影平滑(Smooth Shading)。
glShadeModel(GL_SMOOTH);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
//设置深度缓冲
glClearDepth(1.0f);
//启动深度测试
glEnable(GL_DEPTH_TEST);
//深度测试的类型
glDepthFunc(GL_LEQUAL);
//进行透视修正
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
return TRUE;
}
void glMain()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); //加载单位矩阵
glTranslatef(-1.5f, 0.0f, -5.0f);
//球体的颜色为黑色
glColor3f(0.0f, 0.0f, 0.0f);
//未使用反走样处理
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_POLYGON_SMOOTH);
auxWireSphere(1.0);
//启用反走样处理
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH);
glTranslatef(3.0f, 0.0f, 0.0f);
auxWireSphere(1.0);
SwapBuffers(g_hDC);//交换前后缓冲区
}
程序运行效果如图9-7所示,可以看到两个球体的明显不同。
分享到:
相关推荐
OpenGL中的多边形反走样是一种重要的技术,用于提高计算机图形的质量,特别是在显示复杂几何形状时。反走样(Antialiasing)的主要目的是消除或减少图像中的锯齿边缘,使得图像看起来更加平滑和自然。在OpenGL这个...
总之,OpenGL反走样是提高图形显示质量的关键技术之一,通过多边形反走样等方法,我们可以显著减少图像中的锯齿和颜色失真,提供更接近真实世界的视觉体验。在实际应用中,开发者可以根据具体需求选择合适的反走样...
反走样算法的源码实现通常涉及图形API,如OpenGL或DirectX,它们提供了相应的函数和设置来启用和配置反走样。开发者可以通过调整采样率、采样模式等参数,来优化算法的效果和性能。 4. 开发文档的重要性: 对于...
标题"openglzouyang.rar_反走样_反走样opengl"表明这是一个关于OpenGL反走样技术的示例程序,可能是通过VC++(Visual C++)编写的。VC++是一个微软开发的集成开发环境,支持C++编程,包括使用OpenGL进行图形编程。 ...
4.1 OpenGL与反走样:OpenGL是一个跨语言、跨平台的图形库,提供了多种反走样技术,如Multisample Anti-Aliasing (MSAA) 和FXAA(快速近似抗锯齿)。 4.2 Direct2D与DirectWrite:在Windows平台上,Direct2D和...
7. **其他反走样技术**:除了GDI+,现代图形库如DirectX和OpenGL也提供了高级的反走样技术,如多重采样抗锯齿(MSAA)、覆盖采样抗锯齿(SSAA)、快速近似抗锯齿(FXAA)和时间抗锯齿(TAA)等,这些技术在游戏开发...
在代码层面,可以使用以下步骤来实现OpenGL的反走样: 1. 创建支持MSAA的帧缓冲对象: ```cpp GLuint fbo; glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); GLuint rbo; ...
在VC++环境中实现这些反走样技术,需要利用图形库,如OpenGL或DirectX。这些库提供了接口和函数,可以方便地进行图形绘制和反走样处理。开发过程中,我们还需要理解色彩理论、几何变换、光照模型等基本概念,以及...
在OpenGL这样的图形库中,反走样技术通过多采样和自定义片段着色器等方式得以实现,从而提高了图像的视觉效果,使得数字艺术和模拟真实世界场景更加逼真。在压缩包文件的列表中,"fanzouyang"可能是包含了相关代码...
在这个反走样时钟的例子中,源代码很可能是用C++、OpenGL或DirectX等编程语言和图形库实现的。开发者可能使用了上述的一种或多种反走样技术来平滑时钟指针的边缘。通过分析源代码,我们可以了解到如何在实时渲染中...
另外,还可以结合OpenGL或Direct2D等更底层的图形库来实现更复杂的反走样策略。 在提供的"3.5反走样圆"文件中,很可能包含了一个具体的示例代码或者详细步骤,指导开发者如何在MFC工程中集成并实现这个功能。通过...
【标题】"距离加权反走样(河南理工大学)课程设计及生成程序"涉及的核心知识点是OpenGL编程和反走样技术。OpenGL是一个跨语言、跨平台的图形库,用于渲染2D、3D矢量图形,广泛应用于游戏开发、科学可视化等领域。反...
效率比agg快很多 只能画线(线段,直线,曲线) 有反走样,有羽化效果 多种端点样式,拐点样式 bug——两点距离不能小于线宽
在处理反走样时,程序员可以利用C++的面向对象特性,封装不同的反走样算法,并结合OpenGL、DirectX等图形库进行渲染。 6. **交互式操作**:描述中提到的“按r实现直线的旋转”,这涉及到交互式图形用户界面(GUI)...
本项目“计算机图形学反走样秒表”是一个个人练习代码,旨在通过实际编程来深入理解反走样技术的应用。 反走样技术的核心是通过对像素进行采样并混合颜色来实现的。在显示图形时,边缘处的像素往往难以精确地落在...
同时,现代图形硬件通常内置了多种反走样技术,可以通过图形API(如OpenGL、DirectX)进行设置和调用,简化了开发过程。 总的来说,"曲线面积加权反走样算法"是提高计算机图形学中曲线图像质量的关键技术之一,通过...
在Android 3D开发中,通常可以通过OpenGL ES API来实现这些反走样技术。例如,我们可以设置`GL_MULTISAMPLE`扩展来开启MSAA,并通过`glSampleCoverage`函数来控制采样覆盖率。对于FXAA,可以编写一个额外的片段着色...
在现代图形库如OpenGL或DirectX中,反走样通常作为高级特性提供,可以全局开启或针对特定对象启用。多边形边缘反走样(MSAA)和覆盖采样(SSAA)是常见的实现方式,它们通过在渲染时增加采样点来提高边缘质量。在...
在现代图形库如OpenGL或DirectX中,反走样已经成为标准特性,提供了多种高级的反走样技术,如多采样抗锯齿(Multisample Antialiasing, MSAA)和覆盖采样抗锯齿(Coverage Sample Antialiasing, CSAA)。这些技术...
在VC++编程环境中,实现反走样可能需要利用OpenGL或Direct3D这样的图形库。在这些库中,可以通过设置抗锯齿参数来开启反走样功能。例如,在OpenGL中,可以使用`glEnable(GL_MULTISAMPLE)`来开启多采样抗锯齿,或者...