屏幕,光栅化,像素,屏幕空间,视口变换,三角形 - 基础图元,光栅化,光栅化的问题

基本概念

什么是屏幕(Screen)

屏幕是一个典型的光栅(raster)化的成像设备,在计算机图形学中把其当做一个二维数组,数组的大小被称为分辨率(resolution),每个元素是一个像素(Pixel)。

光栅化(Rasterize)

光栅化(Rasterize)就是把东西画在屏幕上的过程。光栅(Raster)就是德语中的屏幕。

像素(Pixel)

像素是图片单元(picture element)的简写,可以当作一个只带有一种颜色的小方块(颜色是rgb(红绿蓝0-255)的混合)。

屏幕空间(Screen-Space)

屏幕空间就是在屏幕上建立一个坐标系(左下角是原点)。有以下一些约定:

  • 像素的坐标写成(x,y)的形式,例如下图蓝色坐标为(2,1)。
  • 像素坐标的范围是从(0,0)到(width-1,height-1)的。
  • 像素中心为(x+0.5,y+0.5)
  • 屏幕的覆盖范围是从(0,0)到(width,height)的。
    在这里插入图片描述

视口变换(Viewport transform)

经过MVP变换,得到将所有物体都映射到了正则立方体中[-1,1]3,接下来进行视口变换将正则立方体映射到屏幕空间。
在这里插入图片描述
具体过程为:

  • 忽略z
  • 将xy平面上的[-1,1]2(进行缩放和平移)成[0,width] X [1,height]
  • 计算出视口矩阵Mviewport
    在这里插入图片描述
    经过视口变换,我们就确定了屏幕上一些边界点的坐标,接下来我们就要把轮廓内的东西画到屏幕上来进行显示。

三角形 - 基础图元

三角形作为基础图元的好处

在这里插入图片描述

  1. 三角形是最基础的多边形。
  2. 任何其他的多边形可以拆成多个三角形。
  3. 三角行肯定是个平面(planar)(四边形弯折一个顶点就可以在不同的平面中了)。
  4. 内部容易区分(通过叉积可以快速判断点是否在三角形内,判断方法可以回顾第二节的内容)。
  5. 方便不同的属性进行插值(从一个顶点到另一个顶点内部属性的变化)。

使用像素表示三角形

经过MVP变换和视口变换就可以得到三角形三个顶点的坐标,接下来要将这个坐标转化为像素的集合。
这个过程的输入是三角形顶点投影到屏幕上的位置,输出是像素值的集合,如下图所示:
在这里插入图片描述
根据上图我们很容易得到,三角形内部的点一定是要着色的,可是三角形边缘的点怎么办呢?
我们可以通过采样等方式来判断像素(中心点)与三角形的位置关系(在内还是在外?),进而判断边缘的点是否该被染色。

光栅化

采样过程

对屏幕进行采样判断像素点的中心是否在三角形内部。
在这里插入图片描述
使用向量的叉乘判断点是否在三角形内部,如果在内部就染色,否则不染色,写出采样函数:
在这里插入图片描述
变量屏幕上像素中心点,采样:
在这里插入图片描述
遍历屏幕上所有的像素点,十分浪费性能,引入包围盒。包围盒就是圈定三角形顶点的xy最小值和最大值的范围。我们不用遍历整个屏幕只要判断包围盒内的点即可。(AABB包围盒)

在这里插入图片描述
注意:
对于边界情况,可以做处理也可以不做处理。比如我们可以认为,下面的每种说法都是对的:

  1. 图中的点在三角形1内
  2. 图中的点在三角形2内
  3. 图中的点在三角形1和三角形2内
    在这里插入图片描述

光栅化加速

相当于每一行设置一个包围盒,每一行只采样当前行包围盒内的像素。
适合比较窄的和旋转的三角形。
在这里插入图片描述

光栅化的问题

锯齿(Jaggie)或走样(Aliasing)

如图所示,直接栅格化后,边界并不像一个三角形。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值