OpenGL中的抗锯齿技术

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

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

点示例

当点很大时,显示如下

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

启用抗锯齿后的效果

有点圆了

代码

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 图形显示质量优先

线示例

未启用

启用后

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

代码

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);

如下两图的比较

时间: 2024-08-02 06:57:40

OpenGL中的抗锯齿技术的相关文章

OpenGL核心技术之抗锯齿

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 抗锯齿问题在游戏中一直存在的,尤其是体现在3D模型上的材质或者游戏UI界面上,由于现在引擎都非常完善,并且引擎都提供了抗锯齿功能,我们通过引擎提供的参数界面设置一下就可以消除.但是很

【转载】浅谈抗锯齿技术-老文章(供参考)

原文:http://vga.zol.com.cn/2002/1007/48701.shtml 一代又一代的图形芯片和显卡不断的推出,PC图形子系统的图形处理能力也随之大幅度的提高,这使得我们有可能在计算机上看到更精美的实时生成的图像.无论图形芯片如何改进,在图形输出技术没有革命性变化的今天,我们看到的最终图像依然是由上百万个显示屏上的像素组成的.正是因为像素的存在,使得图像总是存在一个近乎于无法完全克服的缺点:锯齿. 在现实世界中相邻的两个物体边缘一般是光滑的,但是在电脑上生成的图像中相邻的物体

游戏中的抗锯齿杂谈

抗锯齿(英语:anti-aliasing,简称AA),也译为边缘柔化.消除混叠.抗图像折叠有损等.它是一种消除显示器输出的画面中图物边缘出现凹凸锯齿的技术,那些凹凸的锯齿通常因为高分辨率的信号以低分辨率表示或无法准确运算出3D图形坐标定位时所导致的图形混叠(aliasing)而产生的,反锯齿技术能有效地解决这些问题.它通常被用在在数字信号处理.数字摄影.电脑绘图与数码音效及电子游戏等方面,柔化被混叠的数字信号. 抗锯齿技术出现的原因如下:由于高分辨率下的来源信号或连续的模拟信号能够存储较多的数据

OpenGL中实现双缓冲技术

在OpenGL中实现双缓冲技术的一种简单方法: 1.在调用glutInitDisplayMode函数时, 开启GLUT_DOUBLE,即glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);.这里将我们惯用的GLUT_SINGLE替换为GLUT_DOUBLE,意为要使用双缓冲而非单缓冲. 2. 调用glutDisplayFunc(display)注册回调函数时, 在回调函数中所有绘制操作完成后调用glutSwapBuffers()交换两个缓冲区指针. 3. 调用

抗锯齿技术简介

虽然3D图形渲染技术的飞速进步给我们带来了一次次的视觉震撼,电影级的画面早已经不是遥远的梦想,但电脑在计算3D画面时所出现的锯齿效果仍是不可避免的,这种效果在物体边缘最为明显.画面上那些跳牙咧嘴的锯齿每每令我们如蟹在喉,不吐不快.为了消除这些碍眼的锯齿,抗锯齿技术应运而生,并在图形处理技术不断发展的推动下日趋成熟和完善. 1. FSAA抗锯齿技术 最早的抗锯齿技术来自于3DFX,名为FSAA (FuliSceneAnti-aliasing,全屏抗锯齿).我们都知道,画面的分辨率越高,锯齿感就越不

UE4在PSVR中的抗锯齿和优化相关知识

UE4目前版本(4.15)在PS平台上并不支持MSAA,在未来的版本会加入.也就是说目前没有办法在PS平台上使用Forward Rendering + MSAA的组合 FXAA效率最高,但效果最差,只做了最后的图像边缘锐化 MSAA的优点是物体边缘和贴图分开处理,边缘会比较清晰.缺点是开销会比TAA稍大(即使有硬件支持),另外会有Specular aliasing.在使用MSAA时,可以在材质中打开normal to roughness,这样会使normal上突出的部分更加粗糙,减少高光闪烁.

回击MLAA:NVIDIA FXAA抗锯齿性能实测、画质对比

PC游戏玩家肯定会对各式各样的AA抗锯齿技术非常熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA(形态抗锯齿),但远比后者低调,所以很多玩家可能还从来没听说过,但是如果你玩过<永远的毁灭公爵>或者<F.3.A.R>,应该会有所耳闻.今天我们就来实际测测多款显卡上的FXAA性能和画质表现,并将其与MLAA进行简单对比. 什么是FXAA? FXAA全称为"Fast App

抗锯齿(后期效果) Antialiasing (PostEffect)

The Antialiasing (PostEffect) offers   a set of algorithms designed to give a smoother appearance to graphics.   When two areas of different colour adjoin in an image, the shape of the   pixels can form a very distinctive "staircase" along the b

GPU抗锯齿

抗锯齿(Anti-aliasing):标准翻译为"抗图像折叠失真".由于在3D图像中,受分辨的制约,物体边缘总会或多或少的呈现三角形的锯齿,而抗锯齿就是指对图像边缘进行柔化处理,使图像边缘看起来更平滑,更接近实物的物体.它是提高画质以使之柔和的一种方法.如今最新的全屏抗锯齿(FullSceneAnti-Aliasing)可以有效的消除多边形结合处(特别是较小的多边形间组合中)的错位现象,降低了图像的失真度.全景抗锯齿在进行处理时,须对图像附近的像素进行2-4次采样,以达到不同级别的抗锯