1.屏幕像素:
屏幕像素看作X、Y坐标上的点,像素的中心点即坐标加0.5:
上节课中的观测变换中讲到,正交投影是投射到标准盒上,透视投影是先经过压缩,随后再正交。最终的就是要把接受正交投影的标准盒投射到屏幕上:
写成矩阵:
2.显示设备:
CRT
阴极射线管
显卡到屏幕
(太空侵略者)
一张图片就是一个颜色数据类型的2D数组,它被保存在GPU缓冲器中,通过DAC传输给显示器把数字信号转换为模拟信号。
LCD 液晶显示器原理
前后两个挡板,一个水平放置,一个竖直放置,两个板子中间是液晶。液晶能够改变光的方向来决定光是否可以被显示。
LED 发光二极管显示器原理
就是发光灯珠
电子墨水屏 E-link
3.三角形:
三角形特征:
- 最基础的多边形
- 可以组成任何多边形
- 三角形内部一定是平面的
- 内部外部十分清楚(相对于凹凸多边形)
- 非常好进行插值,只要知道三个顶点的属性就可以在三角形内部进行渐变插值
三角形采样,根据像素中心点是否在三角形内进行判断像素显示:
C++中判断方式:
inside函数 使用三次叉乘判断点是否在三角形内:
#初始x、y像素点位置
x = 0
y = 0
#x、y所有像素点
x_max = list(range(0, 10))
y_max = list(range(0, 10))
#打印所有像素中心点坐标
for x in x_max:
for y in y_max:
coordinate = (x+0.5, y+0.5)
print(coordinate)
为了加快运算,可以忽略bounding box 周围的像素计算:
加速:Bounding Box 包围盒
对于三角形不可能覆盖的像素,不做计算处理
其他加速
- Incremental Triangle Traversal (类似于每一行都有一个包围盒)
- 适合窄长的三角形,旋转了角度的三角形
结果与锯齿
aliasing,就是走样,在图形学光栅化中就体现在锯齿jaggies上
所以有了抗锯齿和反走样。
4.真实的LCD屏幕光栅化结果
左边:实际上每一个像素都是红绿蓝三个条的灯光
右边:用bayer pattern 拜尔阵列 来排布红绿蓝,让其均匀。(绿色要比红色和蓝色多1倍,因为人眼对绿色最为敏感,所以感光元件也会如此排列)
这张打印的排列更加复杂,可能是因为要考虑这个减色系统如何省墨