首页 > 代码库 > Opengl研究4.0 走样与反走样
Opengl研究4.0 走样与反走样
Opengl研究4.0 走样与反走样
DionysosLai(906391500@qq.com) 2014-06-25
走样与反走样,也叫混淆与反混淆。所谓走样,是由于使用离散量(像素)表示连续量(图形)而引起的失真。
走样现象:
1. 阶梯状的图形边界
如图所示:
由于像素点是一块一块的,存在锯齿状。
2. 图形细节失真
由于显示图形的最小单位为像素,像素是由宽度的。有时候,我们可能显示的线段比像素要窄,要小。那么可能出现两种情况:a. 如果显示的线段宽度比像素宽度小一点,将被保留;b. 如果线段很细,就不会显示。---->图形的细节失真。
3. 狭小图形的遗失与动态图形的闪烁
这个是由于图形细节失真造成的。如果显示线段比较细,如果落在像素中心上,就显示;如果线段正好落在两个像素之间就不显示。---->图形闪烁
反走样,即在图形显示过程中,用于减少或消除走样现象方法。
反走样方法:
1. 提高分辨率:
通过硬件,增加像素。--->代价非常大,而且会引起扫描转换时间、帧缓存容量。
2. 非加权区域采样方法
走样原因:由于在实际中,像素是由实际面积大小不为0,同时直线段的宽度是至少为1个像素。而我们假设是像素面积为0,亮度有覆盖该点的亮度决定,同时线段宽度为0。二者的矛盾是导致走样原因。
解决方法:
改变直线度模型,线上像素灰度(颜色)不等。
方法步骤:
A. 将直线段看做具有一定宽度的狭长矩形;
B. 当直线度与某像素相交时,求出两者相交区域的面积。
C. 根据相交区域面积大小,设置该像素的亮度值。
关键:
是如何计算相交区域面积大小。由于像素是个正方形,相交面积计算还可以。有个简便方法,就是将正方形划分成n个区域,判断每个区域(当成点)是否在线段内即可。如图所示:
则这个像素的相交面积为3/9;
3. 加权区域采用方法
对于非加权区域采样方法中,面积的计算时,由于每个区域的权重是一样的,而实际上对于中心的区域,其贡献值比较大。因此,将像素点的各个区域权重是不一样的,越中央,权重越大,反之,权重越小。权重,一般我们可以用一个矩阵表示:
那么对于上图的相交面积即为5/16。