三角形的光栅化Rasterization 1(Triangles)
定义
简单理解定义,不标准:
屏幕Screen: 一个二维数组,每个数组元素是一个像素。他是一个典型的光栅成像设备。
光栅化Rasterize: 把东西画在屏幕上。
像素Pixel :像素内部颜色不会发生变化,是代表颜色的最小单位。可以用RGB三个值表示颜色。
屏幕空间Screen Space :假设左下角是原点,向右是x轴,向上是y轴。规定像素坐标为(x,y)形式,用整数坐标描述,像素范围从(0,0)到(width-1,height-1)。像素中心在(x+0.5,y+0.5)。屏幕范围从(0,0)到(width,height)。
需要将投影后的
[
−
1
,
1
]
3
[-1,1]^3
[−1,1]3立方体转化到二维屏幕上操作:
- 先忽略z轴方向。
- 视口变换:将xy屏幕
[
−
1
,
1
]
2
[-1,1]^2
[−1,1]2拉到屏幕
[
0
,
w
i
d
t
h
]
×
[
0
,
h
e
i
g
h
t
]
[0,width]\times[0,height]
[0,width]×[0,height],把宽度变成width,高度变成height,xy的中心(原点)平移到屏幕中心
(
w
i
d
t
h
/
2
,
h
e
i
g
h
t
/
2
)
(width/2,height/2)
(width/2,height/2)。
- 光栅化:将立方体的多边形经过各种变换形成屏幕中的多边形(如下图),然后要将屏幕中的各种多边形打散成像素,显示各个像素的具体值。
成像设备
光栅显示设备:示波器、CRT、Frame Buffer(把显卡内存的一块区域映射到屏幕上)
显示设备:LCD(液晶)显示器,LED显示器,电子墨水屏(刷新率低),视网膜屏幕……
LCD显示器:液晶通过自己不同的排布影响光的极化(偏振方向)
在设备上成像
最基础的多边形:三角形
- 独特性质:
- 内部一定是平面的
- 内外定义清晰
- 三角形上有着明确的插值方法(如定义一个三角形,三个点的颜色分别是红绿蓝,那么这个三角形就会有一个渐变的颜色效果,这就是颜色插值,下图就是插值效果,只定义了三个顶点的颜色,中间的渐变的颜色全都是插值效果)
采样
最简单的光栅化方法:采样。
比如给一个函数f(x,y),求x=1、2、3的f(x,y)值,这就是采样。采样是对函数离散化过程,如下,只求每一个整数点的输出,跳过小数。
这里是指利用像素的中心对屏幕空间进行采样。
举例:像素在三角形中则进行着色。
可以定义函数如下:
代码:
如何判断像素是否在三角形中:使用叉乘,在Lecture 02详细讲过。可以自行回顾。
三角形的包围盒(Bounding box):不需要每次遍历屏幕所有像素点,只需要根据三角形的三个点确定包围盒,只对包围盒范围内的像素点进行处理。
另一种方法:对于三角形的每一行找到它的最左和最右像素点。适合需要大的包围盒但其实三角形覆盖的像素点很少(三角形很窄)的情况
实际屏幕的光栅化
光栅化会出现的问题——锯齿
像素本身有一定的大小,采样率对于信号来说不高,出现了走样问题。