计算机图形学03 光栅化


1、什么是光栅化

  经过前面的MVP变换,我们得到了一个宽高均为2,中心在坐标原点的cube,光栅化就是把这个cube绘制在屏幕上的过程。他需要经历两个阶段,分别是视口变换(Viewpoint Transformation)光栅化(Rasterization)

1.1 视口变换

  首先我们定义屏幕空间如下所示,左下角为坐标原点,屏幕的宽为width,高为height,视口变换就是将MVP变换得到的cube缩放到屏幕大小(尺度变换)并将其左下角对齐屏幕左下角(平移)的过程。
在这里插入图片描述
因此视口变换矩阵可表示为
在这里插入图片描述

1.2 光栅化

  经过视口变换后,我们只是得到了与屏幕大小一致的图像,还没有将图像绘制在屏幕上,因此光栅化就是给屏幕像素上色的过程。
  通常来说,一幅图像可分割为若干个细小的三角形(一个三角形覆盖屏幕上多个像素),每个三角形有各自的颜色,那么,对屏幕像素进行上色,也就是判断屏幕上某个像素是否在某个三角形内,若在,就给该像素赋上该三角形的颜色。
在这里插入图片描述
  以下图为例,已知三角形的三个顶点坐标以及三角形的颜色值(255,0,0),我们只需判断每一个像素的**中心点(x+0.5,y+0.5)**是否在三角形内即可,若在其内部则将该像素颜色赋为(255,0,0)。
在这里插入图片描述
  在上面叙述的方法中,我们需要遍历屏幕空间的每一个像素,运算量较大,因此可首先找出三角形所在的大致区域,随后只需判断此区域内的像素即可,即先找出bounding box,随后对bounding box内像素进行光栅化。
在这里插入图片描述
  经过上述光栅化后的图像如下图所示,明显可以看出在三角形的边界上出现了锯齿现象(走样)。
在这里插入图片描述

2、反走样(Antialiasing)

  对二维平面的光栅化,其实就是一个采样的过程,采样就有可能因为违背采样原理而产生一些问题,如走样、摩尔为、车轮效应,所有这些问题产生的原因,其实都是因为采样频率太低或者说信号频率太高以致产生了频谱混叠。
  以上都是信号与系统方面的理解,直观的针对上面的锯齿现象来说,为什么我们能看见明显的锯齿,很简单,就是边界部分的颜色变换太快了,缺少过渡,那么,很容易想到的一个思路就是对靠近边界的像素的颜色进行一个过渡处理。怎么做呢,有两种方法,一种是先对原图进行低通滤波,之后再光栅化,另一种是多采样(MSAA)。

2.1 先低通滤波再采样

  低通滤波就是一个平均的过程,以该像素点周围像素值的平均值来代替当前像素点的值,很明显,这样越靠近边界的地方,其值就会越低或越高,起到了一个颜色过渡的作用
在这里插入图片描述

2.2 多采样(MSAA)

  所谓多采样,就是对每一个像素点,再将其细分为若干个亚像素点(如4个),判断该像素点内有几个亚像素点在三角形内部,根据亚像素点在三角形内部的比例调整该像素点的值,如4个亚像素点都在三角形内部,那么将该像素点颜色赋值为255,若只有3个在内部,则赋值为int(255*3/4),以此类推。
在这里插入图片描述

3、Z-Buffer(深度缓存)

  在上述的过程中,我们似乎只用到了x,y值,z值没有,那么考虑在下面的这种情况下,应该怎样给屏幕像素赋值呢?很显然,对于同时位于多个三角形内部的像素点,该点的值我们应该赋最近的三角形的颜色值,这个最近,怎么体现,就是用z值体现的,当z都为正的情况下,z越小,代表该点离我们越近。
在这里插入图片描述
  所谓深度缓存(Z-Buffer),就是存储屏幕空间像素点最小深度值的二维矩阵,与z-buffer对应,有一个frame-buffer,其存储的是像素点处的颜色值(RGB值)。Z-Buffer算法可表示如下
在这里插入图片描述
直观展示如下
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值