1-基本概念
我们既然要进入三维世界,必须要先有坐标系的概念,而不要只想着如何让物体飞天遁地。
坐标系按照层级分为:
- 世界坐标系
- 本地坐标系
当然,坐标系还可以按照类型来分,比如:直角坐标系、极坐标系等,这不是我们这篇要说的重点。
接下来,我们重点来说世界坐标系和本地坐标系。
我通过一个神的传说,给大家引出世界坐标系和本地坐标系的概念。
天地混沌之时,宇宙只是一个蛋。
这个蛋之所在,就是世界坐标系的原点所在。
十万八千年后,盘古一斧将蛋劈开,这个蛋没了,宇宙也变得无穷无尽了,其中万物初生,世界坐标系里的坐标轴也应运而生,以此定位万物。
然则,宇宙之中,无论是日月星辰,还是花鸟鱼虫,它们皆可自成一界,在这一界中,它们都有着自己的坐标系。
比如:
北京在东经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)