Javascript Three.js如何使用四元数旋转摄影机
在Three.js中,我想使用Three.quaternion使摄影机对象旋转到选定对象 我确实在网上搜索过,但没有找到关于如何使用这个四元数类的示例/演示或文档 我用以下代码试试运气: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;
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
这个参数是游乐场,我现在用的是0.07,可能是0(0%)到1(100%)之间的值percentOfRotation
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静态方法。两者都列在上,但静态方法在底部。