我有个问题。 在three.js所,我想旋转23.5度的视角倾斜的球(地球)周围轴。 我发现sphere.rotation.x,sphere.rotation.y和sphere.rotation.z,但是当我在正确的比例将它们结合起来,球的旋转是相当奇怪 - 它没有永久的旋转轴。 我想我需要一个像sphere.rotation.vector功能(1,0,-1)。 有谁知道正确的语法如何调用该函数又是怎样的?
非常感谢解答!
我有个问题。 在three.js所,我想旋转23.5度的视角倾斜的球(地球)周围轴。 我发现sphere.rotation.x,sphere.rotation.y和sphere.rotation.z,但是当我在正确的比例将它们结合起来,球的旋转是相当奇怪 - 它没有永久的旋转轴。 我想我需要一个像sphere.rotation.vector功能(1,0,-1)。 有谁知道正确的语法如何调用该函数又是怎样的?
非常感谢解答!
您需要使用四元数这一点。 此视频介绍了四元数是什么,以及它们是如何在3D图形应用。
您可以构建这样的四元数:
quaternion = new THREE.Quaternion().setFromAxisAngle( axisOfRotation, angleOfRotation );
然后,你把它应用到你的对象是:
object.rotation.setEulerFromQuaternion( quaternion );
您也可以通过使用对象层次实现这一目标。 例如,你可以使一个Object3D()
实例和23.5度的视角倾斜,然后创建一个球体(地球),并把它添加到倾斜的对象。 然后,将球体绕倾斜Y轴。 然而,四元数是解决这个的最佳工具。
你不必了解欧拉如何角或四元合作,做你想做的。 您可以使用
Object3D.rotateOnAxis( axis, angle );
Object3D.rotateOnWorldAxis( axis, angle );
确保axis
是单位向量(长度为1),并且angle
是弧度。
Object3D.rotateOnAxis( axis, angle )
对对象空间的轴线旋转。
Object3D.rotateOnWorldAxis( axis, angle )
在世界空间的轴线旋转。
three.js所r.104
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完整的例子 。
您可以使用日“ObjectControls”的ThreeJS模块,使您可以旋转单个对象(或一组),而不是场景旋转的球体。
包括libary:
然后
功控制=新THREE.ObjectControls(照相机,renderer.domElement,yourMesh);
你可以在这里在这里找到现场演示: https://albertopiras.github.io/threeJS-object-controls/
这里是回购: https://github.com/albertopiras/threeJS-object-controls 。
希望这可以帮助