GAMES101课程学习笔记—Lec 05~06:Rasterization 光栅化
1 从标准化设备坐标到屏幕
之前我们通过MVP矩阵把物体坐标变换到标准化设备坐标(每个顶点的x,y,z坐标都应该在-1.0到1.0之间)
那么接下来我们需要把它映射到屏幕中
那么就会产生以下问题
- 何为屏幕?
在图形学中,我们认为屏幕是一个二维数组,数组里的每一个元素为一个二维像素。
屏幕是一个典型的光栅成像设备
光栅化的过程就是把东西画在屏幕上的过程 - 何为像素?
在这门课中我们暂时认为它是小的方块,内部的颜色是一个整体的颜色,颜色值用RGB表示。
我们同样需要定义屏幕的空间
- 屏幕空间即在屏幕中建立坐标系,XOY平面
屏幕空间坐标为整数,范围从(0,0)到(width-1,height-1)
像素(x,y)中心在(x+0.5,y+0.5)
通过视口变换可以将标准化设备坐标映射到屏幕坐标(暂时先不管Z)
视口变换后,我们要把这些多边形显示在光栅显示设备上
关于光栅显示设备的知识在此不作记录了
2 从图形到光栅显示
上文的老虎由不同的四边形组成,也有很多例子是靠三角形组成
三角形是最基本的多边形,拥有很多特性
- 三角形可以分解其他的多边形
- 三角形保证是平面的
- 三角形的内外定义清晰,可以用叉乘判断内外
- 三角形内可以定义明确的插值方法
接下来以三角形为例
在经过视口变换之后,我们知道了三角形变换到屏幕空间的位置,那么像素该如何显示呢?如何判断像素和三角形呢?
2.1 采样
采样也就是把一个函数离散化的过程
以下的图片展示了利用像素中心对屏幕空间的三角形进行2D采样的过程
我们定义了一个inside函数,判断了像素中心是否在三角形内部
伪代码的形式就像下图,遍历像素,判断是否inside
这个inside函数如何实现判断点Q呢?
我们要做的是叉乘
判断 P 1 P 2 × P 1 Q P_1P_2 × P_1Q P1