WebGL 世界坐标系和本地坐标系

990 阅读3分钟

源码:github.com/buglas/webg…

1-基本概念

我们既然要进入三维世界,必须要先有坐标系的概念,而不要只想着如何让物体飞天遁地。

坐标系按照层级分为:

  • 世界坐标系
  • 本地坐标系

当然,坐标系还可以按照类型来分,比如:直角坐标系、极坐标系等,这不是我们这篇要说的重点。

接下来,我们重点来说世界坐标系和本地坐标系。

我通过一个神的传说,给大家引出世界坐标系和本地坐标系的概念。

image.png

天地混沌之时,宇宙只是一个蛋。

这个蛋之所在,就是世界坐标系的原点所在。

十万八千年后,盘古一斧将蛋劈开,这个蛋没了,宇宙也变得无穷无尽了,其中万物初生,世界坐标系里的坐标轴也应运而生,以此定位万物。

然则,宇宙之中,无论是日月星辰,还是花鸟鱼虫,它们皆可自成一界,在这一界中,它们都有着自己的坐标系。

比如:

北京在东经116°20′、北纬39°56′ 上,这个位置就是北京在地球的本地坐标系里的位置。

那北京在宇宙里的世界坐标位是什么呢?这需要知道宇宙的坐标原点在哪里。

至于宇宙的坐标原点在哪里,我就不再做深度探讨了,不然能扯到释迦摩尼的缘起性空和爱因斯坦的相对论上去。

接下来拿变换举例子。

2-认识世界坐标系、本地坐标系中的点位关系

已知:

  • 世界坐标系[O1;i1,j1,k1]
  • 点P
  • 点P所处的本地坐标系是[O2;i2,j2,k2]
  • 世界坐标系[O1;i1,j1,k1]∋本地坐标系[O2;i2,j2,k2]

解释一下:

[O;i,j,k]中:

  • O 是坐标原点
  • i,j,k 是坐标向量

这是空间直角坐标系的书写方式,大家可在高中数学的空间几何部分找到。

初学three.js 的同学,往往很难玩转其中矩阵变换、欧拉、四元数、世界坐标位、本地坐标位等。

若大家把我当前所说的这块搞懂了,可以攻克一个很重要的难点。

接下我们继续围绕点P 来说事。

提问1:

我说点P 的坐标位是(x,y,z),可否找到点P?

答:不可。

因为我没说(x,y,z) 是在世界坐标系[O1;i1,j1,k1]里的位置,还是在本地坐标系是[O2;i2,j2,k2]里的位置。

提问2:

点P 的世界坐标位是(x,y,z),可否找到点P?

答:可

接下来我们说重点啦。

提问3:

点P 的本地坐标位是(x,y,z),可否找到点P?若可以,求点P的世界位。

答:可

解点P的世界位:

根据空间向量分解定理。

由世界坐标系[O1;i1,j1,k1]可解析出四维矩阵m1:

[    i1.x,j1.x,k1.x,0,    i1.y,j1.y,k1.y,0,    i1.z,j1.z,k1.z,0,    O1.x,O1.y,O1.z,1]

同理,由本地坐标系[O2;i2,j2,k2]可解析出四维矩阵m2:

[    i2.x,j2.x,k2.x,0,    i2.y,j2.y,k2.y,0,    i2.z,j2.z,k2.z,0,    O2.x,O2.y,O2.z,1]

点P的世界位是:

m1*m2*(x,y,z)