我有一堆360个等角矩形图像,每个图像上我都想放置一个兴趣点。为了简化此操作,我只想确定该点在图像上的2d位置。参见下图以进行澄清:
假设蓝点的像素位置为X:3000和Y:1300。并且图像的总尺寸为4096x2048。
现在,我想将此点转换为球形位置,然后转换为3d位置。我尝试通过以下方式执行此操作:
Vector3 PlaceMenu(Vector2 loc2d)
{
var phi = 2 * Mathf.PI * (loc2d.x / imageDimensions.x);
var theta = ( loc2d.y / imageDimensions.y) * Mathf.PI;
var pos = new Vector3(Mathf.Cos(phi) * Mathf.Sin(theta), Mathf.Sin(phi) * Mathf.Sin(theta), Mathf.Cos(theta));
pos *= offsetRadius;
return pos;
}
在这种情况下,offsetRadius
是球体的半径。
但是我在这段代码中得到的结果很奇怪。因为蓝点出现在其他二维位置所指定的其他位置。
我在这里做错了什么?
如果需要更多解释,我很乐意提供!
也许这可以帮助? https://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/我正在寻找您想要达到的目标,我还没有尝试过该解决方案,但这听起来很有希望。