世界坐标系到观察坐标系的变换步骤_《3D数学基础》提炼总结(九)矩阵和线性变换...

本文探讨了变换物体与变换坐标系的基本概念,并分析了两者之间的等价性。通过实例说明了变换物体和变换坐标系的实际应用,特别是针对游戏开发中的碰撞检测进行了详细解释。此外,还介绍了2D和3D环境下的旋转变换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、变换物体与变换坐标系

在讨论变换前,必须要搞清楚到底要变换什么。

考虑2D中的例子“将以物体顺时针旋转20度”。变换物体(本例中为旋转),以为这旋转物体上所有的点,这些点将被移动到一个新的位置。我们使用同一坐标系来描述变换前和变换后点的位置。

现在,和变换坐标系的概念进行比较。旋转坐标系时,物体上的点实际没有移动,我们只是在另一个坐标系中描述它的位置而已。

bce438b05c19a9e7cad1f9e5e6421612.png

我们将证明这两种变换在某种意义上是等价的,但现在,先看看它们各自的优点

变换物体的用处非常明显。例如,为了渲染一辆车,必须将点从车的物体坐标系变换到世界坐标系,接着到摄像机坐标系。那么为什么还要变换坐标系呢?乍看起来,把坐标系旋转到这个奇怪的位置似乎并没有什么价值。观察下图就可以发现,其实旋转坐标系就能起到很好的作用。

下图展示了一把步枪,正在向汽车发射子弹,如左边的图所示,我们一开始就知道世界坐标系中枪的位置和子弹的弹道。现在,想象一下世界坐标系被旋转到和车的物体坐标系重合的位置,而与此同时保持车、枪、子弹弹道不动。这样,我们得到了枪和子弹弹道在车的物体坐标系中的坐标,接着可以作碰撞检测以检查子弹是否会击中汽车了。

当然,也可以将车旋转到世界坐标系,在世界坐标系中作碰撞检测,但这要花费更多的时间,因为车的模型可能有大量的顶点和三角形,计算量太大。现在,不必担心实际变换的细节问题,这正是本章的剩余部分要对付的。只需记住可以变换问题,也可以变换坐标系。某些情况下一种方法比另一种更合适。

5d34b9da04e19025c2fc2ec8a9adc2cc.png

对于两种变换保持一种概念上的区别还是有必要的,有些情况下需要进行物体变换,另外一些情况下则需要进行坐标系变换。然而,这种变换实际上是等价的,将物体变换一个量等价于将坐标系变换一个相反的量。

二、旋转

1.2D中的旋转

在2D环境中,物体只能绕某个点旋转,因为现在暂不考虑平移,这里我们进一步限制物体,使其只绕原点旋转。2D中绕原点的旋转只有一个参数:角度

adfab2c54f8f94bdc534caf6797064c2.png

,它描述了旋转量。逆时针旋转经常(不是必须)被认为是正方向,顺时针方向是负方向。下图展示了基向量 p,q绕原点旋转,得到新的基向量

e1f0b09f37b77bffbd6fe82bcc6e2e16.png

现在我们知道了旋转后基向量的值,就可以以公式的形式构造矩阵如下。

cca0afa612637b0d39fe177bce90f549.png

b9078cb3d965b93a88db64651df815a9.png

2.3D中绕坐标轴的旋转

在3D场景中,绕轴旋转而不是点(此时,轴指的是旋转所绕的直线,不一定是笛卡尔坐标轴x,yz).再次声明,这里暂不考虑平移,所以只讨论旋转轴穿过原点的情况。

绕轴旋转

3f5de300aafc82ad3d56a5f962d7d6c2.png

时,必须知道哪个方向被认为“正”,哪个方向被认为“负”,左手坐标系中定义此方向的规则为左手法则。首先,要明确旋转轴指向哪个方向。当然,旋转轴在理论上是无限延伸的,但我们还是要认为它有正端点和负端点。与笛卡尔坐标轴定义坐标系相同,左手法则是这样的:伸出左手,大拇指向上,其余四指弯曲。大拇指指向旋转轴的正方向,此时,四指弯曲的方向就是旋转的正方向。此时,四指弯曲的方向就是旋转的正方向,此时,四指弯曲的方向就是旋转的正方向。如下图所示。

0518d7403c636fcbc5ca65fc1a5d2346.png

2af7bfc41a4d4b3282ae3ce256e3cba2.png

最为常见的旋转是绕某坐标轴的简单旋转。让我们从绕x 轴旋转开始。

c2ddb428a4d620372b27a65108ff96c5.png

求出旋转后的基向量,可以得到矩阵。

94373657e1d1ceeb7b4cb5d6603c8377.png

与绕y轴的3D旋转与之类似,如图

804177a3c0b55ac926fa3f1a0b7a945c.png

可得绕y轴旋转的矩阵。

9d3fc4045a2fc046a831b17d675da7bc.png

最后是绕z轴的旋转如公式所示

2c21db16dd2fe5322cad3abd9728c051.png

3.3D中绕坐标轴的旋转

当然也能绕3D中的任意轴旋转。因为这里不考虑平移,可以假设旋转轴通过原点。这种旋转比绕坐标轴的旋转更复杂也更少见。用单位向量n描述旋转轴,和前面一样用

08af2d780da15c157b15b5f28d184843.png

描述旋转量。

d5aff4603e3b33f165d56e96c166c0c2.png

v'是向量v绕轴n旋转后的向量。让我们看看能否用v,n

14526309524166f9696f72849b189eeb.png

表示v‘。我们的想法是在垂直于n的平面中解决这个问题,那么这就转换为了一个简单的2D问题。为了做到这一点,将v分解为两个分量:

ec49a6a5c8f262293d96629b647132eb.png

e9d5fac9f61942994b88a4799dae78ec.png

-------------------------------------------------------------------------------------------暂时发布还没有写完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值