利用Opengl反走样优化图形显示
2021-11-16周谦倪健
周谦 倪健
在人机交互的界面软件中经常要使用各类图形,如点、直线、曲线、多边形和圆,软件设计人员通过编写程序将图形按需要的方式呈现给使用者。所有图形最终是以像素为基本单位显示到屏幕,当一条直线,不在水平或垂直方向时,放大它的显示结果,可以观察到直线呈现锯齿状,效果看起来不自然。本文结合实际的软件开发过程,探讨使用Opengl反走样优化图形的显示方法。
Opengl(Open Graphics Library)实际上是一套标准的图形与硬件之间的开放图形库接口,为软件开发者提供了丰富的图形编程接口(API),支持不同的编程语言和硬件平台。软件接口由几百个不同的函数組成,可实现从简单的图形绘制到复杂的三维图形交互。OpenGL常应用于虚拟仪表设备、计算机辅助设计、可视化程序和游戏等软件的开发。其中反走样函数功能可以很好地解决图形锯齿化的问题。
软件背景
为了设计具有360°指向的显示图,选用Opengl作为图形设计的接口。在只通过360条线段连接组成的多边形,近似地表现圆的外形图,编码完成的效果如图1所示。
通过放大截图,可以观察到圆形的边缘明细呈现锯齿状,特别是在接近垂直和水平时,更是明显。如图2和图3所示。
解决思路
所有计算机显示的图形都是是由离散的像素点组成的,因此屏幕上的图像与现实事物存在一些误差。误差主要表现为图形上的直线或光滑曲线的边缘呈现锯齿状、彩色的颜色失真、微小物体的不细致体现等。其中的边缘锯齿化就叫做走样。解决这种图形显示与设计者预期效果不同的走样问题,有2个处理思路。
其一:提高分辨率
分辨率是指屏幕在横向上的点数乘以纵向上的点数,得到总的像素点数。在同样大小的屏幕上,当分辨率低时,在屏幕上显示的像素就少,像素与像素之间的距离(像距)较大,单个像素的尺寸也较大。当分辨率提高时,在屏幕上显示的像素增多,像素与像素之间的距离(像距)变小,单个像素尺寸也变小。通过提升硬件处理能力,增加单位面积内的像素数量。在屏幕尺寸不变的情况下,分辨率越高,缩小像素之间的距离,显示效果就越精准、细腻,可取得接近现实世界的效果。但这种方法的缺点是成本会大幅提高,并且会引起扫描转换时间变长、帧缓存容量变大等系列问题。
其二:软件反走样
反走样(Antialiasing),是计算机图形学中的一个重要概念。反走样就是将图形边缘与其相邻的像素点的颜色进行混合,让过渡变得平缓柔和,图像就显得更顺滑。如图4所示,左部是走样线,右部是反走样线。
比较2种解决问题的思路,第2种更简洁、经济和可行。
代码实现
Opengl为软件开发人员提供了完善的反走样函数。
首先调用glEnable (GL_BLEND)函数启用融合,之后启用点、线、多边形的反走样。
glEnable( GL_POINT_SMOOTH );
glEnable( GL_LINE_SMOOTH );
glEnable( GL_POLYGON_SMOOTH )。
可以调用函数glHint()对图像质量与制图速度之间的作些调整,但并非所有的编码都采用它,依据实际情况而定。其函数形式为:glHint( GLenum target , GLenum hint ),参数取值范围见表1所示。
实际效果
经过反走样处理后的圆形边缘锯齿淡化了,即使放大观察,也依然平滑,曲线的过度更柔和。
在观察Opengl反走样处理的图形边缘效果后,可看出其图形整体的视觉效果更细腻、更自然,软件使用者的感受会更加舒适。