Babylon三维坐标系

令狐冲 LV9
2023-05-31 · 63 阅读
Babylon三维坐标系1. 世界坐标系
Babylon.js使用两个参考坐标系,世界坐标系和局部坐标系。世界坐标系就是我们在数学作图时常常画的那个坐标系,原点(0,0,0);而局部坐标系就是我们设定的任意点(X,Y,Z),通常这个点就是我们模型的本身的几何中心。

在建立了坐标系之后,我们就可以描述我们在当前坐标系的行为了,那么我们对方向和度量的描述那就是矢量了。而在babylonjs中,所有位置、旋转和缩放都使用新的BABYLON.Vector3(x,y,z)作为3维向量值,并且可以对位置、旋转和缩放单独设置。

世界坐标系是一个永远不变的坐标系,相机、场景中的物体都是在世界坐标系中的。

你可以把他理解为一个世界的中心,他的xyz坐标轴是符合左手坐标系的规则的。

例如我们可以把北京当做世界的中心,上海就位于北京的东南边。


当我们说把物体放到某个位置时,一定是让他处于世界坐标系的某个位置哦。

l babylonjs设置物体的位置

先看看效果


位置是用向量来表示,如下代码


pilot.position =new BABYLON.Vector3(2, 3, 4);


这是把pilot这个物体放到世界坐标系的(2, 3, 4)这个位置。停下来30s,仔细想一下,它在哪里。

上面的代码等价于:



pilot.position.x =2;

pilot.position.y =3;

pilot.position.z =4;



l babylon.js 怎么转换成右手坐标系?
babylon.js 是左手坐标系,但是3dmax 导出的模型是右手坐标系 怎么讲babylon.js 转换成右手坐标系?

2. 局部坐标系

局部坐标系的原点始终位于物体的创建中心,所以说局部坐标系永远和物体绑定在一起,物体的旋转和放大中心都位于局部坐标系的原点。

例如先下面的一个美女,建模的时候,她的局部坐标系的中心位置头部中心,那么这个模型围绕局部坐标系的旋转,变大缩小,就是围绕这个中心的。


如果上面一个美女,我们把他放到上海,那么是说,将她的放在世界坐标系的上海,而局部坐标系永远是和她自己绑定的。只有她一个人用她自己的局部坐标系,她自己的局部坐标系对别人来说没有意义。
3. babylonjs旋转物体

在3D空间中的旋转总是很复杂的,比追女孩子要容易一些。你需要知道物体旋转的顺序以及它是如何被应用于的物体旋转,同时你也需要知道该次旋转是对应哪个坐标系而产生改变的。

在BabylonJs中,物体的旋转的使用方式如下:



pilot.rotation =new BABYLON.Vector3(alpha, beta, gamma);


或者



pilot.rotation.x = alpha; // 围绕x轴旋转

pilot.rotation.y = beta; // 围绕y轴旋转

pilot.rotation.z = gamma; // 围绕z轴旋转



其中α,β和γ是表示弧度的角度。3.14弧度表示180度。

在这里三个旋转给出了三个不同的轴,你可能会有疑问——“它适用于哪一个参照系?它是以什么样的顺序来描述的?以及它在哪个方向?”。



l 以局部坐标轴为基准旋转

物体最终的姿态,和旋转的顺序有关,例如先围绕y轴旋转,再围绕x轴旋转,和先围绕x轴旋转,再围绕y轴旋转是不一样的。
下图第一幅图是原始状态,第二幅图图显示的是按局部坐标轴的Y轴(绿色)正方向旋转π/ 2。

ok,现在问题来了,围绕y轴旋转90度,看上面的第二幅图,为什么红色坐标是朝左边,而不是朝右边的呢?方法马上来了:
在左手坐标系中,确定旋转轴后,左手握成拳头,拇指指向旋转轴的正方向,其余手指的弯曲方向即为旋转的正方向,跟手指弯曲方向一致的旋转记为正向,相反则为负向。看一下下图的左边这幅图,你就知道为什么红色坐标是朝左边,而不是朝右边了。


第三幅图,在第二幅图的基础上按局部坐标轴的X轴(红色)正方形旋转π/ 2。第四幅图,在第三幅图的基础上,按局部坐标轴的Z轴(蓝色)旋转π/ 2。

你可能会迷惑,其中有的图有2个蓝色,2个绿色坐标,以最长的为准就可以了。短的表示前一个状态的位置。


1. 本站所有资源来源于用户上传和网络,仅作为演示数据,如有侵权请邮件联系站长!
2. 盗版,破解有损他人权益和违法作为,请各位站长支持正版!
回复

举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则