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 Three.js如何使用四元数旋转摄影机_Javascript_Three.js - Fatal编程技术网

Javascript Three.js如何使用四元数旋转摄影机

Javascript Three.js如何使用四元数旋转摄影机,javascript,three.js,Javascript,Three.js,在Three.js中,我想使用Three.quaternion使摄影机对象旋转到选定对象 我确实在网上搜索过,但没有找到关于如何使用这个四元数类的示例/演示或文档 我用以下代码试试运气: camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 ); camera.position.y = 10; camera.position.z = 0;

在Three.js中,我想使用Three.quaternion使摄影机对象旋转到选定对象

我确实在网上搜索过,但没有找到关于如何使用这个四元数类的示例/演示或文档

我用以下代码试试运气:

    camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
    camera.position.y = 10;
    camera.position.z = 0;
    camera.position.x = radious;
    camera.useQuaternion = true;

   // I did use the TrackballTrackballControls. Maybe it causes the problem so I put it here
    controls = new THREE.TrackballControls( camera, document.getElementById(_canvasElement) );

    // function to make the camera rotate to the object
    function focusOn3DObject(obj){  
        obj.useQuaternion = true;
        obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1);

        var newQuaternion = new THREE.Quaternion();
        THREE.Quaternion.slerp(camera.quaternion, obj.quaternion, newQuaternion, 0.07);
        camera.quaternion = newQuaternion;
    }
但它不起作用。我错过什么了吗?
请帮忙。提前谢谢。

我想这行不行:

obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1);
你需要设置

obj.useQuaternion = true
将对象添加到场景后,旋转时,它将自动应用于对象四元数


第二点是应该将对象应用于控件,而不是摄影机。因为您想控制对象而不是相机?

Slerp非常简单。它需要4个参数:

  • targetRotation
    摄像机的实际旋转
  • destinationRotation
    对象旋转
  • destinationRotation
    新的四元数,这将是新的摄影机旋转
  • percentOfRotation
    这个参数是游乐场,我现在用的是0.07,可能是0(0%)到1(100%)之间的值
这是我的轮换方法:

var qm = new THREE.Quaternion();
THREE.Quaternion.slerp(camera.quaternion, destRotation, qm, 0.07);
camera.quaternion = qm;
camera.quaternion.normalize();

希望这能对你有所帮助。不用麻烦了,我也花了几周的时间制作了完美的摄影机。你可以使用三个JS中的applyQuaternion方法

 const quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1);

 camera.applyQuaternion(quaternion); // Apply Quaternion

 camera.quaternion.normalize();  // Normalize Quaternion
我尝试过使用它:

    var newQuaternion = new THREE.Quaternion();
        THREE.Quaternion.slerp(camera.quaternion, obj.quaternion, newQuaternion, 0.01);
        camera.quaternion = newQuaternion;
        camera.quaternion.normalize();
        camera.matrixAutoUpdate();
然而,我没有得到预期的结果。我知道这是一个相当老的帖子,但如果有人能回复我,我会很高兴。除此之外,我没有看到任何其他相关帖子,所以我真的希望有人回复


下面是我的详细问题:

我想让相机旋转并聚焦在物体上。摄影机将围绕对象移动。所以我认为摄像机将处于受控状态。我错了吗?看起来我是在黑暗中发现的,因为没有关于这方面的文档或示例:(.你能解释一下函数slerp吗?参数用于什么?我尝试了你的建议,但没有成功。请注意,在较新的THREE.js版本中,
useQuaternion
已被删除。库现在默认使用四元数。请注意,在较新的THREE.js版本中,
useQuaternion
已被删除。库现在使用quat默认情况下为厄数。还要注意,今天(2015年8月)三个摄影机对象都有一个方法。lookAt(vector3)-它接收一个带有要查看的对象位置的矢量3。您可以将任何object3d.position作为参数传递给相机进行查看。检查:嗨,在文档中,.slerp只有2个参数……我误解了什么?@SébastienGarcia Roméo四元数上有两种slerp方法——在这个答案中使用的是S静态方法。两者都列在上,但静态方法在底部。