我的应用中有一个摄像头:
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
camera.position.z = 1;
camera.position.y = -5;
camera.rotateOnAxis(new THREE.Vector3(1, 0, 0), degInRad(90));
camera.up = new THREE.Vector3(0, 0, 1);
这些render
功能代码必须在我按下按键时旋转相机:
if (leftPressed) {
camera.rotateOnAxis((new THREE.Vector3(0, 1, 0)).normalize(), degInRad(1));
} else if (rightPressed) {
camera.rotateOnAxis((new THREE.Vector3(0, 1, 0)).normalize(), degInRad(-1));
}
if (upPressed) {
camera.rotateOnAxis((new THREE.Vector3(1, 0, 0)).normalize(), degInRad(1));
} else if (downPressed) {
camera.rotateOnAxis((new THREE.Vector3(1, 0, 0)).normalize(), degInRad(-1));
}
相机旋转,但不是我需要的方式。我希望相机像飞机上的FPS(第一人称射击)一样旋转。见图片明白我想要什么......
我试着用sin(1)
和cos(1)
,但无法理解rotateOnAxis
的作品,引起translate
功能于她所看到的工作就像一个魅力和移动相机的方向。
PS
这是一个文档,three.js
也许有帮助。
为了处理键盘事件,我使用KeyboardJS
,这是一个degInRad
函数:
function degInRad(deg) {
return deg * Math.PI / 180;
}
O
-相机的位置
O-O1
-当前的相机方向
R1
-当前的旋转方向
R
-我想要的方向
对不起,想要获得好的照片。
通过设置,您可能会得到想要的东西 camera.rotation.order = 'YXZ';
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句