我有一个360球形视频。我将此视频用作Unity中球体上的纹理。球体内部是一个摄像头,它可以作为虚拟现实体验的设置。非常基本。
我正在尝试在网络上编写一些代码,用户可以上传360个图像和视频,在360度球形图像/视频上放置标记/热点,然后将图像/视频纹理应用于球体上Unity3D。如果我在360视频/图像纹理上叠加一个简单的x / y坐标网格,放入一些x / y坐标来放置标记/热点,并将纹理放回到球体上,Unity将不会正确解释这个我们现在处于3D空间中,我们正在查看映射到平面上的球体内的纹理,并发生所有失真。
我的问题是,如何将360视频纹理的2D平面上的这些x和y坐标转换为Unity3D中可以理解的坐标?
我的第一个想法是使用二维笛卡尔坐标并将它们转换为球面坐标,但我似乎在笛卡尔坐标中缺少一个z轴来使其工作。
z轴是0还是从球心到x / y坐标的半径? z轴代表什么?可能有两个坐标系。一个是平面上的坐标,另一个是来自球体中心的坐标?
这是我到目前为止的转换代码:
public static void CartesianToSpherical(Vector3 cartCoords, out float outRadius, out float outPolar, out float outElevation){
if (cartCoords.x == 0)
cartCoords.x = Mathf.Epsilon;
outRadius = Mathf.Sqrt((cartCoords.x * cartCoords.x)
+ (cartCoords.y * cartCoords.y)
+ (cartCoords.z * cartCoords.z));
outPolar = Mathf.Atan(cartCoords.z / cartCoords.x);
if (cartCoords.x < 0)
outPolar += Mathf.PI;
outElevation = Mathf.Asin(cartCoords.y / outRadius);
}
这是我的第一篇文章,请原谅我,如果我做错了,请告诉我如何改进。
答案 0 :(得分:0)
球面坐标与2d或3d坐标不同,因为您需要以弧度为单位测量它们。它通常从球体的中心和XY轴测量。它标记了球体表面上的矩形区域。请参阅此链接,了解统一的球形坐标 - https://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/