关于反走样,这篇硕士论文进行了总结和创新。创新部分没有代码,我也没有验证这篇论文的创新点,因此摘录下其总结部分。
《绪论》
国内外研究现状中,包含了基本图形(直线、圆、椭圆)的反走样绘制现状和二维裁剪的现状。
论文的研究内容与创新点,点明文章将从以下3点创新:
a、利用DDA和Wu算法测增量思路,以及Wu算法的思想利用距离进行颜色分配思想,根据计算机浮点数的内部格式,用整数补码表示平移后的斜率(增量)小数部分(32 位定点小数),将画点位置的计算与颜色分配比例的计算合为一体,将这两个参数的计算在绘制循环中减少到一个判断,和 0~1 个自增或自减计算。颜色分配的精度达到 2的32次幂。并用 32 位整数以向量运算方式计算颜色分量与背景合成的颜色值,加快了颜色计算的速度。
b、(圆)求解坐标的时候利用级数展开,避免开放和实数运算,快并且误差小。(这块我验证了下计算误差,级数展开计算的结果与用浮点表示的变量直接开放的结果基本不会影响图形的绘制精度,误差没有明显的减小。如果可以提升速度,该方法还是可以借鉴的)
c、矩形裁剪算法可快速绘制。
《图元反走样绘制与裁剪的相关理论知识》
1、经典直线绘制及反走样算法
DDA算法
目前最简单的直线扫描转换方法是数字微分算法(digital different analyzer),简称 DDA 算法。下图是斜率m大于0小于1时的绘制步骤,当m大于1时,需要交换x和y的位置。
Bresenham 算法
Bresenham 算法通过离理想直线最近的两像素与理想直线段之间的偏移之差的正负性来决定下一点的绘制。
Wu算法
在进行 Wu 算法绘制直线时,理想直线上的实际像素点 P 由 P1 来近似,而绘制反走样直线的时候,则由离实际像素点 P 最近的跨骑直线的两个像素点 P1 和P2(Wu 像素对)来表示,并且距离理想直线近的像素颜色分配值更大,距离直线远的像素颜色分配值小,假设 P1 和 P2 的亮度值分别为 C1 和 C2,则 C1+C2=Color。
2、经典的圆与椭圆绘制及反走样算法
中点画圆与画椭圆算法
3、经典的二维裁剪算法
Cohen-Sutherland 直线段裁剪算法
每条直线的端点都用一组 4位二进制码来表示,称为区域编码(region code,RC),用来标识直线段端点相对于窗口边界的内部还是外部的位置。
之后介绍了如何按照左右下上的顺序判断线段延长线是不是在窗口内,没想到具体怎么绘制才能高效。。
点分割直线段裁剪算法
段进行裁剪。其算法原理是将起点为 P0,终点为 P1 的直线段等分为两段直线段,然后再继续等分,直到等分线段完全能够被保留或丢弃,即二分法处理。
《直线反走样绘制算法的改进》
略
《圆与椭圆反走样绘制算法的改进》
略
《矩形裁剪算法》
除了变换坐标,得到目标x,y等,没说明怎么快捷,怎么方便了呢?
需要在(图元)光栅化之前裁剪
我的理解是,矩阵裁剪算法是从数字计算到电子显示光栅化的时候,直线与方格的线相交坐标的确定过程。