第5节 光栅化

Games101

Posted by Wanghan on February 4, 2022

光栅化

透视投影

视锥体由相机的FOV,相机远近平面以及纵横比定义。
根据远近平面的距离值以及FOV能求出远近裁剪平面的高度:

\tan

image
再加上纵横比可得远近平面宽度:
注:MVP结束时结果为(-1,1)的立方体

从标准立方体到屏幕

  • 什么是屏幕?
    • 一个像素数组
    • 数组的大小:分辨率
    • 一种典型的光栅显示
  • Raster :德语屏幕的意思
    • Rsterize :在屏幕上绘制
  • Pixel(FYI,short for “picture element”)
    • 颜色的最小单位,单一颜色的小方块(==抽象理解==)
    • 颜色由红绿蓝三通道混合而成
  • 定义屏幕空间
    • 像素的坐标为(x,y)的形式,x,y是整数
    • 像素坐标范围从(0,0)到(width-1,height-1)
    • 像素(x,y)的中心为(x+0.5,y+0.5)
    • 屏幕像素覆盖范围为(0,0)到(weidth,height)

image

  • 与z无关
  • 变换xy平面:从[-1,1]^2到[0,width]x[0,height]
  • 视口变换矩阵:
    M_{viewport}=\begin{pmatrix}\frac{width}2 & 0 & 0 & \frac{width}2 \\ 0 & \frac{height}2 & 0 & \frac{height}2 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{pmatrix}
    

    CRT显示器

    image
    阴极射线管
    image
    光栅扫描

Frame Buffer(帧缓冲区):用作光栅显示的一块内存区域

image
DAC(数模转换器)

平板显示设备

  • Low-Res LCD Display(LCD)
    image
  • Color LCD, OLED……
    image

    LCD(Liquid Crystal Display) Pixel

  • 通过扭曲偏振来阻挡或透射光
  • 背光照明(例如荧光灯或LED)
  • 通过部分扭曲达到中等强度水平
    image

    LED (Light emitting diode array)

    image

    Electrophoretic(Electronic Ink) Display 墨水屏

    image

    光栅化:在光栅屏幕上绘制

    三角形-基本形状基元

  • 为甚么是三角形?
    • 最基本的多边形
      • 分解其他多边形
    • 独特属性
      • 保证平面
      • 内部外部定义清晰
      • 定义良好的在三角形的顶点上插值的方法(重心插值)

        哪些像素值近似为一个三角形

        光栅化中重要的一步:判断三角形与像素(中心点)的位置关系
        image
        输入:投影在屏幕上的三角形顶点的位置
        输出:近似三角形的像素值集

        简单的近似:采样

        评估某点的值就是采样。 我们可以通过采样使函数离散化。

for (int x = 0; x < xmax; ++x) 
 output[x] = f(x);

采样是图形的核心思想。 我们采样时间(1D),面积(2D),方向(2D),体积(3D)…

如果每个像素中心都在三角形内,则进行采样

image

定义函数inside(tri,x,y)

x,y不一定是整数

inside(t,x,y)=
\begin{cases}
1 & Point \ (x,y) \ in \ triangle \ t\\
0 & otherwise
\end{cases}
光栅化=采样一个2D指示函数
for (int x = 0; x < xmax; ++x) 
 for (int y = 0; y < ymax; ++y) 
 image[x][y] = inside(tri, 
 x + 0.5, 
 y + 0.5);
inside? 三次向量叉乘

image

(\overrightarrow {p_0,p_1})\times (\overrightarrow {p_0,Q}),(\overrightarrow {p_1,p_1})\times (\overrightarrow {p_1,Q}),(\overrightarrow {p_2,p_0})\times (\overrightarrow {p_2,Q})  
边缘情况

image
要么严格规定 要么不处理

是否遍历屏幕所有像素?

image
用包围盒

增量三角形遍历(更快?)

image
逐行包围盒,每一行都寻找最大最小值。适合什么样的三角形?

真实屏幕光栅化

真实LCD屏幕像素

image
Galaxy S5:bayer pattern,绿色比红色和蓝色密度高
### 其他显示方法 image
彩色打印:观察半色调图案
### 锯齿问题
image
image