我有一个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);
}
这是我的第一篇文章所以请原谅我,如果我做错了什么,让我知道如何改进 .
1 回答
球面坐标与2d或3d坐标不同,因为您需要以弧度为单位测量它们 . 它通常从球体的中心和XY轴测量 . 它标记了球体表面上的矩形区域 . 统一的球形坐标请参考此链接 - https://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/