Javascript 通过设备方向和触摸控制Threejs摄像头

Javascript 通过设备方向和触摸控制Threejs摄像头,javascript,3d,three.js,user-controls,Javascript,3d,Three.js,User Controls,我对3D编程和它背后的所有数学知识都相当陌生,现在我在使用设备定向或触摸事件移动相机时,它工作得很好,但我实现这一点的方式凌驾于另一个之上。我能让谁一起工作?我使用四元数来设置相机的位置,所以我基本上是想让触摸事件在设备方向事件之上工作 设备方向的代码: onDeviceMotionChange(deviceMotion) { this.alpha = TMath.degToRad(deviceMotion.alpha); this.beta = TMath.degToRad

我对3D编程和它背后的所有数学知识都相当陌生,现在我在使用设备定向或触摸事件移动相机时,它工作得很好,但我实现这一点的方式凌驾于另一个之上。我能让谁一起工作?我使用四元数来设置相机的位置,所以我基本上是想让触摸事件在设备方向事件之上工作

设备方向的代码:

  onDeviceMotionChange(deviceMotion) {
    this.alpha = TMath.degToRad(deviceMotion.alpha);
    this.beta = TMath.degToRad(deviceMotion.beta);
    this.gamma = TMath.degToRad(deviceMotion.gamma);
  }

  update() {
    this.euler.set(this.beta, this.alpha, -this.gamma, 'YXZ');
    this.deviceOrientation.setFromEuler(this.euler);

    this.deviceOrientation.multiply(this.centralizer);
    this.camera.quaternion.copy(this.deviceOrientation);
  }
以及触摸/鼠标的代码:

  onMouseMove(event) {
    this.rotateEnd.set(event.clientX, event.clientY);
    this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart);
    this.rotateStart.copy(this.rotateEnd);

    this.phi += (2 * Math.PI * this.rotateDelta.y / this.renderer.height * 0.5);
    this.theta += (2 * Math.PI * this.rotateDelta.x / this.renderer.width * 0.6);
   }

  update() {
    this.euler.set(this.phi, this.theta, 0, 'YXZ');
    this.dragOrientation.setFromEuler(this.euler);
    this.camera.quaternion.copy(this.dragOrientation);
  }

嘿,蒂亚戈,你找到这个问题的解决方案了吗?你好,纳瓦内特,我将根据我如何实现它,在这里尝试提供一个答案,同时你可以检查这里的代码:谢谢你的回购蒂亚戈,我看到你正在使用你自己的自定义“3JS360”。它与原始库有何不同?这是一个精心挑选的构建,只有360度所需的最小值,因此有可能生成一个非常小的捆绑包Hey Thiago,您是否找到了解决此问题的方法?您好Navaneeth,我将根据我如何实现它,在这里尝试提供一个答案,同时,您可以在这里查看代码:感谢repo Thiago,我看到您正在使用自己定制的“threejs360”。它与最初的库有什么不同?它是一个手工挑选的构建,只需要完成360度所需的最小值,因此有可能生成一个非常小的包