感觉这门课必其他的课都偏原理,慢慢补,后面关于这门课的都放这个文档里 地址: https://www.icourse163.org/learn/CAU-45006?tid=1463638445#/learn/content?type=detail&id=1241809228&cid=1264437047 [toc]

# 光栅图形学算法

# 直线段扫描转换

像素逼近直线,用有限个点逼近无限个点 可以发现,直线是有锯齿的,因为像素是有限的,所以我们只能做逼近。为了能在屏幕上显示这个逼近的直线,我们需要得到这个逼近线上的每个点 第一步,先求出这个斜线的方程
因为我们已知 P0,P1 所以我们可以求出这两点间的方程: y=kx+by = kx+b
k=frac(y_1y_0)(x_1x_0)(x_1x_0)k = \\frac{(y\_{1}-y\_{0})}{(x\_{1}-x\_{0})} (x\_{1} ≠ x\_{0}) 即由第一个点往前走一个单位,对 Y 取整就可以得到屏幕上的坐标,如下
向上加 0.5, 向下取整,降低误差 直线是最基本的图形,一个动画往往需要调用成千上万次画线程序,所以画线的效率直接反应渲染的效率

下面介绍三个经典画线算法

# 数值微分 DDA (Digital Differential Analyzer)

引入图形学中一个很重要的思想 — 增量思想 我们假设 X 增量已知,每次都是步进一个像素 故得出 y_i+1=y_i+ky\_{i+1}=y\_{i}+k
含义:当前 Y 值就等于前一个 Y 值加上斜率 K

# DDA 扫描算法的一个例子

但是如果斜率的绝对值大于 1, 则就会出问题 因为如果绝对值大于 1, 那么步进一定会大于一个像素

# DDA 中点画线算法

改进思路 1. 直接把浮点运算改成整数加法

編集日

*~( ̄▽ ̄)~[お茶]を一杯ください

Solvarg WeChat 支払う

WeChat 支払う

Solvarg Alipay

Alipay

Solvarg PayPal

PayPal