2016-06-19 13 views
1

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); 
    } 
+1

Hey Thiago, hast du eine Lösung für dieses Problem gefunden? – Navaneeth

+0

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 –

+0

Danke für den Repo Thiago, ich sehe, Sie verwenden Ihre eigenen benutzerdefinierten 'threejs360'. Wie unterscheidet es sich von der ursprünglichen Bibliothek? – Navaneeth

Antwort

0

Es gibt keine Notwendigkeit, zu Kontrollen für Ihr three.js Projekt zu programmieren ab kratzen.

Ich würde vorschlagen, Sie überprüfen these existing classes for controls im Ordner Beispiele und wählen Sie eine, die Ihren Bedürfnissen entspricht. Die meisten (wenn nicht alle) von ihnen unterstützen sowohl Maus als auch Berührungsereignisse. Wenn nicht alles was Sie brauchen, können Sie immer eine der vorhandenen Klassen erweitern und anpassen.

+0

ja, ich sah es an, und sie unterstützen entweder Maus/Touch oder Geräteausrichtung, konnte ich nicht finde einen, der beides unterstützt. Also musste ich meine eigenen nach diesen Beispielen implementieren, daher die Frage –