1.屏幕像素:

屏幕像素看作X、Y坐标上的点,像素的中心点即坐标加0.5:
image.png
上节课中的观测变换中讲到,正交投影是投射到标准盒上,透视投影是先经过压缩,随后再正交。最终的就是要把接受正交投影的标准盒投射到屏幕上:
image.png
写成矩阵:
image.png

2.显示设备:

CRT

阴极射线管
image.png

显卡到屏幕

image.png
(太空侵略者)

一张图片就是一个颜色数据类型的2D数组,它被保存在GPU缓冲器中,通过DAC传输给显示器把数字信号转换为模拟信号。

LCD 液晶显示器原理

image.png
前后两个挡板,一个水平放置,一个竖直放置,两个板子中间是液晶。液晶能够改变光的方向来决定光是否可以被显示。

LED 发光二极管显示器原理

就是发光灯珠

电子墨水屏 E-link

image.png
改变电极,让颜色翻转。

3.三角形:

三角形特征:

  • 最基础的多边形
  • 可以组成任何多边形
  • 三角形内部一定是平面的
  • 内部外部十分清楚(相对于凹凸多边形)
  • 非常好进行插值,只要知道三个顶点的属性就可以在三角形内部进行渐变插值

三角形采样,根据像素中心点是否在三角形内进行判断像素显示:
image.png
C++中判断方式:
image.png
inside函数 使用三次叉乘判断点是否在三角形内:
05. Rasterization 1 (Triangles) - 图10

  1. #初始x、y像素点位置
  2. x = 0
  3. y = 0
  4. #x、y所有像素点
  5. x_max = list(range(0, 10))
  6. y_max = list(range(0, 10))
  7. #打印所有像素中心点坐标
  8. for x in x_max:
  9. for y in y_max:
  10. coordinate = (x+0.5, y+0.5)
  11. print(coordinate)

为了加快运算,可以忽略bounding box 周围的像素计算:

加速:Bounding Box 包围盒

image.png
对于三角形不可能覆盖的像素,不做计算处理

其他加速

  • Incremental Triangle Traversal (类似于每一行都有一个包围盒)
    • 适合窄长的三角形,旋转了角度的三角形

image.png

结果与锯齿
image.png
aliasing,就是走样,在图形学光栅化中就体现在锯齿jaggies上

image.png
所以有了抗锯齿和反走样。

4.真实的LCD屏幕光栅化结果

image.png
左边:实际上每一个像素都是红绿蓝三个条的灯光
右边:用bayer pattern 拜尔阵列 来排布红绿蓝,让其均匀。(绿色要比红色和蓝色多1倍,因为人眼对绿色最为敏感,所以感光元件也会如此排列)
image.png
这张打印的排列更加复杂,可能是因为要考虑这个减色系统如何省墨