光栅化
透视投影
视锥体由相机的FOV,相机远近平面以及纵横比定义。
根据远近平面的距离值以及FOV能求出远近裁剪平面的高度:
\tan
再加上纵横比可得远近平面宽度:
注:MVP结束时结果为(-1,1)的立方体从标准立方体到屏幕
- 什么是屏幕?
- 一个像素数组
- 数组的大小:分辨率
- 一种典型的光栅显示
- Raster :德语屏幕的意思
- Rsterize :在屏幕上绘制
- Pixel(FYI,short for “picture element”)
- 颜色的最小单位,单一颜色的小方块(==抽象理解==)
- 颜色由红绿蓝三通道混合而成
- 定义屏幕空间
- 像素的坐标为(x,y)的形式,x,y是整数
- 像素坐标范围从(0,0)到(width-1,height-1)
- 像素(x,y)的中心为(x+0.5,y+0.5)
- 屏幕像素覆盖范围为(0,0)到(weidth,height)
- 与z无关
- 变换xy平面:从[-1,1]^2到[0,width]x[0,height]
- 视口变换矩阵:
M_{viewport}=\begin{pmatrix}\frac{width}2 & 0 & 0 & \frac{width}2 \\ 0 & \frac{height}2 & 0 & \frac{height}2 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{pmatrix}
CRT显示器
阴极射线管
光栅扫描
Frame Buffer(帧缓冲区):用作光栅显示的一块内存区域
DAC(数模转换器)
平板显示设备
- Low-Res LCD Display(LCD)
- Color LCD, OLED……
LCD(Liquid Crystal Display) Pixel
- 通过扭曲偏振来阻挡或透射光
- 背光照明(例如荧光灯或LED)
- 通过部分扭曲达到中等强度水平
LED (Light emitting diode array)
Electrophoretic(Electronic Ink) Display 墨水屏
光栅化:在光栅屏幕上绘制
三角形-基本形状基元
- 为甚么是三角形?
- 最基本的多边形
- 分解其他多边形
- 独特属性
- 保证平面
- 内部外部定义清晰
- 定义良好的在三角形的顶点上插值的方法(重心插值)
哪些像素值近似为一个三角形
光栅化中重要的一步:判断三角形与像素(中心点)的位置关系
输入:投影在屏幕上的三角形顶点的位置
输出:近似三角形的像素值集简单的近似:采样
评估某点的值就是采样。 我们可以通过采样使函数离散化。
- 最基本的多边形
for (int x = 0; x < xmax; ++x)
output[x] = f(x);
采样是图形的核心思想。 我们采样时间(1D),面积(2D),方向(2D),体积(3D)…
如果每个像素中心都在三角形内,则进行采样
定义函数inside(tri,x,y)
x,y不一定是整数
inside(t,x,y)=
\begin{cases}
1 & Point \ (x,y) \ in \ triangle \ t\\
0 & otherwise
\end{cases}
光栅化=采样一个2D指示函数
for (int x = 0; x < xmax; ++x)
for (int y = 0; y < ymax; ++y)
image[x][y] = inside(tri,
x + 0.5,
y + 0.5);
inside? 三次向量叉乘
(\overrightarrow {p_0,p_1})\times (\overrightarrow {p_0,Q}),(\overrightarrow {p_1,p_1})\times (\overrightarrow {p_1,Q}),(\overrightarrow {p_2,p_0})\times (\overrightarrow {p_2,Q})
边缘情况
要么严格规定 要么不处理
是否遍历屏幕所有像素?
用包围盒
增量三角形遍历(更快?)
逐行包围盒,每一行都寻找最大最小值。适合什么样的三角形?
真实屏幕光栅化
真实LCD屏幕像素
Galaxy S5:bayer pattern,绿色比红色和蓝色密度高
### 其他显示方法
彩色打印:观察半色调图案
### 锯齿问题