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
Three.js 如何使用三个JS设置Camera.lookAt的动画_Three.js_Webgl - Fatal编程技术网

Three.js 如何使用三个JS设置Camera.lookAt的动画

Three.js 如何使用三个JS设置Camera.lookAt的动画,three.js,webgl,Three.js,Webgl,我有一个场景,它渲染了一个包含多个对象的板。单击其中一个对象,通过使用对象拾取,我可以获取对象并设置摄影机位置的动画,使其位于对象的“头顶”视图中。然后使用camera.lookAt方法,我可以强制摄影机直接注视对象 在onUpdate方法中调用camera.lookAt时,我注意到动画开始时有一个快速跳转,因为它最初有一个很大的旋转距离来查看选定的对象。相比之下,对camera.lookAt的后续调用都很小,并且动画效果很好 // Position the camera to fit var

我有一个场景,它渲染了一个包含多个对象的板。单击其中一个对象,通过使用对象拾取,我可以获取对象并设置摄影机位置的动画,使其位于对象的“头顶”视图中。然后使用camera.lookAt方法,我可以强制摄影机直接注视对象

在onUpdate方法中调用camera.lookAt时,我注意到动画开始时有一个快速跳转,因为它最初有一个很大的旋转距离来查看选定的对象。相比之下,对camera.lookAt的后续调用都很小,并且动画效果很好

// Position the camera to fit
var tween = new TWEEN.Tween(camera.position).to({
    x: selectedObject.position.x,
    y: selectedObject.position.y,
    z: 1
}).easing(TWEEN.Easing.Quadratic.InOut).onUpdate(function() {
    camera.lookAt(selectedObject.position);
}).onComplete(function() {
    camera.lookAt(selectedObject.position);
}).start();
是否有任何方法可以设置该方法的动画,或者我必须手动变换摄影机的矩阵值以查看选定对象

下面是一个例子。它使用WebGLRenderer,因此请使用合适的浏览器


谢谢您的帮助。

您可以做的一件事是在相机位置和相机目标之间(您必须定义)

这有点棘手,因为tween需要同时运行,而他们不。。。
这就是在第二个tween中调用camera.lookAt()的原因。

WestLangley的答案有效,但看起来奇怪的冗长。我使用了一个预定义的位置(xyz)和目标(xyz)。使用透视摄影机和轨迹球控件

new TWEEN.Tween( camera.position ).to( {
    x: position.x,
    y: position.y,
    z: position.z}, 600 )
  .easing( TWEEN.Easing.Sinusoidal.EaseInOut).start();
new TWEEN.Tween( controls.target ).to( {
    x: target.x,
    y: target.y,
    z: target.z}, 600 )
  .easing( TWEEN.Easing.Sinusoidal.EaseInOut).start();

上帝保佑。非常感谢。请问您如何定义camera.target?THREE.js中没有定义它。@pkout如答案的第一行所述,它是您必须定义的东西。但是,它不必是
相机的属性。啊,对不起。我不知道我怎么会错过。非常感谢。到今天为止,我们已经有了3个合适的浏览器,3年的时间是多么的不同啊
new TWEEN.Tween( camera.position ).to( {
    x: position.x,
    y: position.y,
    z: position.z}, 600 )
  .easing( TWEEN.Easing.Sinusoidal.EaseInOut).start();
new TWEEN.Tween( controls.target ).to( {
    x: target.x,
    y: target.y,
    z: target.z}, 600 )
  .easing( TWEEN.Easing.Sinusoidal.EaseInOut).start();