经过一个漫长的四元数之夜,我终于让 mouselook 在使用 three.js 的测试游戏中正常工作。
但是我确实注意到,如果我继续向上看,相机会倒置。我匆忙将一些代码放在一起,当用户相对悠闲地滚动时它工作得很好,当用户快速滚动时它只是简单地不起作用。我可能没有正确夹紧相机旋转,那我该怎么做?或者我是否走在了正确的轨道上,只是错过了一些明显的事情?
项目链接(内联源): http: //neveronti.me/WalkingSimulator/
我的相机旋转功能:
//Rotates camera horizontally
y-=mouseMove.x*.02;
//rotates camera vertically
//checks to see if it's moving camera up or down
if(mouseMove.y<0){
//checks that it's not at the bottom or top
if(Math.abs(camera.rotation.y*(180/Math.PI))>2 || camera.rotation.x<=0){
x-=mouseMove.y*.02;
}
} else if(mouseMove.y>0) {
if(Math.abs(camera.rotation.y*(180/Math.PI))>2 || camera.rotation.x>=0){
x-=mouseMove.y*.02;
}
}
我的更新相机功能:
function updateCamera(){
camera.lastRotation=camera.quaternion.clone();
var euler = new THREE.Euler( 0, 0, 0, 'YXZ' );
euler.x = x;
euler.y = y;
euler.z = z;
mouseMove.x=0;
mouseMove.y=0;
camera.quaternion.setFromEuler( euler );
}
问题的图像: