2017-04-11 2 views
0

Ich versuche, vrDisplays Drehung (kommt in Quaternionen) zu Breite und Länge zu konvertieren, da eine API, die ich benutze, die aktuelle Rotation der Head Mounted Anzeige in lat und lon Werten benötigt.THREE.js - Quaternion zu lat, lon

lordofducts beantworten in unity3d Foren (https://forum.unity3d.com/threads/quaternions-and-euler-angles-to-longitude-latitude.154392/)

gab mir gute Hoffnung, dass dies tatsächlich möglich ist, aber ich bin ein bisschen stecken, als THREE.Quaternion nicht zu haben ToAxisAngle scheint() -Methode, und ich bin nicht so gut mit 3D-Geometrie.

also hat jemand eine Idee, wie ich das erreichen kann, damit ich sowas tun kann?

var quat = THREE.Quaternion(); 

quat.fromArray(vrDisplay.getPose().orientation); 

var lat = //do sth with quat 
var lon = //do seth with quat 

api.rotateCamera({ 
    lat: lat, 
    lon: lon 
}); 

// Ich bemerkte, dass ich bereits in meinem Code eine Umwandlung von Euler müssen lat lon-Winkel. Also konvertiere ich das Quaternion nur in Euler-Winkel und wandle es dann in lat lon-Werte um. Dennoch muss es eine ausgeklügeltere Methode geben ...

+0

(1) Zu Ihrer Information gibt es 'Vector4.setAxisAngleFromQuaternion (Quaternion)'. (2) Versuchen Sie stattdessen 'v = new THREE.Vector3(); // wiederhole es! v.set (0, 0, 1) .applyQuaternion (quaternion); 'Das sollte dir die Richtung geben. – WestLangley

Antwort

0
var look = new THREE.Vector3(); 

quatToSpherical = function(quat){ 
    look.set(0,0,1); 
    look.applyQuaternion(quat); 
    look.normalize(); 
    if(Math.abs(look.x) < 0.001) look.x = 0.001; 

    var angles = {}; 
    var radius = 1; 

    angles.lat = Math.acos(look.z/r); 
    angles.lon = Math.atan2(look.y , look.x); 

    return angles; 
} 

Die Lösung gilt nur für ein kartesisches Standard-Koordinatensystem.

ein rechtes Koordinatensystem übergeben mit XY-Ebene Boden wie ich in meinem Setup verwendet wird, muss Offsets:

angles.lat = Math.acos(look.z/r) - Math.PI/2; 
angles.lon = Math.atan2(look.y , look.x) - Math.PI; 

https://en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinates

Verwandte Themen