GAMES101笔记:Lecture05 光栅化1
Syllabus
- Finishing up Viewing- Viewport transformation
 
- Rasterization- Different raster displays
- Rasterizing a triangle
 
- Occlusions and Visibility
透视投影
- 近平面的l, r, b, t是什么? - 希望清晰地表述出来 
- 有时采用: - 垂直视域(vertical field-of-view)(fovY)和宽高比(aspect ratio) - (假设对称性,比如 $l = -r$ , $b = -t$ )  
 
- 如何将fovY和宽高比转换为l, r, b, t?  
视口变换
将正则正方体映射到屏幕上的过程
从正则正方体映射到屏幕
- 什么是屏幕? - 像素的数组
- 数组的大小:分辨率(resolution)
- 一个常见的光栅化设备
 
- Raster == screen in German - Rasterize == drawing onto the screen - “光栅化”这个词来自德语 
 
- Pixel(FYI, short for “picture element”) - For now: A pixel is a little square with uniform color
- Color is a mixture of ( ${\color{red}red}$ , ${\color{green}green}$ , ${\color{blue}blue}$ )
 
- 定义屏幕空间  - 像素坐标写作(x, y), 其中x和y都为整数
- 像素的下标从(0, 0)到(width - 1, height - 1)
- 像素(x, y)的中心在(x + 0.5, y + 0.5)
- 屏幕覆盖(0, 0)到(width, height)
 
- 和z值无关 
- xy平面的变换:$[-1, 1]^2$ 到 $[0, width]\times[0, height]$ 
- 视口变换矩阵: 
光栅化
将三角形“打散”成像素
绘制工具


显示设备
示波器

显像管

CRT的光栅化显示

- 优化方法: - 隔行扫描,从而提高画面更新率 - 也可以扩展到视频压缩领域 - 缺点: - 会造成画面撕裂和鬼影现象 
 
帧缓冲区:光栅化显示的内存

平板显示设备

LCD(Liquid Crystal Display) Pixel
利用光的偏振原理和液晶的电感透光性来控制像素的显示

LED显示设备

电子墨水显示设备

多边形网格

三角形网格


为什么选择三角形?
- 三角形是最基础的多边形- 可以将其他多边形拆分成三角形
 
- 特殊性质- 各顶点保证是在统一平面内
- 边界清晰
- 方便进行插值
 
寻找像素

一个简单的方法:采样
对函数进行采样
将函数在一点上进行求值就是采样
可以用采样来离散化一个函数
c++代码:
| 1 | for (int x = 0; x < xmax; ++x) | 
采样是图形学的中心概念
可以对时间(一维)、面积(二维)、方向(二维)、体积(三维)······进行采样
光栅化:二维采样

- 重点: - 确定像素的中心是否在三角形内  - 定义二元函数:inside(tri, x, y),其中x, y不一定是整数 - 光栅化就是在一个二维指示函数中进行采样 - c++代码: - 1 
 2
 3- 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)- 采样位置:  
 
- 确定点是否在三角形内  - 方法: - 运用叉积 
 
- 边界情况:  - 采样点是被三角形1,三角形2覆盖,还是同时被两个三角形覆盖? - 解决方法: - 要么不做处理,要么自行定义一个统一标准来处理 
 
优化方法
- 是否需要对所有像素进行采样?  - 运用包围盒算法优化 
- 三角形增量遍历  - 不会考虑更多像素,适合用于渲染狭长三角形 
真实世界的像素

不同设备RGB像素的几何分布并不一样,但在这节课中,我们假设像素是方形,而且能够显示所有颜色
其他显示方法中的像素

彩色打印(上图)使用减色法
抗锯齿技术的引入
- 如果将采样信号输出,我们会得到:  
- 真实世界的显示设备会忽略部分原始信号  
- 与连续三角形函数进行比较:  
- 问题出在哪里?  - 图像出现了锯齿! - 原因: - 采样频率低于信号频率 
 
- 如何避免锯齿?  - 使用反走样(抗锯齿)技术 
