一.补充上节内容:
1.如何定义一个3维空间下的长方体或者说视锥?
1.宽高比
2.垂直可视角度
只要知道前面两个,就可以知道远近,左右上下
二.MVP之后要做什么?
MVP之后得到cube[-1,1]3 → 画在Screen(屏幕)
1.定义屏幕
一个二维数组
数组中的每个元素就是像素(分辨率就是像素的多少)
是一个典型的光栅成像设备
2.Raster(光栅)就是德语中的Screen
动词化Rasterize=drawing onto screen
把东西画在屏幕上就是光栅化的过程
3.Pixel(像素)(PIcture element的缩写)
目前可以理解成一个小方块并且每个只有一种颜色
4.屏幕空间
屏幕左下角是原点,向右是x,向上是y的一个坐标系
一些规定:
- Pixel's indices(像素坐标)是(x,y)的形式;x,y都是整数,例如下图的就是(2,1)
- 所有的像素的表示(0,0)to(width-1,height-1)
- 像素的中心:(x+0.5,y+0.5)
- 整个屏幕覆盖(0,0)to(width,height)
5.屏幕映射(视口变换)
先不管z轴, to [0, width] x [0, height]
先缩放再平移
三.不同的光栅显示设备
1.早期显示设备(CRT显示器)
示波器:成像原理和早期显示器一样,利用的是阴极射线管,
早期的电视或者电脑利用的是隔行扫描技术,就是每时刻只生成奇数行或者偶数行的数据,减少了一半的工作量,现在仍然在一些视频压缩中起作用,用的是一样的思想
2.Frame buffer
现代的显示器是通过映射显存中的一块区域
3.现代显示设备(LCD)
液晶显示器
发光二极管
四.光栅化
1.为什么选择三角形?
- 是最基础的图形,边最少
- 其他的多边形可以拆成三角形
- 三角形内一定是平面
- 内外的定义很明确
- 定义三个顶点后,三角形内可以插值
2.光栅化的关键:
如何判断一个像素和三角形的位置关系(像素中心点与三角形的位置关系)
3.判断方法:
采样
- 感性理解:给你一个连续函数,在不同的地方去问,它的值是多少
- 采样就是把函数离散化的过程
- 采样是图形学很重要的一个概念,此处是指利用像素中心对屏幕进行采样
回到我们要做的:判断像素中心是否在三角形内:
- 定义一个inside函数
- 采样:
- 具体的实现:叉积→全负/正即为三角形内
- 一个特殊情况:点在边上怎么办
-不做处理(本课程)
-特殊处理(OPenGL和DX):上面和左边认为在三角形内,右边和下边是三角形外 - 另外并不要所有的像素都进行采样,只需要取x的最小和最大,y的最小和最大,其实还可以取每一行的x的最小和最大,不过实现起来较复杂
五.真实屏幕上的光栅化
右边的是bayer pattern图案,很明显绿色密度要更高,那是因为人眼对绿色最为敏感。
六.锯齿
因为每个像素都是由同一个颜色覆盖的,所以填充颜色以后就会变成这个形状,这并不是我们一开始想要的形状,出现这个问题的主要原因就是采样率太低,那么之后就会根据这个问题去进行抗锯齿或者说反走样