Perspective Projection
定义透视矩阵的时候,一般用垂直的fidld-of-view(fovY)和aspect ratio。
fov和aspect ratio和l,r,b,t的关系:
Canonical Cube to Screen
在mvp矩阵应用后,将物体投影到了 [ − 1 , 1 ] 3 [-1, 1]^3 [−1,1]3,还需要投影到viewPort,则需要ViewPort矩阵
- 与z无关
- 在xy平面上从 [ − 1 , 1 ] 2 变 换 到 [ 0 , w i d t h ] × [ 0 , h e i g h t ] [-1, 1]^2变换到[0, width]×[0, height] [−1,1]2变换到[0,width]×[0,height]
- Viewport transform matrix:
( w i d t h / 2 0 0 w i d t h / 2 0 h e i g h t / 2 0 h e i g h t / 2 0 0 1 0 0 0 0 1 ) \begin{pmatrix} width/2 & 0 & 0 & width/2 \\ 0 & height/2 & 0 & height/2 \\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix} ⎝⎜⎜⎛width/20000height/2000010width/2height/201⎠⎟⎟⎞
Triangles - Fundamental Shape Primitives
- 三角形是最简单的多边形,可以组成复杂多边形
- 保证是平面
- 便于定义内部和外部
- 便于插值
如何将三角形数据显示在屏幕上
简单的方式就是Sampling(采样)
- 采样可简单理解为一个函数,输入为需要采样的位置,而输出为采样的值
- 采样三角形可以定义一个函数,判断屏幕上所有点在不在三角形内
- 判断点在不在三角形内可以用叉乘的方法
- 在采样的时候,其实不需要遍历屏幕所有点,因为三角形并没有这么大。可以通过三角形三个顶点的x,y最大最小值得到一个轴向包围盒(axis aligned bounding box 即 AABB)