目录
1.1.1视口变换(Viewport transformation)——将三维的立方体转化到二维平面
1.4 不同的光栅显示设备(Different raster displays)
(1) LCD (Liquid Crystal Display) 液晶显示器
(2) LED (Light emitting diode) 发光二极管阵列
(3)Electrophoretic (Electronic Ink) Display电泳(电子墨水)显示
1.5栅格化三角形 (Rasterizing a triangle)
1.6实际屏幕的光栅化(Rasterization on Real Displays)
1. 光栅化(Rasterization)
经过之前提到的模型变换M、视图变换V、投影变换P之后,我们将要观察的景象都放在了 [-1,1]3这样一个经典的立方体中。
接下来,我们要做的就是将这个立方体中的东西画在屏幕上。
1.1 光栅化相关的定义
1.1.1什么是屏幕?
·像素数组
·数组的大小:分辨率
·一种经典的光栅成像设备
1.1.2什么是光栅?
·德语中,光栅的意思就是屏幕
·我们将光栅化定义为将东西画在屏幕上的过程
1.1.3什么是像素?
·有一种说法,像素Pixel是”picture element(图像元素)”的简写形式。
·现在比较形象但不太准确的理解:像素是具有统一颜色的小方块
·颜色是由红、绿、蓝混合得到。rgb颜色系统
1.1.4什么是屏幕空间?
·在屏幕上建立二维坐标系
·像素的索引为(x, y)的形式,其中x和y都是整数
·像素的索引从(0,0)到(width - 1, height - 1)
·像素(x, y)的中心点其实是(x+0.5, y +0.5)
·屏幕空间覆盖范围从(0,0)到(width,height)
1.2 如何实现光栅化?
1.1.1视口变换(Viewport transformation)——将三维的立方体转化到二维平面
·与z无关,忽略z坐标
·在x-y平面上变换:[- 1,1]2 到 [0,width] × [0,height]
·先将x,y的[-1,1]拉伸到[-width/2,width/2]\ [-height /2,height /2]
·再以中心为目标平移,变换矩阵如下:
1.1.2栅格化三角形形成像素
顶点数据都是需要输入的,程序将顶点按布局连接起来就是逻辑三角形
具体步骤见1.5
1.3 绘图工具(Drawing Machines)
数控Sharpie绘图机、激光切割机
1.4 不同的光栅显示设备(Different raster displays)
1.4.1示波器
示波器的工作原理与早期电脑显示器原理基本相同,使用阴极射线管。
人们为了偷懒,发明出“隔行扫描”的技术,骗过了眼睛,节约了资源。1080p与1080i的区别也在于此(p是逐行扫描)。
1.4.2现在的显示设备
帧缓冲区:栅格显示的内存
将这块内存中的数据映射到屏幕上即可。
(1) LCD (Liquid Crystal Display) 液晶显示器
(2) LED (Light emitting diode) 发光二极管阵列
(3)Electrophoretic (Electronic Ink) Display电泳(电子墨水)显示
1.5栅格化三角形 (Rasterizing a triangle)
1.5.1 为什么选择三角形作为基础图形
因为三角形具有很多的优点:
·三角形是最基础的多边形
·三角形可以很好的分解其他多边形
·三角形内部一定是平面的
·三角形上顶点插值的定义有良好的方法(重心插值)
1.5.2 如何用像素点近似表示三角形
·往往考虑像素中心点与三角形的位置关系
- 简单方法:采样(Sampling)
·为确定每个像素中心是否在三角形内,我们在屏幕空间定义一个inside函数。
·若像素中心在三角形内,则函数值为1;反之,函数值为0。
·inside函数的实现可以使用三次向量叉积。
eg: P1P2 x P1Q结果为正;(Q在P1P2左侧)
P0P1 x P0Q结果为正;(Q在P0P1左侧)
P2P0 x P2Q结果为负。(Q在P2P0右侧)
按照顶点顺序进行三次叉积,计算结果的方向并不一致
故,Q点在三角形外部
·通过遍历整个屏幕可以实现光栅化
·光栅化过程需要检查屏幕上所有像素吗?不,可以使用包围盒Bounding Box优化。
·只要选择三角形顶点中x的最大最小值、y的最大最小值,在这个范围内遍历即可
·更快的解决方案是增量三角形遍历Incremental Triangle Traversal,每行都确定边界像素。
1.6实际屏幕的光栅化(Rasterization on Real Displays)
1.7 光栅化存在的问题
锯齿