心怀希望の光栅化

还记得什么是光栅化咩?

0191ae539b9949539e973442a92e195f.png

将三维空间的几何形体显现在屏幕上,这就是光栅化(游戏、实时图形学的应用)

Perspective Projection

在正交投影里如何定义三维空间中的立方体呢?

用x轴的覆盖(左、右),y轴的覆盖(上、下),z轴的覆盖(远、近)

远近用正交投影和透视投影都是一样的,在做透视投影的时候,是需要把视锥变成长方体

那我们如何定义这样一个视锥呢?

382fd5d273ab4ff186d25678b77533f4.png

从摄像机出发,看向某一个区域,看到的近平面为其定义宽度和高度,就像是看显示器一样,定义一个宽高比,那什么是宽高比呢?

宽高比,顾名思义,它的宽度除以它的高度,即视图区域可看到的长宽比

我们还需要一个定义:视角(可看到的角度的范围,垂直可视角度,广角就是指垂直可视角度较大)

由长宽比和垂直可视角度可以推出水平可视角度

把摄像机摆放到某各个位置,向一个方向看,如果从侧面看可以看到这样的三角形,右面的线和摄像机距离是eq?%7Cn%7C,我们已知垂直可视角度,可视角度是上下两条连线的夹角,垂直可视角度/2是三角形张开的角度,可得出两个公式:

93795aae9713453a93aedab131ba280a.png

定义视锥:定义垂直可视角度、定义宽高比 

可以自动转化到定义正交投影的远近、左右、上下

根据前置内容,所有东西都可以转化到这样一个立方体上:

a1e003bea3e24c03b3ae6614fd6a3379.png

我们如何将这个立方体画到屏幕上呢?

既然要画到屏幕上那就先明确屏幕的定义,在计算机图形学中,屏幕被定义成一个二维的数组,数组中的每一个元素被定义成一个像素,像素的多少可以组成分辨率的概念

屏幕是典型的光栅成像设备,光栅即屏幕,把东西画在屏幕上就是光栅化的过程

像素:picture element(居然真的是像素。。。),像素是最小的单位,在里面不会有变化

3f102198f6dd4ec28a1358228482b82e.png

透视投影转化成正交投影需要保证近和远两个平面是不变的,大小是近远两平面都会变得和近平面一样大

Canonical Cube to Screen

52d837d608d94babb54e23dbc45ef433.png

 定义像素坐标,均写成eq?%28x%2Cy%29形式,用整数坐标描述,比如现在的蓝色像素可以用eq?%282%2C1%29表示(从0开始数),屏幕的分辨率从eq?%280%2C0%29开始一直到eq?%28width-1%2Cheight-1%29,像素的中心是eq?%282.5%2C1.5%29,从三维空间到屏幕变换(立方体映射到屏幕空间):

233b67ff105a442095176cc99103e82a.png

有z怎么办呢? 

z先不用管,后面有它的用途,至于x和y,将这个拉成宽度是width,高度是height,因为-1~1是2,所以需要先/2再×对应的高度或者宽度,我们要把屏幕空间的左下角定义到原点上,也就是说原来的中心是eq?%280%2C0%29那需要把它移到该在的位置上,这个变换被称为视口变换

69e37229eb6b406c8af6b3967e0b7f2c.png

 下一步我们要把空间中描述的信息变成真正的图,即打散成像素

77341f6395a0463bba56f0e8970739b8.png

 在《少年派的奇幻漂流》中的老虎栩栩如生,这是图形学的贡献,老虎身上有很多多边形,经历了变换操作后会形成在屏幕中的多边形,要进一步把多边形打碎成像素显示在屏幕上,知晓每一个像素的值都是什么,这个过程叫做光栅化

图像不止可以显现到屏幕上,还有一些其他的绘画工具

Drawing Machine

机器人的机械臂?:

激光切割:

Different Raster Displays

示波器:示波器本身也是成像的设备,它成像的原理和早期的显示器基本相同,电子经过阴极射线管加速打到屏幕上(CRT屏幕)

采用扫描的方式控制打印的位置,(隔行扫描,画每张图工作量减少一半,但对高速运动的画面容易造成画面撕裂)隔一行一条线,当足够密集的时候就足以覆盖整个屏幕:

 

显示器🖥通过显卡(内存中的一块区域映射到屏幕上):

高分辨率显示器,有些甚至分辨率超过了人的视网膜的分辨率(视网膜屏幕):

LCD(液晶显示器)利用液晶的原理控制显示

液晶通过自己的排布影响光的偏振方向(极化),两个光栅不同方向排布

LED发光二极管:

墨水屏刷新有点慢,但是挺自然

三角形表示能力很强,可以表示很多二维三维中的图形:

 

为什么三角形在图形学中得到了如此广泛的应用呢? 

 

首先三角形很简单,任何东西多可以拆分成三角形,内部一定是平面的,内外很清晰,只要定义了三角形的三个顶点,可以明确的知道差值:

判断像素和三角形的位置关系是光栅化中很重要的一环,像素内部是不能有颜色变化的,那盖住一半的像素该怎么办?

那就考虑像素中心点与三角形的位置关系呗:

 

 

 

最简单的光栅化方法:采样,那么我们如何进行这样的采样呢?

可以这样遍历一个二维数组:

 inside是定义的一个函数,判断点是否在三角形内(可以做叉积):

 那如果给定点恰好在三角形的边界怎么办?

那就要么不做处理,要么特殊处理(计上不计下,计左不计右)

通过采样进行光栅化:

有的点不可能触碰到三角形,三角形根本不可能填充到这些像素上,蓝色区域:三角形的包围盒

每一行都找最左和最右(包围盒较大时比较适用):

实际屏幕效果:

 

绿色像素多一点(人眼对绿色更为敏感,红:蓝:绿=1:1:2) 

我们仍然认为像素是一个内部颜色均匀的小方块:

 

采样后对应像素发现不太对:

可是我们想要的不是这个吗?

这锯齿太明显了吧?造成这个的结果呢就是因为锯齿,锯齿是图形学中致力解决的一个问题,采样率对于信号来说不够高:走样

抗锯齿、反走样是图形学中的一个重要技术

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值