计算机图形学.李胜.05.投影(2)
OpenGL 中的投影矩阵
- vmath:Frusutm()
- 其中
含义如下
- 其中
表示6个裁剪面- 实际的裁剪面
使用的是绝对值- 因为一定是负数
- 实际的裁剪面
- 坐标变换:
- 现实坐标系中的视见体 转化为
OpenGL中的立方体
- 现实坐标系中的视见体 转化为
OpenGL中的立方体
- 投影中心
- 投影平面
- 推导过程中裁剪面使用单词首字母代替
推导一:投影角度
- 投影+规范化
(1) 投影
- 将视见体中的点投影到
上 - 以俯视图为例推导坐标关系(
)
- 利用侧视图可以得到
(2) 规范化
以
的推导为例同理
写成矩阵的形式
为了计算的方便,我们把分母放到最终的齐次坐标化简中去
(3) 记录深度信息
我们可以看到,
并没有被用上,我们可以用来记录深度信息- 深度值越远越大
推导二:变换角度
- 错切+缩放+规范化
(1) 错切
- 错切至关于 z 轴中心对称
方向: 方向:
(2) 缩放
- 缩放的结果
- 因此,对应着投影平面
的是后裁剪面
- 因此,对应着投影平面
- 等价于
(化成标准齐次坐标是一样的)
- 以上形成的视见体其实是一个棱台
- 顶点为
底面为 的四棱锥被平面 截成的四棱锥
- 顶点为
(3) 透视=>平行
- 将透视投影的规范视见体变换为平行投影的规范视见体
- 将上述四棱锥转换为长方体
- 推导过程和 推导一的投影 相似
- 得到矩阵如下
- 将第三行用于记录深度信息
(4) 平移
(5) 尺缩
(6) 深度变换
- 深度越大
越大
(7) 结果
- 与上面一致