前言
本节:透视矩阵
一 平截头体
1. 平截头体
由投影矩阵创建的平截头体(Frustum) - 就是在世界坐标系中圈出来一个棱台(如下棱台)
二 透视除法
-
在顶点渲染中,投影是最后一步
V c l i p = M p r o j e c t i o n ⋅ M v i e w ⋅ M m o d e l ⋅ V l o c a l V _{clip} = M _{projection} · M _{view}· M _{model} · V _{local} Vclip=Mprojection⋅Mview⋅Mmodel⋅Vlocal
projection 采用:透视法 -
透视矩阵(就是投影)
glm::mat4 proj = glm::perspective(glm::radians(45.0f),(float)width/(float)height,0.1f,100.0f);
名称 | 取值 | 说明 |
---|---|---|
可视角度 | glm::radians(45.0f) | 45°的弧度 |
宽高比 | (float)width/(float)height | 是一个比值 |
near | 0.1f | 近值 |
far100.0f | 远值 |
-
projection 过程(5步骤)
a.平截头体(棱台)内的留下,其他物体删除(=删除左右)
b.修改齐次坐标分量 w值. 远的点=w大 近的=w小 ( 这是删除前后);
c.被变换后其他分量,x,y,z的坐标都是在-w和+w之间
d.比较远的物体w值比较大,比较近的物体w比较小
e.x/w y/w z/w 就直接标准化了.(透视除法)
投影矩阵 near 和 far
near如果设置太大,可能会穿模 -
透视除法(第e步骤,见上条)
透视除法(Perspective Division)将x,y,z分别处以w,将4D裁剪坐标变换为3D标准化坐标设备,
这一步在每一个顶点着色器运行的最后被自动执行。
向 量 4 D = [ x y z w ] 向量4D=\left[ \begin{matrix} x \\ y \\ z \\ w \end{matrix} \right] 向量4D=⎣⎢⎢⎡xyzw⎦⎥⎥⎤
变为
向 量 3 D = [ x / w y / w z / w ] 向量3D=\left[ \begin{matrix} x/w \\ y/w \\ z/w \end{matrix} \right] 向量3D=⎣⎡x/wy/wz/w⎦⎤
向量3D中的 x,y,z∈[-w,w]范围之内了.所以 x/w,y/w,z/w一定是标准化.
将特定范围内的坐标转化到标准化设备坐标系**[(-1,1)的区间]**的过程被称之为投影.
没有标准化的图像实际上还是在世界上,只有标准化了才初步到了设备上NDC
上图解析:
a. 在Frustum 之外的–被剔除
b. 在Frustum 之内的–被保留
c. Field of View= 可见区域:(越大=看的区域大)