【GAMES101】04 Transformation 视图变换、投影变换

view/camera transformation

1 相机初始化

在这里插入图片描述

2 相对变换

相对变换:只要保证相机和物体的相对位置不变,那整体就不发生改变。

默认相机放在(0, 0, 0), 看向 -z 方向

在这里插入图片描述

3 如何做到步骤2?

相机位置从 e 到原点,观测方向从 g 到 -z,相机向上方向(向上方向:比如方向盘上放一个棍,棍的指向随方向盘转动而变化)从 t 到 Y,(g 叉乘 x)方向旋转到 X。

在这里插入图片描述

4 计算

在这里插入图片描述

可以看到, R v i e w − 1 R_{view}^{-1} Rview1 如果右乘一个向量 X: [ 1   0   0   0 ] T [1\ 0\ 0\ 0]^{T} [1 0 0 0]T,得到(g叉乘t)向量,同时可以验证得到从向量 Y: [ 0   1   0   0 ] T [0\ 1\ 0\ 0]^{T} [0 1 0 0]T 旋转到 t 方向,从向量 Z 旋转到 -g 方向。因为旋转矩阵的逆等于旋转矩阵的转置(偶旋转矩阵是正交矩阵),得到旋转矩阵 R v i e w R_{view} Rview

5 总结

在这里插入图片描述

Projection Transformation 投影变换

正交投影和透视投影

在这里插入图片描述
右边透视投影,近大远小。

在这里插入图片描述
右边正交投影即假设把透视投影的相机拿的无限远。

正交投影

1 简单做法

简单做法:直接去掉 z,保留x y坐标,再把 x y 坐标变到-1~1之间。

2 正规做法

(1) 长方体中心平移到原点;
(2) X Y Z 变成 -1~1。
在这里插入图片描述
(注:看的是 -z 方向,所以物体越远,z 越小)

3 计算

在这里插入图片描述

注:opengl左手坐标系
在这里插入图片描述

透视投影

在这里插入图片描述

透视变换过程

(1) 把左边的frustnum挤压成右边的cuboid的形状
(2) 从远平面到近平面左正交变换

规定:1. 近平面永远不变
2. 远平面的 z 不变
3. 远平面的中心点挤压完还是中心点
在这里插入图片描述

挤压过程计算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
利用:
在这里插入图片描述
(1) 近平面所有点不变, (x y n 1)挤压完还是(x y n 1),这里 n 是指近平面的 z 坐标
(2) 远平面的 z 不变,远平面中心点 (0 0 f) 挤压完还是 (0 0 f)

利用(1)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值