视锥
fov:可视角
aspect ratio:宽高比
MVP
屏幕:抽象的认为是一个二维数组,数组中的每一个元素是一个像素
屏幕是一个典型的光栅成像设备
光栅化:把东西画在屏幕上的过程
像素:理解为不变的最小单位,RGB的混合来表示颜色
屏幕空间:屏幕定义的一个坐标系
每一个像素的索引默认是x,y,范围是 (0,0) 到 (width-1,height-1)
像素的中心是 (x+0.5, y+0.5)
屏幕所占的区域是 (0,0) 到 (width, height)
[-1,1]. ==>> [0, 2] ==>> [0,width][, height]
z方向不变
光栅设备
示波器,示波器的显示原理与显示器一样,都是阴极射线管
CRT
通过隔行扫描的方式画线
Frame Buffer:内存中间的一块区域,将这块区域映射到屏幕上 (显存)
平板显示器
LCD:液晶显示器
通过自己的不同排布,影响光的极化,也就是光的偏振方向
LED:发光二极管
电子墨水屏:通过改变黑色和白色的朝向显示,刷新率很低
光栅化的过程
三角形表示三维的图形
三角形表示二维的图形
三角形的性质:
- 三角形是最基础的多边形
- 任何其他多边形都可以拆成三角形
- 三角形一点是平面的
- 三角形的内外定义是分明的
- 根据三角形里面的任一点和三角形三个顶点位置关系,可以得到一个逐渐的变化,从三角形的一个顶点变成另一个顶点。即他们之间的属性在三角形内部如何插值(重心坐标插值)
判断像素的中心点与三角形的位置关系
采样法/A Simple Approach: Sampling
给一个连续的函数,在不同的地方去问函数的值是多少
例如一个函数
f
(
x
)
=
s
i
n
(
x
)
f(x) = sin(x)
f(x)=sin(x) ,然后问x=1,x=2…x=100的 f(x) 都是多少
采样就是把一个函数给离散化的过程
这里的采样就是利用像素中心对屏幕空间进行采样
定义一个函数,判断像素的中心是否在三角形内
如何采样:循环遍历
如何判断点是否在三角形内:通过叉积。p1p2叉乘p1q,判断点的位置。点在三条边(同样的顺序)的同侧,则在三角形里面
要么不做处理,要么特殊处理。本门课里不做处理。‘
上述点是在三角形1还是三角形2,或者两者都在,只要自己定义一个标准就行
在一些图形学api有非常严格的定义。像openGL和DirectX认为上边和左边都在三角形内,右边和下边则不在
蓝色区域称为三角形的包围盒 aabb
m
i
n
(
p
0.
x
,
p
1.
x
,
p
2.
x
)
,
m
a
x
(
p
0.
x
,
p
1.
x
,
p
2.
x
)
,
m
i
n
(
p
0.
y
,
p
1.
y
,
p
2.
y
)
,
m
a
x
(
p
0.
y
,
p
1.
y
,
p
2.
y
)
min(p0.x,p1.x,p2.x),max(p0.x,p1.x,p2.x),min(p0.y,p1.y,p2.y),max(p0.y,p1.y,p2.y)
min(p0.x,p1.x,p2.x),max(p0.x,p1.x,p2.x),min(p0.y,p1.y,p2.y),max(p0.y,p1.y,p2.y)
只需要对包围盒内的区域做循环
对于狭长的旋转45度的三角形,适合上述包围盒。即每行判断一个独立的包围盒
真实屏幕上的光栅化
真实的像素不是一个方块
绿色的点比红色和蓝色的点要多:因为人眼本质上对绿色比红色蓝色更敏感
彩色打印机,更加的复杂
这门课里仍然认为每一个像素是个颜色均匀的小方块
采样会造成锯齿问题