Lecture5:Rasterization 1 (Triangles)
- 光栅化,多用于游戏和虚拟现实
- 这节课据老师说挺简单
- 今日内容
- 讲完视角变换
- 光栅化
- 有时间讲下节课的遮挡和可见性
讲完视角变换
- 由透视投影转换为正交投影
- 如何定义视锥的大小?
- 定义视角的宽度和高度(宽高比)
- 红线的角度是垂直可视角度
- 这一角度越小透视投影越不明显
- 通过垂直可视角度和长宽比,可以推出水平可视角度
- 这一角度越小透视投影越不明显
- 在MVP之后,所有物体都到(-1, 1)的三次方,要把它画到屏幕上
- 我们认为屏幕是一个二维数组,每一个数就是一个像素
- 屏幕是一个光栅成像设备
- raster 一词是德语中的“屏幕”
- rasterize 则相当于把东西画在屏幕上
- pixel一次实际上是 picture element 的缩写
- 目前把像素当作一个小方块作为最小单位,其中颜色没有差异(实际不是)
- 颜色是“红绿蓝”的混合
- 认为屏幕左下角是屏幕空间的原点
- 向上是y轴,向右是x轴
- 像素的坐标(indice)写成(x, y)形式,从(0, 0)到(width - 1, height - 1)
- 像素的中心在(x + 0.5, y + 0.5)
- 整个屏幕覆盖(0, 0)到(width, height)
- 要做的转换
- 暂时不管z
- 只看x和y,把(-1, 1)的平方拉到[0, width] × [0, height]
- 上图就是视口变换
- 所谓光栅化,就是把多边形(三角形)打成在屏幕空间上的像素
- 示波器和早期显示器的成像原理相似:阴极射线管
- 通过扫描画线的方式成像
- 还可以隔行扫描画线,这样可以更快(直到现在在视频压缩技术中也继承了这样的思想),但是可能造成画面撕裂(尤其对于高速运动画面)
- 现在的显示器:把内存(显存)中的一块区域映射到屏幕上
- 现在的显示设备:平板显示设备
- LCD:计算器是低分辨率的LCD显示设备,还有分辨率高于人眼的视网膜显示设备
- LCD (Liquid Crystal Display):液晶显示器,其原理为光的偏振
- LED (Light emitting diode): 发光二极管
- 电子墨水屏,通过通电控制像素,但刷新率极低
- 拆多边形为像素
- 三角形是基础
- 三角形是最基本的多边形:所有多边形都能拆成三角形
- 三角形折不成平面
- 三角形的内外定义清楚(通过向量叉积)
- 三角形定义三个顶点的某种属性,对于三角形内部的某一点可以插值
- 把三角形变成像素,判断像素中心点和三角形的位置关系
- 通过采样的方法:就是把函数离散化的过程
- 2D采样,判断像素中心是否在三角形内,inside函数
- 通过两个for循环,但函数怎么实现?还是叉积!
- 那要是一点在三角形边界呢?本科上不做处理
- 2D采样,判断像素中心是否在三角形内,inside函数
- 光栅化的时候没必要把整个屏幕走一遍,怎么办?
- 包围盒!Bounding Box ,严格地说,轴向包围盒
- 光栅化还有其他加速方法!每一行都对应找最左、最右,说着容易做着难,对于窄长三角形比较适合。
- 实际的屏幕什么样啊?
- 右侧是bayer pattern,一种可以让红绿蓝均匀分布的排列方法,绿色点其实比红色的点多,红蓝密度一致 ,因为人眼对绿色最敏感
- 在打印过程中不太同,打印是减色系统(加的颜色越多越黑),屏幕是加色系统(rgb值越高越亮)
- 今天的课最后看一个问题
- 现在这么做,有锯齿!因为采样率对于这一信号不够高,导致信号走样/锯齿(Aliasing / Jaggies)
- 下节课见!