Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
THREE.js-四元数到lat,lon_Three.js_Geometry_Quaternions_Webvr - Fatal编程技术网

THREE.js-四元数到lat,lon

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

我正在尝试将vrDisplays旋转(以四元数表示)转换为纬度和经度,因为我使用的API需要以lat和lon值表示的头戴式显示器的当前旋转

产品领主在unity3D论坛中回答()

这给了我很大的希望,这实际上是可能的,但我有点被卡住了,就像三个一样。四元数似乎没有AxisAngle()方法,而且我对3D几何不太擅长

那么,有没有人知道我怎样才能做到这一点,这样我才能做那样的事情

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;