Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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,我制作了一个简单的threeJS 3d应用程序,你可以在其中环顾四周,用4个键移动。问题是,无论你往哪里看,它都朝着同一个方向移动,这显然是因为我使用: camera.position.x += 0.1 必须将默认位移(0.1,0,0)设置为矢量3,然后将摄影机的旋转(其四元数)应用于该矢量,然后再将其添加到其位置。请参阅下面的代码: //创建摄影机 var摄像机=新的三个透视摄像机(); //创建要重复使用的置换向量 var dispVector=new THREE.Vector3(); 函

我制作了一个简单的threeJS 3d应用程序,你可以在其中环顾四周,用4个键移动。问题是,无论你往哪里看,它都朝着同一个方向移动,这显然是因为我使用:

camera.position.x += 0.1

必须将默认位移
(0.1,0,0)
设置为矢量3,然后将摄影机的旋转(其四元数)应用于该矢量,然后再将其添加到其位置。请参阅下面的代码:

//创建摄影机
var摄像机=新的三个透视摄像机();
//创建要重复使用的置换向量
var dispVector=new THREE.Vector3();
函数onRightKey(){
dispVector.set(0.1,0,0);//右键在x轴上移动0.1
applyDisplacement();
}
函数applyDisplacement(){
//我们将摄影机的旋转应用于位移向量
dispVector.applyQuaternion(摄影机.四元数);
//通过生成的位移向量移动摄影机位置
摄像机。位置。添加(dispVector);
}
您可以将同样的想法应用于其他键:
(-0.1,0,0)
如果您想向左移动,或者
(0,0.1,0)
如果您想向上移动,等等:

函数onLeftKey(){
dispVector.set(-0.1,0,0);//左键在x轴上移动-0.1
applyDisplacement();
}
函数onUpKey(){
设置(0,0.1,0);//左键在y轴上移动0.1
applyDisplacement();
}