原理公式

光栅化:把三角形投影到屏幕后,判断每个像素是否落在三角形内 (重心坐标判断),落在则填充该像素。

Z-Buffer 深度测试:为每个像素维护一个最近深度,逐三角形比较:

$$\text{if } z_{pixel} < z_{buffer}[x][y]: \quad z_{buffer}[x][y] = z_{pixel};\quad color[x][y] = c$$

推导要点:Z-Buffer 用每个像素记录最近深度的方式解决遮挡—— 这是 GPU 渲染的基石,也是「近处物体盖住远处物体」的算法实现。

重难点核心代码(code/demo14_rasterizer.py)

Python
def point_in_triangle(p, tri):             # 重心坐标法
    (x, y) = p; (x1,y1),(x2,y2),(x3,y3) = tri
    det = (y2-y3)*(x1-x3) + (x3-x2)*(y1-y3)
    a = ((y2-y3)*(x-x3) + (x3-x2)*(y-y3)) / det
    b = ((y3-y1)*(x-x3) + (x1-x3)*(y-y3)) / det
    return a >= 0 and b >= 0 and 1-a-b >= 0

if z < depth[y, x]:                        # 深度测试
    depth[y, x] = z
    color[y, x] = col

光栅化与 Z-Buffer
光栅化与 Z-Buffer