Aframe 计算光球内元素的位置

Aframe 计算光球内元素的位置,aframe,Aframe,Im使用一个元素显示360°光球 我的问题是,我必须在光球层中放置一些元素,这些元素必须像“标记”一样工作;但我不知道如何计算这些元素的x-y-z位置 例如,假设我有一张尺寸为4096x2048的图片,我想在1691349处放置一个简单的框 我知道球体的半径(5000),我知道盒子的大小(我可以选择一个方便的大小),我只知道如何检索球体内“像素位置”(1691349)的位置 有什么提示吗?如果你想计算a-sky球体表面上的位置,我有一个方法。从摄影机的位置生成一条光线,这条光线将击中球体。这个生

Im使用一个元素显示360°光球

我的问题是,我必须在光球层中放置一些元素,这些元素必须像“标记”一样工作;但我不知道如何计算这些元素的
x-y-z
位置

例如,假设我有一张尺寸为4096x2048的图片,我想在1691349处放置一个简单的框

我知道球体的半径(5000),我知道盒子的大小(我可以选择一个方便的大小),我只知道如何检索球体内“像素位置”(1691349)的位置


有什么提示吗?

如果你想计算a-sky球体表面上的位置,我有一个方法。从摄影机的位置生成一条光线,这条光线将击中球体。这个生命点就是我们要计算的位置。 代码如下:


球面位置
document.addEventListener(“单击”,函数(){
var-camera=document.querySelector(“a-camera”);
var cursor=document.querySelector(“a-cursor”);
var camera_pos=new THREE.Vector3().copy(camera.object3D.getWorldPosition());//获取摄像机的世界位置
var cursor_pos=new THREE.Vector3().copy(cursor.object3D.getWorldPosition());//获取光标的世界位置
var direction=new THREE.Vector3().subVectors(cursor_pos,camera_pos);//计算从摄像机到光标的方向
var raycaster=new THREE.raycaster(camera_pos,direction.normalize());//生成raycaster
var sky=document.querySelector(“a-sky”);
var intersects=raycaster.intersectObject(sky.object3D.children[0]);//让raycaster与“a-sky”球体相交
console.log(与[0].点相交);
});

很抱歉回答我自己的问题,但这次真的很容易:

function sphericalCoordsToVector3(distance, latitude, longitude){
  return new THREE.Vector3(
    distance * -Math.cos(latitude) * Math.cos(longitude),
    distance * Math.sin(latitude),
    distance * -Math.cos(latitude) * Math.sin(longitude)
  );
}
其中
distance
是我们要放置元素的中心(摄像机)的距离

就记录而言,相反的功能是:

function vector3ToSphericalCoords(vector) {
  var phi = Math.acos(vector.y / Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z));
  var theta = Math.atan2(vector.x, vector.z);
  return {
    longitude: theta < 0 ? -theta : (Math.PI * 2.0) - theta,
    latitude: (Math.PI / 2.0) - phi
  };
};
函数向量3tosphericalcoods(向量){
var phi=Math.acos(vector.y/Math.sqrt(vector.x*vector.x+vector.y*vector.y+vector.z*vector.z));
varθ=数学atan2(向量x,向量z);
返回{
经度:θ<0?-θ:(Math.PI*2.0)-θ,
纬度:(Math.PI/2.0)-φ
};
};
可以在这里找到原始函数:(还有一些很好的函数可以获取元素在屏幕中的位置)