视图矩阵的推导(2)

先来学习下uvn坐标系,如下图所示:

这里写图片描述

如图所示,我们定义摄像机的位置为:(-2,1,2)
目标点位置为(-1,2,3)。

然后我们明确一下,uvn坐标系统的uvn到底是什么?
u——右向量,相当于+x
v——上向量,相当于+y
n——朝向向量,相当于+z

u向量:这里是通过y叉乘n得到,y向量为(0,1,0),n向量为目标点-减去摄像机的位置点,即(-1,2,3)-(-2,1,2)=(1,1,1),经过叉乘我们可以得到u向量为(1,0,-1)。这个你可以通过这行代码验证:

glm::vec3 u = glm::cross(glm::vec3(0, 1, 0), glm::vec3(1, 1, 1));
cout << u.x << " " << u.y << " " << u.z << endl;

v向量:有了u向量,以及n向量,那么通过n叉乘u得到v向量,即上向量。这里n(1,1,1),u(1,0,-1),两者叉乘得到v(-1,2,-1)。
你可以通过代码验证:

glm::vec3 u = glm::cross(glm::vec3(1, 1, 1), glm::vec3(1, 0, -1));
cout << u.x << " " << u.y << " " << u.z << endl;

最终我们得到了下面的新的坐标系:
这里写图片描述

下面,我们就要介绍一下,世界坐标系中的点,比如P(1,2,3),在新的坐标系的坐标是什么了?我们首先列出下面的等式:
这里写图片描述
我们要求得(x’,y’,z’)即可。
这里写图片描述
ok,此时我们得到了世界中的一个点(1,2,3),在新的坐标系下的坐标为(-1,0,2)。

我们再看看上面的得到的uvn坐标系是不是有问题呢?有问题,因为没有把摄像机的位置算上去,我们的到的uvn坐标系是相对于原点的。那么下一步就要将这个uvn坐标系平移到摄像机的位置,如何做到呢?

这里写图片描述

u向量的平移:将(1,0,-1)+(-2,1,2)=(-1,1,1)
v向量的平移:将(-1,2,-1)+(-2,1,2)=(-3,3,1)
n向量的平移:将(1,1,1)+(-2,1,2)=(-1,2,3)
写成矩阵的形式为:
这里写图片描述
到这里我们才了解,网址中https://learnopengl.com/#!Getting-started/Camera的视图矩阵的推导。
我们还要说明下,上图中的R^-1,以及T^-1,怎么求,由于我们上面的得到R矩阵没有正交化,而在图形学中,一般是求正交矩阵,然后在单位化,这样R的逆矩阵,就等于它的转置矩阵了。而平移矩阵的逆,正好是其相反的操作,只要将平移的量取反即可。到此,我们就讨论完uvn系统,以及mvp矩阵中v矩阵的推导了。而这一步的迈出,必将为m矩阵,以及坐标系统的变换提供坚实的基础,这样可以更好的理解同一个向量在不同坐标系统下的变换过程。
同时,我们在线性代数中学习的,坐标系统、正交基、正交化、标准化,等概念,也再次在坐标变换中得到了实际的应用。当是学习并不太知道这将会用到什么地方,现在就明白了。
在图形学中,描述物体的空间位置,除了最大的世界坐标系,还有局部坐标系、视图(相机/眼睛)坐标系、那么不同的坐标系,都离不开三个基向量,它们是互相垂直的(也即是正交的)。
这样同一个向量,在不同的坐标系下,就有了不同的坐标。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值