1

我有一个 360 度全景视频。我将此视频用作 Unity 球体上的纹理。球体内部是一个摄像头,它用作我的虚拟现实体验的设置。很基本。

我正在尝试在网络上编写一些代码,人们可以在其中上传 360 度图像和视频,在 360 度球图像/视频上放置一个标记/热点,然后在 Unity3D 中的球体上应用图像/视频纹理。如果我在 360 视频/图像纹理上覆盖一个简单的 x/y 坐标网格,放入一些 x/y 坐标以放置标记/热点,然后将纹理放回球体上,Unity 将无法正确解释这一点,因为我们现在在 3D 空间中,我们正在查看映射到平面上的球体内部的纹理,所有失真都在发生。

我的问题是,如何将 360 视频纹理的 2D 平面上的这些 x 和 y 坐标转换为 Unity3D 中可以在 3D 中理解的坐标?

我的第一个想法是使用二维笛卡尔坐标并将它们转换为球坐标,但我似乎在笛卡尔坐标中缺少一​​个 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);
}

这是我的第一篇文章,所以如果我做错了什么,请原谅我,让我知道如何改进。

4

1 回答 1

0

球坐标不同于 2d 或 3d 坐标,因为您需要以弧度来测量它们。它通常从球心和 XY 轴测量。它在球体表面上标记一个矩形区域。请参阅此链接以获取统一的球坐标 - https://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/

于 2016-12-14T06:08:43.097 回答