Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绕地轴旋转的地球_Javascript_Three.js - Fatal编程技术网

Javascript 绕地轴旋转的地球

Javascript 绕地轴旋转的地球,javascript,three.js,Javascript,Three.js,我试着让地球绕着倾斜的轴旋转三周。我找到了,我试图在我的代码中使用它,但它没有任何作用 当我执行这个代码时,行星就在那里,根本不旋转。我对四元数是什么或它是如何工作的并没有一个确切的把握,所以我不确定哪里出了问题 function rotateAroundAxis(object, axis, radians) { var vector = axis.normalize(); var quaternion = new THREE.Quaternion().setFromAxisAn

我试着让地球绕着倾斜的轴旋转三周。我找到了,我试图在我的代码中使用它,但它没有任何作用

当我执行这个代码时,行星就在那里,根本不旋转。我对四元数是什么或它是如何工作的并没有一个确切的把握,所以我不确定哪里出了问题

function rotateAroundAxis(object, axis, radians) {
    var vector = axis.normalize();
    var quaternion = new THREE.Quaternion().setFromAxisAngle(vector, radians);
    object.rotation = new THREE.Euler().setFromQuaternion( quaternion );
}

earthAxis = new THREE.Vector3(Math.cos(23.4*Math.PI/180), Math.sin(23.4*Math.PI/180), 0);

function render() {
    stats.update();
    step += 0.02;
    rotateAroundAxis(earth, earthAxis, step);
}

首先,需要通过对球体应用变换将其几何体倾斜23.4度

var radians = 23.4 * Math.PI / 180; // tilt in radians
mesh.geometry.applyMatrix( new THREE.Matrix4().makeRotationZ( - radians ) );
然后,要在对象空间中围绕地球的轴旋转地球,请首先规范化正在旋转的轴

earthAxis = new THREE.Vector3( Math.sin( radians ), Math.cos( radians ), 0 ).normalize();
然后在渲染函数中,执行以下操作:

earth.rotateOnAxis( earthAxis, 0.01 ); // axis must be normalized

three.js r.69

只是一些健全性检查-您正在requestAnimationFrame循环中调用render,对吗?rotateAroundAxis函数的来源是什么?是的,我用rotateAroundAxis函数更新了原始帖子。我可以发布整个代码,但它相当长。首先:
earthAxis.normalize()然后在循环中:
地球旋转轴(地球轴,0.02)@WestLangley非常感谢!!这很好,很简单,所以这很有效,它绕着向量旋转,但是从垂直的位置。我需要的是将地球倾斜23.4度,然后围绕着这个似乎不可能做到的方向旋转。请以后避免在问题得到回答和接受后改变它。最好换一个新职位。