Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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 Three.js Blender样式的动态观察控件-沿球面经度不受限制地移动_Javascript_Vector_Three.js_Quaternions_Spherical Coordinate - Fatal编程技术网

Javascript Three.js Blender样式的动态观察控件-沿球面经度不受限制地移动

Javascript Three.js Blender样式的动态观察控件-沿球面经度不受限制地移动,javascript,vector,three.js,quaternions,spherical-coordinate,Javascript,Vector,Three.js,Quaternions,Spherical Coordinate,我试图建立一个搅拌机式轨道控制器。这是代码 // Initialization const offset = new Vector3(); let quat = new Quaternion(); let quatInverse = new Quaternion(); const v = new Vector3(0,0,0); const spherical = new Spherical(); const sphericalD = new Spherical(); const cameraLo

我试图建立一个搅拌机式轨道控制器。这是代码

// Initialization
const offset = new Vector3();
let quat = new Quaternion();
let quatInverse = new Quaternion();
const v = new Vector3(0,0,0);
const spherical = new Spherical();
const sphericalD = new Spherical();
const cameraLookAt = new Vector3(0,0,0);

// Render

const speed = 5;
let updateController = false;

if (keyPressed["ArrowLeft"]) {
  sphericalD.theta -= (2 * Math.PI * speed) / domElement.clientHeight;
  updateController = true;
}

if (keyPressed["ArrowRight"]) {
  sphericalD.theta += (2 * Math.PI * speed) / domElement.clientHeight;
  updateController = true;
}

if (keyPressed["ArrowUp"]) {
  sphericalD.phi -= (2 * Math.PI * speed * 0.5) / domElement.clientHeight;
  updateController = true;
}

if (keyPressed["ArrowDown"]) {
  sphericalD.phi += (2 * Math.PI * speed * 0.5) / domElement.clientHeight;
  updateController = true;
}

if (updateController) {
  offset.copy(camera.position).sub(cameraLookAt);
  quat.setFromUnitVectors(camera.up, v);
  offset.applyQuaternion(quat);
  quatInverse = quat.invert();
  spherical.setFromVector3(offset);
  spherical.theta += sphericalD.theta;
  spherical.phi += sphericalD.phi;

  spherical.phi = Math.max(-Math.PI, Math.min(Math.PI, spherical.phi));
  spherical.makeSafe();

  offset.setFromSpherical(spherical);
  offset.applyQuaternion(quatInverse);
  camera.position.copy(cameraLookAt).add(offset);

  updateController = false;
  sphericalD.theta = 0;
  sphericalD.phi = 0;
}

camera.lookAt(cameraLookAt);
我确实得到了不受限制的摄像机沿球面纬度的运动,但纵向运动仅限于极点

有人能帮我在经度上不受限制地移动吗