感觉这门课必其他的课都偏原理,慢慢补,后面关于这门课的都放这个文档里 地址: https://www.icourse163.org/learn/CAU-45006?tid=1463638445#/learn/content?type=detail&id=1241809228&cid=1264437047 [toc]
# 光栅图形学算法
# 直线段扫描转换
像素逼近直线,用有限个点逼近无限个点
可以发现,直线是有锯齿的,因为像素是有限的,所以我们只能做逼近。为了能在屏幕上显示这个逼近的直线,我们需要得到这个逼近线上的每个点 第一步,先求出这个斜线的方程
因为我们已知 P0,P1 所以我们可以求出这两点间的方程:
即由第一个点往前走一个单位,对 Y 取整就可以得到屏幕上的坐标,如下
向上加 0.5, 向下取整,降低误差 直线是最基本的图形,一个动画往往需要调用成千上万次画线程序,所以画线的效率直接反应渲染的效率
下面介绍三个经典画线算法
# 数值微分 DDA (Digital Differential Analyzer)
引入图形学中一个很重要的思想 — 增量思想 我们假设 X 增量已知,每次都是步进一个像素
故得出
含义:当前 Y 值就等于前一个 Y 值加上斜率 K
# DDA 扫描算法的一个例子
但是如果斜率的绝对值大于 1, 则就会出问题 因为如果绝对值大于 1, 那么步进一定会大于一个像素
# DDA 中点画线算法
改进思路 1. 直接把浮点运算改成整数加法