three.js所 - 旋转围绕一定的轴的球(Three.js - Rotating a spher

2019-09-01 15:10发布

我有个问题。 在three.js所,我想旋转23.5度的视角倾斜的球(地球)周围轴。 我发现sphere.rotation.x,sphere.rotation.y和sphere.rotation.z,但是当我在正确的比例将它们结合起来,球的旋转是相当奇怪 - 它没有永久的旋转轴。 我想我需要一个像sphere.rotation.vector功能(1,0,-1)。 有谁知道正确的语法如何调用该函数又是怎样的?

非常感谢解答!

Answer 1:

您需要使用四元数这一点。 此视频介绍了四元数是什么,以及它们是如何在3D图形应用。

您可以构建这样的四元数:

quaternion = new THREE.Quaternion().setFromAxisAngle( axisOfRotation, angleOfRotation );

然后,你把它应用到你的对象是:

object.rotation.setEulerFromQuaternion( quaternion );

您也可以通过使用对象层次实现这一目标。 例如,你可以使一个Object3D()实例和23.5度的视角倾斜,然后创建一个球体(地球),并把它添加到倾斜的对象。 然后,将球体绕倾斜Y轴。 然而,四元数是解决这个的最佳工具。



Answer 2:

你不必了解欧拉如何角或四元合作,做你想做的。 您可以使用

Object3D.rotateOnAxis( axis, angle );
Object3D.rotateOnWorldAxis( axis, angle );

确保axis是单位向量(长度为1),并且angle是弧度。

Object3D.rotateOnAxis( axis, angle )对对象空间的轴线旋转。

Object3D.rotateOnWorldAxis( axis, angle )在世界空间的轴线旋转。

three.js所r.104



Answer 3:

var quaternion = new THREE.Quaternion();
var object = scene.getObjectByName('xxx');
function render(){
    quaternion.setFromAxisAngle(new THREE.Vector3(0, 1, 0).normalize(), 0.005);
    object.position.applyQuaternion(quaternion);
}

three.js所的版本是86,请参阅上codepen完整的例子 。



Answer 4:

您可以使用日“ObjectControls”的ThreeJS模块,使您可以旋转单个对象(或一组),而不是场景旋转的球体。

包括libary:

然后

功控制=新THREE.ObjectControls(照相机,renderer.domElement,yourMesh);

你可以在这里在这里找到现场演示: https://albertopiras.github.io/threeJS-object-controls/

这里是回购: https://github.com/albertopiras/threeJS-object-controls 。

希望这可以帮助



文章来源: Three.js - Rotating a sphere around a certain axis