Rasterization 1 (Triangles)
从规范立方体映射到屏幕
- 屏幕是像素构成的数组
- 数组的大小:分辨率
- 屏幕是一个典型的光栅成像设备
- 暂时认为像素是成像的最小单位
屏幕空间的定义
- 使用整数坐标描述像素
- 像素范围在 ( 0 , 0 ) (0,0) (0,0) 到 ( w i d t h − 1 , h e i g h t − 1 ) (width-1,height-1) (width−1,height−1) 范围内
- 像素 ( x , y ) (x,y) (x,y) 的中心坐标在 ( x + 0.5 , y + 0.5 ) (x+0.5,y+0.5) (x+0.5,y+0.5)
- 整个屏幕的坐标范围在 ( 0 , 0 ) (0,0) (0,0) 到 ( w i d t h , h e i g h t ) (width,height) (width,height) 之间
视口变换:将三维空间的立方体映射到屏幕
- Irrelevant to z z z
- Transform in x y xy xy plane: [ − 1 , 1 ] 2 [-1, 1]^2 [−1,1]2 to [ 0 , w i d t h ] × [ 0 , h e i g h t ] [0, width] \times [0, height] [0,width]×[0,height]
- 视口变换矩阵
M viewport = ( w i d t h 2 0 0 width 2 0 height 2 0 height 2 0 0 1 0 0 0 0 1 ) M_{\text {viewport }}=\left(\begin{array}{cccc} \frac{w i d t h}{2} & 0 & 0 & \frac{\text { width }}{2} \\ 0 & \frac{\text { height }}{2} & 0 & \frac{\text { height }}{2} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) Mviewport =⎝ ⎛2width00002 height 0000102 width 2 height 01⎠ ⎞
Triangles - Fundamental Shape Primitives
使用三角形作为基本形状的原因
- 三角形是最基本的多边形
- 任何其他多边形都能被拆分为三角形
- 三角形的特有性质
- 三角形保证其在同一屏幕内 (三点确定一个平面)
- 通过向量叉积可以轻松定义三角形的内部和外部(见 Lecture 2)
- 定义三角形顶点的属性可以轻松的在三角形内插值
Rasterization = Sampling A 2D Indicator Function
对三角形的光栅化的一个简单方式是对 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);
采样结束以后,再点亮屏幕中 image[x][y] = 1
的点即可,点的实际坐标是
(
x
+
0.5
,
y
+
0.5
)
(x+0.5, y+0.5)
(x+0.5,y+0.5)
注意,采样不仅可以在位置上,可以在时间上进行采样,视频就是在时间中采样的一种方式
-
加速采样的方法
- 包围盒
- 进行增量三角形遍历:适合又瘦又长的三角形