【图形学】08 3D坐标系的变换(一)

1、流程中图片的变换

  世界变换 -> 摄像机变换 ->投影变换 ->视口变换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zEzidd3x-1658471090944)(assets/image-20220521160840535.png)]

2、摄像机变换

  对摄像机的描述,有三个三个向量就能定义一个摄像机的位置和摄像方位:

  • Position e ⃗ \vec{e} e
  • gaze g ^ \hat{g} g^
  • Up t ^ \hat{t} t^

M v i e w = R v i e w T v i e w M_{view} = R_{view}T_{view} Mview=RviewTview(摄像机的变换可以给分解为旋转和平移两种变换)。

  • 把整个世界都移动,让摄像机的位置处于原点;再对世界旋转,把摄像机的 gaze 对到 z轴上。但是,对于把 gaze 旋转到 z 轴,Up 旋转到 y 轴。这是一件很难的事情:所以,我们考虑求摄像机的旋转矩阵的逆矩阵,因为本身它的 基向量 就是 正交向量。所以它的逆向量就是 他的转置矩阵。

T v i e w = [ 1 0 0 − x e 0 1 0 − y e 0 0 1 − z e 0 0 0 1 ] R v i e w = [ x g ^ × t ^ x t x − g − x e y g ^ × t ^ y t y − g − y e z g ^ × t ^ z t z − g − z e 0 0 0 1 ] T_{view}=\left[ \begin{matrix} 1& 0& 0& -x_e\\ 0& 1& 0& -y_e\\ 0& 0& 1& -z_e\\ 0& 0& 0& 1\\ \end{matrix} \right] \\ \\ R_{view}=\left[ \begin{matrix} x_{\hat{g}\times \hat{t}}& x_t& x_{-g}& -x_e\\ y_{\hat{g}\times \hat{t}}& y_t& y_{-g}& -y_e\\ z_{\hat{g}\times \hat{t}}& z_t& z_{-g}& -z_e\\ 0& 0& 0& 1\\ \end{matrix} \right] Tview= 100001000010xeyeze1 Rview= xg^×t^yg^×t^zg^×t^0xtytzt0xgygzg0xeyeze1

3、投影变换

image-20220525161949814   对于摄像机的视野,我们有两种投影方式,一个是正交投影(Orthographic Projection),另一个是透视投影(Perspective Projection)。我们使用的是后者,投影的视野形状是一个**视椎体**(Frustum),这样就能有一个近大远小的视觉效果。

①正交投影

  要做的操作比较简单:首先平移到原点,然后将整个投影的视野缩放到一个小立方体里。
在这里插入图片描述

②透视投影

  我们是把整个的 视椎体 挤压成半个立方体,计算的到 视椎体 中到立方体中的映射。而《GAMES101》保持近截面不变,远截面挤压成 近截面 的大小 ,让 视野 挤压成一个立方体。然后剩下的做法就和 正交投影一样的了。
在这里插入图片描述

其中,视椎体中任意坐标的 x,y 值都很容易用 相似三角形 来获得

然后,我们在齐次坐标系中,四个数都同时乘以一个数,实际上整个坐标都没有改变。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K5j80KzD-1658471090945)(assets/image-20220525171153215.png)]

根据我们投影的向量的变化,我们能够反推出这个变换矩阵的部分的数值,留下第三行还暂时不能确定。

我们又利用这个挤压变换过程两个性质:任何在近截面点的 z 值不会变化;任何在远截面的点的 z 值不会变换。

带入近截面的点(其坐标 z值 一定是 n):

带入远截面的点(其坐标 z值 一定是 f):

这样,我们的两个方程,就能求到 M p e r s p − > o r t h o M_{persp->ortho} Mpersp>ortho 这个变换矩阵的所有项了。之后就再做正交投影就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值