Babylon.js 第30章 网格变换

本文深入探讨Babylon.js中网格的变换,包括定位网格、旋转方法、自定义旋转、四元数旋转、对齐目标轴、坐标变换、烘培转换和使用父子网格等,详细解析了各种旋转约定和操作技巧。
摘要由CSDN通过智能技术生成

 

目录

一、定位网格

二、网格旋转

1、旋转方法

 2、自定义旋转

3、旋转四元数

4、旋转约定

YXZ:

ZXY:

ZXZ:

三、对其目标轴

 四、坐标变换

五、烘培转换

六、使用父子网格

1、使用父子网格关系 

2、添加父网格

 七、设置枢纽中心

三种沿轴旋转 


一、定位网格

网格其局部原点位于世界空间 (-1, 2, 1),即 mesh.position 位于 (-1, 2, 1);

设置网格位置方法:

mesh.position = new Vector3(2, 3, 4);//(2, 3, 4)
//(-1 + 2, 2 + 3, 1 + 4) = (1, 5, 5)
mesh.position.addInPlace(new Vector3(2, 3, 4)); 
mesh.translate(new BABYLON.Vector3(2, 3, 4), 1,
     BABYLON.Space.WORLD); //(-1 + 2, 2 + 3, 1 + 4) = (1, 5, 5)

mesh.position.x = 2; //(2, 2, 1)
mesh.position.y = 3; //(2, 3, 1)
mesh.position.z = 4; //(2, 3, 4)

mesh.position.x += 2; //(-1 + 2, 2, 1) = (1, 2, 1)
mesh.position.y += 3; //(1, 2 + 3, 1) = (1, 5, 1)
mesh.position.z += 4; //(1, 5, 1 + 4) = (1, 5, 5)

//生成的位置取决于网格的方向。在不知道网格旋转的情况下,不可能给出结果位置。
mesh.translate(new BABYLON.Vector3(2, 3, 4), 1, BABYLON.Space.LOCAL);
mesh.setPositionWithLocalVector(new BABYLON.Vector3(2, 3, 4));
mesh.locallyTranslate(new BABYLON.Vector3(2, 3. 4));

positionsetPositionWithLocalVector的向量是位置向量。translatelocalTranslateaddInPlace的那些是方向向量。

二、网格旋转

1、旋转方法

旋转沿着轴设定: 

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

 beta 围绕局部 y 轴旋转,然后 alpha 围绕局部 x 轴旋转,最后 gamma 围绕局部 z 轴旋转。

 2、自定义旋转

mesh.rotation.addRotation(Math.PI / 2, 0, 0)
    .addRotation(0, 0, Math.PI / 3).addRotation(0, Math.PI / 8);

将形成网格的当前旋转,进一步围绕 x 轴旋转 π/2,然后围绕 z 轴旋转 π/3,然后围绕 y 轴旋转 π/8。

指定轴的方向矢量和角度是产生旋转的另一种方法。这就是在世界空间或局部空间中使用旋转方法的方式。

mesh.rotate(new BABYLON.Vector3(1, 0 -1), Math.PI / 3, BABYLON.Space.WORLD);
mesh.rotate(new BABYLON.Vector3(1, 0 -1), Math.PI / 3, BABYLON.Space.LOCAL);

3、旋转四元数

四元数是一个四维向量 (x, y, z, w),要成为旋转四元数,它必须是单位向量,即 x 2 + y 2 + z 2 + w 2 = 1,我们已经使用了 rotate 来设置网格的旋转四元数。旋转属性相同,rotationQuaternion属性以局部原点为旋转中心设置网格的方向。除了旋转,您还可以通过使用直接获得旋转四元数

mesh.rotationQuaternion = new BABYLON.Quaternion
    .RotationAxis(new BABYLON.Vector3(1, 0, -1), Math.PI / 3);

 RotationAxis方法的参数是轴方向和角度。轴方向矢量应在世界空间中表示。任何旋转四元数都可以转换为欧拉角以与mesh.rotation一起使用,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值