我有一个问题。在Three.js中,我想让一个球体(地球)绕23.5度倾斜的轴旋转。我找到了球体的rotation.x、rotation.y和rotation.z属性,但是当我按正确比例组合它们时,球体的旋转非常奇怪——它没有永久的旋转轴。我认为我需要一个像sphere.rotation.vector(1,0,-1)这样的函数。有人知道这个函数叫什么名字以及正确的语法是什么吗?
非常感谢答案!
我有一个问题。在Three.js中,我想让一个球体(地球)绕23.5度倾斜的轴旋转。我找到了球体的rotation.x、rotation.y和rotation.z属性,但是当我按正确比例组合它们时,球体的旋转非常奇怪——它没有永久的旋转轴。我认为我需要一个像sphere.rotation.vector(1,0,-1)这样的函数。有人知道这个函数叫什么名字以及正确的语法是什么吗?
非常感谢答案!
你不需要理解欧拉角或四元数的工作原理来完成你想要做的事情。你可以使用
Object3D.rotateOnAxis( axis, angle );
Object3D.rotateOnWorldAxis( axis, angle );
请确保axis
是一个单位向量(长度为1),angle
以弧度为单位。
Object3D.rotateOnAxis(axis, angle)
在对象空间中围绕轴旋转。
Object3D.rotateOnWorldAxis(axis, angle)
在世界空间中围绕轴旋转。
three.js r.104
quaternion = new THREE.Quaternion().setFromAxisAngle( axisOfRotation, angleOfRotation );
object.rotation.set( new THREE.Euler().setFromQuaternion( quaternion ) );
Object3D()
实例并将其倾斜23.5度,然后创建一个球体(地球)并将其添加到倾斜的对象中。然后,球体将围绕倾斜的Y轴旋转。然而,四元数是解决这个问题的最佳工具。setEulerFromQuaternion()
方法已被移除(参见:https://github.com/mrdoob/three.js/wiki/Migration#r58--r59)。现在应该使用以下代码替换第二行:`object.rotation = new THREE.Euler().setFromQuaternion( quaternion );` - konturvar 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 上查看完整示例。
Quaternion
、Vector3
和 Euler
?请在渲染循环之外创建一个四元数的实例。在渲染循环中,使用以下方法: planet.position.applyQuaternion( quaternion );
同时,在循环之外调用一次 scene.getObjectByName()
方法。 - WestLangley您可以使用ThreeJS的“ObjectControls”模块旋转您的球体,该模块允许您旋转单个对象(或组),而不是场景。
包含库:
然后
var controls = new THREE.ObjectControls(camera, renderer.domElement, yourMesh);
您可以在此处找到实时演示:https://albertopiras.github.io/threeJS-object-controls/
这是存储库:https://github.com/albertopiras/threeJS-object-controls。
希望这有所帮助