three.js:限制摄像头';s旋转
我正在使用three.js,试图为真实世界的相机建模。因此,我想将它的旋转轴限制为沿x轴和y轴旋转90度 有没有简单的方法可以做到这一点?我当前的代码运行得不是特别好(当你试图同时将相机移过X和Y边界时,它会发疯)three.js:限制摄像头';s旋转,three.js,quaternions,Three.js,Quaternions,我正在使用three.js,试图为真实世界的相机建模。因此,我想将它的旋转轴限制为沿x轴和y轴旋转90度 有没有简单的方法可以做到这一点?我当前的代码运行得不是特别好(当你试图同时将相机移过X和Y边界时,它会发疯) if(xRot!=null&&xRot!=未定义){ 相机。旋转(xRot); } if(yRot!=null&&yRot!=未定义){ 旋转摄影机(yRot); } if(camera.rotation.xmaxCameraRotX){ camera.rotation.x=max
if(xRot!=null&&xRot!=未定义){
相机。旋转(xRot);
}
if(yRot!=null&&yRot!=未定义){
旋转摄影机(yRot);
}
if(camera.rotation.xmaxCameraRotX){
camera.rotation.x=maxCameraRotX;
}
if(camera.rotation.ymaxCameraRotY){
camera.rotation.y=maxCameraRotY;
}
实际上,我通过检查Three.js演示中的一些现有代码,找到了一个名为PointerLock的库的解决方案。其思想是将多个对象实际堆叠在彼此内部:从水平移动的对象(偏航对象)开始,将另一个对象放置在垂直移动的偏航对象(俯仰对象)内部,然后将实际摄影机放置在俯仰对象内部
然后,只沿各自的轴旋转外部对象(偏航和俯仰),因此如果同时旋转这两个对象,它们将自动更正。例如,如果沿y轴将偏航旋转45度(使其向右旋转),然后将俯仰旋转45度(使其向下旋转),则俯仰将从偏航已旋转的位置向下旋转45度。
鉴于相机位于两者内部,它只指向偏航和俯仰指向的任何地方
这是密码
/*
*摄像机设置
*
*根对象是偏航对象(控制水平移动)
*偏航对象包含俯仰对象(控制垂直移动)
*俯仰对象包含摄影机(允许查看场景)
*
*整个装置的工作原理就像一架带有
*嵌入推进器的摄像机。。。
*
*/
//偏航物体
var yawObject=new THREE.Object3D();
//俯仰物体
var pitchObject=new THREE.Object3D();
//摄影机对象
var摄像机=新的三个透视摄像机(视野、方位、近距离、远距离);
//最大摄像机角度(弧度)
var minCameraRotX=0.5;
var maxCameraRotX=0.5;
var minCameraRotY=1;
var maxCameraRotY=1;
//设置
添加(pitchObject);
pitchObject.add(摄影机);
场景。添加(yawObject);
...
var rotateCamera=函数(xRot、yRot、zRot){
y+=yRot;
pitchObject.rotation.x+=xRot;
//强制执行X轴边界(绕y轴旋转)
y=Math.max(minCameraRotY,Math.min(maxCameraRotY,yawObject.rotation.y));
//强制Y轴边界(绕x轴旋转)
pitchObject.rotation.x=Math.max(minCameraRotX,Math.min(maxCameraRotX,pitchObject.rotation.x));
}
您是否尝试过以下方法:(仅在不处于限制角度时旋转凸轮)if(camera.rotation.x