Ich bin ziemlich neu in 3D-Programmierung und all die Mathematik dahinter, im Moment habe ich es funktioniert gut, wenn entweder Geräteausrichtung oder Touch-Ereignisse, um die Kamera zu bewegen, aber der Weg Ich implementierte dieses, überschreibt das andere. Wer kann ich beide zusammen arbeiten lassen? Ich verwende Quaternionen, um die Kameraposition festzulegen, also versuche ich im Grunde, dass die Berührungsereignisse über die Geräteausrichtungsereignisse hinausgehen.Steuern Dreijs Kamera mit beiden Geräteausrichtung und Touch
Der Code für die Geräteausrichtung:
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);
}
und den Code für den Touch/Maus:
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);
}
Hey Thiago, hast du eine Lösung für dieses Problem gefunden? – Navaneeth
Hallo Navaneeth, ich werde versuchen, eine Antwort hier zu geben, basierend darauf, wie ich es implementiert habe, in der Zwischenzeit können Sie den Code hier überprüfen: https://github.com/thiagopnts/kaleidoscope/blob/master/src /controls.js#L108-L158 –
Danke für den Repo Thiago, ich sehe, Sie verwenden Ihre eigenen benutzerdefinierten 'threejs360'. Wie unterscheidet es sich von der ursprünglichen Bibliothek? – Navaneeth