[计算机图形学|自学记录]光栅化

[计算机图形学|自学记录]光栅化
最新回答
西风不识相

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. 三角形的优点

  • 三角形是最基础的多边形。
  • 任何多边形都可以拆成三角形。
  • 三角形的三个点可以直接确定一个平面。
  • 点在三角形的内外关系可以通过叉积(cross)清楚地知道。
  • 只要知道了三角形的三个点的顶点属性,就可以通过插值计算出三角形内所有点的属性。

光栅化示例:

经过光栅化采样之后,三角形中间的像素的参数会由三角形顶点的信息差值获得(如深度、颜色等)。

采样后的结果:

3. 采样的改进

(1) 包围盒

默认情况下,采样采用逐行扫描,逐行判断每个像素是否在三角形内。但这显然不够经济。实际上,对于一个有限大小的三角形,只需要扫描一块特定大小的正方形即可,这就是包围盒。

构造包围盒的方法很简单:假设三角形的三个点为P0、P1、P2,那么包围盒的坐标可以通过取这三个点的x和y坐标的最大值和最小值来得到。

包围盒示意图:

(2) 其他方法

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

逐行扫描方法示意图:

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