2026-10-30 08:12:37
一、前言
在完成MVP(Model-View-Projection)变换之后,我们已经将3D场景转换为了二维图像的准备状态。然而,如何将这个二维图像“画”在显示器上,还需要进一步的操作,这就是光栅化的过程。
二、屏幕映射
屏幕空间本质上是一个二维数组,每个元素存储一个n元组,这个元组可以存储颜色信息(如R、G、B的值)或其他信息(如灰度)。每个元素对应着一个像素,屏幕的分辨率定义为width*height。
例如,一个4x3分辨率的屏幕,其像素坐标从(0,0)到(3,2),而像素的中心坐标为(x+0.5, y+0.5),整个屏幕覆盖范围从(0,0)到(width, height)。
经过MVP变换后,我们得到了一个边长为2的正则立方体,接下来需要将其变换至屏幕空间。这个变换过程可以通过一个变换矩阵来实现,具体过程在此不做赘述。
屏幕映射示意图:

变换矩阵示意图:


三、光栅化
1. 光栅化的定义
所有模型都是由多边形组成的,而多边形的面数决定了模型的光滑程度。组成模型的最基本图形是三角形,这些三角形的顶点在经过变换投影到屏幕上后仍然为三角形。通过知道这些三角形覆盖了哪些像素从而在屏幕上采样,进而画出一张该模型的二维图像的过程就称作光栅化。
2. 三角形的优点
光栅化示例:

经过光栅化采样之后,三角形中间的像素的参数会由三角形顶点的信息差值获得(如深度、颜色等)。
采样后的结果:
3. 采样的改进
(1) 包围盒
默认情况下,采样采用逐行扫描,逐行判断每个像素是否在三角形内。但这显然不够经济。实际上,对于一个有限大小的三角形,只需要扫描一块特定大小的正方形即可,这就是包围盒。
构造包围盒的方法很简单:假设三角形的三个点为P0、P1、P2,那么包围盒的坐标可以通过取这三个点的x和y坐标的最大值和最小值来得到。
包围盒示意图:

(2) 其他方法
为了避免因狭长型三角形而产生大包围盒的浪费,可以采用对每行的最左最右逐行扫描的方法。但这种方法相对复杂,有兴趣的朋友可以自行搜索了解。
逐行扫描方法示意图:

通过以上内容的学习,我们可以了解到光栅化是计算机图形学中将3D场景转换为二维图像的重要过程。通过屏幕映射和光栅化采样,我们可以将3D模型渲染到屏幕上,从而呈现出逼真的视觉效果。