世界坐标变换要先缩放、后旋转、再平移的原因

2021年9月2日 10点热度 0条评论 来源: pizi0475

一个三维场景中的各个模型一般需要各自建模,再通过坐标变换放到一个统一的世界空间的指定位置上。 这个过程在 3D 图形学中称作“世界变换” 。 世界变换有三种,平移、旋转和缩放 (实际还有不常用的扭曲和镜像,它们不是affine变换
)。 这三种变换按各种顺序执行,结果是不同的。 可是实际的应用中一般按照 缩放 -> 旋转 -> 平移的顺序进行。  这样做的原因是可以获得最符合常理的变换结果。

比方说,通过世界变换希望获得的结果可能是:

将一个放在原点的物体(比方说可乐罐)移动到(30,50),让它自身倾斜 45 度,再放大 2 倍。

而不希望的结果是:

  1. 和本地坐标轴成角度的缩放(会导致扭曲,像踩扁的可乐罐)。
  2. 绕自己几何中心以外位置的原点的旋转 (地球公转式) 和缩放。

而颠倒了上述变换顺序就会得到这样不自然的结果。

具体的说:

  • 当缩放在旋转之后进行时,会发生现象1。
  • 当缩放和旋转在平移之后进行时会发生现象2。

这时因为:

  • 在物体刚刚放入世界坐标系的时候使用的是本地坐标,也就是本地和全局坐标系的原点和坐标轴都是重合的(当然两者分别使用了左右手坐标系时除外 - 那是BUG),此时所有物体都“把世界坐标系当做自己的本地坐标系”。
  • 而经过了坐标变换之后:
  1. 缩放变换不改变坐标轴的走向,也不改变原点的位置,所以两个坐标系仍然重合。
  2. 旋转变换改变坐标轴的走向,但不改变原点的位置,所以两个坐标系坐标轴不再处于相同走向。
  3. 平移变换不改变坐标轴走向,但改变原点位置,两个坐标系原点不再重合。

这样就可以解释问什么缩放不能在旋转之后,而缩放和旋转都不能在平移之后了。 于是没有问题的顺序只能是 缩放 -> 旋转 -> 平移 。

    原文作者:pizi0475
    原文地址: https://blog.csdn.net/pizi0475/article/details/9840921
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。