Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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,所以我有一个场景,有多个盒子和一个透视照相机 每当我点击一个特定的框时,我都想达到这个效果 相机将从其当前位置平滑过渡到盒子的位置 该框在摄影机视口中居中 相机将平滑地放大并聚焦在长方体上 这种效果的灵感来自于。每当用户点击一颗星时,相机就会放大该星并将其显示在中心。我正试图复制这种效果 我现在可以抓住盒子的位置,看看它。但是我想做的不止这些,我不确定如何继续。我想你需要的是一个动画,有很多动画库,比如和。当您在翻译后抓住该位置时,可以制作动画以平滑翻译。下面是tween.js的一个片段:

所以我有一个场景,有多个盒子和一个透视照相机

每当我点击一个特定的框时,我都想达到这个效果

  • 相机将从其当前位置平滑过渡到盒子的位置
  • 该框在摄影机视口中居中
  • 相机将平滑地放大并聚焦在长方体上
这种效果的灵感来自于。每当用户点击一颗星时,相机就会放大该星并将其显示在中心。我正试图复制这种效果


我现在可以抓住盒子的位置,看看它。但是我想做的不止这些,我不确定如何继续。

我想你需要的是一个动画,有很多动画库,比如和。当您在翻译后抓住该位置时,可以制作动画以平滑翻译。下面是tween.js的一个片段:

var tween2 = new TWEEN.Tween(camera.position)
                .to({
                    x : target.position.x,
                    y : target.position.y,
                    z : target.position.z
                } , 1000)
                .easing(TWEEN.Easing.Linear.None)
                .start();
如果您想在相机的中心找到盒子。我们还需要改变相机的旋转。下面是一种使用矩阵计算目标旋转的方法

    var rotation_matrix = new THREE.Matrix4();
    rotation_matrix.lookAt(target_position,target_box.position,camera.up);
    var target_rotation = new THREE.Euler(0,0,0,"XYZ");
    target_rotation.setFromRotationMatrix(rotation_matrix);
    //now, the target_rotation would be the rotation after translating.
然后,可以使用相同的方法制作动画以更改旋转


顺便说一句,似乎在100000名明星中,他们最终切换了摄像机。

我想你需要的是一部动画,有很多动画库,比如和。当您在翻译后抓住该位置时,可以制作动画以平滑翻译。下面是tween.js的一个片段:

var tween2 = new TWEEN.Tween(camera.position)
                .to({
                    x : target.position.x,
                    y : target.position.y,
                    z : target.position.z
                } , 1000)
                .easing(TWEEN.Easing.Linear.None)
                .start();
如果您想在相机的中心找到盒子。我们还需要改变相机的旋转。下面是一种使用矩阵计算目标旋转的方法

    var rotation_matrix = new THREE.Matrix4();
    rotation_matrix.lookAt(target_position,target_box.position,camera.up);
    var target_rotation = new THREE.Euler(0,0,0,"XYZ");
    target_rotation.setFromRotationMatrix(rotation_matrix);
    //now, the target_rotation would be the rotation after translating.
然后,可以使用相同的方法制作动画以更改旋转

顺便说一句,似乎在100000名明星中,他们最终切换了摄像机