光栅化
经过MVP矩阵和视口变换后,我们就可以从相机的角度看到一个和屏幕大小一致的二维平面。
那么把这个看到的二维平面应用到我们的屏幕上的过程就是光栅化。
在这儿我们需要补充一个概念-像素:
像素:
一个二位数组,数组中每个单位代表一个像素,如1920*1080,简单理解为一个一个的小方块,每个方块内颜色是一样的,是屏幕最小的单位。(方便理解这样记录,实际远远比这复杂)
对于光栅化我们可以大概的氛围两部分,采样,深度缓冲
采样
把构成物体的三角形或其他图形的所有点,离散的对应到屏幕的像素上。
简单例子:
比如视口变换后,得到的是一个三角形,然后每个点判断是否在三角形内,在的话进行采样信息。
简单做法我们可以遍历所有的像素点,然后判断点是否在我们得到的这个三角形内(叉乘)。
上述计算直接计算后,会出现如下图,因为我们默认的像素内的颜色都是相同的:
这种现象就是我们说的锯齿,抗锯齿处理的话可以如下处理:
先把原图就行模糊处理,然后再逐像素率(把像素划分更小单位判断)采样:(MSAA)
模糊处理原理每个像素取被覆盖面的平均值。
深度缓冲
到目前位置我们只是考虑了二维平面的直接映射,但是二维平面的物体可能会有先后顺序造成的遮挡覆盖
等的情况,那么我们当然也需要对这部分进行处理,达到我们能看到正确的遮挡先后关系的效果,这部分
操作就是深度缓冲。
事件复杂度 O(N)
在生成图像的时候会生成两个图。一个是成品图,一个是每个像素对应的深度值。
计算方法:
1.所有像素的深度值,默认无限远。
2.每个像素采样的时候拿到采样到的深度和当前像素记录的深度作比较,小的话覆盖之前存贮的。并且把新的像素信息画上去。