笔记(平面图形的光栅化)

100 阅读1分钟

架构师的抽象思维

每个人都应该学习编程,因为他能教会你怎样思考---Steve Jobs(乔布斯)

  • 架构师 核心能力:抽象思维和抽象能力 宏观的全局掌控能力

  • 工程师 软件工程

  • 搬砖师(码农) 编写代码

代码质量的评判维度

可阅读性 可扩展性/可维护性 可测试性 可复用性

像素,图像

image.png

矢量: 具有数学表达的几何图像

光栅化:将几何图形转换为光栅像素的表达

画一条线段

DDA算法(数字微分分析法

  • 直线 y = mx + h满足微分方程 dy/dx = m Dy/Dx = (y2 -y1)/(x2 - x1)
  • 沿扫描线 Dx = 1
for(x = x1; x <= x2; x++ ){
    y += m;
    write_pixel(x, round(y));
}

斜率大的算法

  • Bresenham算法
  • DDA算法中每一步需要一次浮点加法
  • 在Bresenham算法中可以不出现任何浮点运算
  • 只考虑0 <= m <= 1 的情形(其它情形利用对称性处理)
  • 假设像素中心在半整数处
  • 如果从一个已被确定激活的像素出发,那么下一像素的可能位置只会出现两种可能

image.png

image.png

增量形式

image.png

硬件实现

线段的光栅化已成熟,并已由硬件实现 GDI Moveto(x,y) Lineto(x,y)

多边形区域的光栅化

多边形区域的填充: 区域内部的像素点

问题: 如何决定封闭多边形的内外

image.png 一些特殊的情况

image.png

多边形区域的光栅化已成熟,并已由硬件实现

光滑曲线的光栅化

image.png

image.png

反走样

  • 锯齿现象
  • 加灰度

image.png

image.png

课程说明: 中国科学技术大学数学科学学院的刘利刚老师于2020年春(疫情期间线上授课)讲授的本科生课程《计算机图形学》(课程编号:00106501)的录屏。 课程主页: staff.ustc.edu.cn/~lgliu/Cour…