THREE.js-四元数到lat,lon
我正在尝试将vrDisplays旋转(以四元数表示)转换为纬度和经度,因为我使用的API需要以lat和lon值表示的头戴式显示器的当前旋转 产品领主在unity3D论坛中回答() 这给了我很大的希望,这实际上是可能的,但我有点被卡住了,就像三个一样。四元数似乎没有AxisAngle()方法,而且我对3D几何不太擅长 那么,有没有人知道我怎样才能做到这一点,这样我才能做那样的事情THREE.js-四元数到lat,lon,three.js,geometry,quaternions,webvr,Three.js,Geometry,Quaternions,Webvr,我正在尝试将vrDisplays旋转(以四元数表示)转换为纬度和经度,因为我使用的API需要以lat和lon值表示的头戴式显示器的当前旋转 产品领主在unity3D论坛中回答() 这给了我很大的希望,这实际上是可能的,但我有点被卡住了,就像三个一样。四元数似乎没有AxisAngle()方法,而且我对3D几何不太擅长 那么,有没有人知道我怎样才能做到这一点,这样我才能做那样的事情 var quat = THREE.Quaternion(); quat.fromArray(vrDisplay.ge
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
});
//我注意到在我的代码中已经有了从Euler角到lat-lon角的转换。所以我可能只是把四元数转换成欧拉角,然后再转换成纬度值。不过,必须有一个更复杂的方法
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;
}
(1)供参考,有矢量4.从四元数设置轴角度(四元数)
。(2) 但是,请尝试v=new THREE.Vector3();//重复使用它!v、 集合(0,0,1)。应用四元数(四元数)代码>这应该给你指明方向。
angles.lat = Math.acos(look.z/r) - Math.PI/2;
angles.lon = Math.atan2(look.y , look.x) - Math.PI;