Преобразование координат, размещенных на плоскости текстуры 360, в сферические

У меня сферическое видео 360 градусов. Я использую это видео как текстуру на сфере в Unity. Внутри сферы находится камера, и она работает как установка для моего опыта виртуальной реальности. Довольно простой.

Я пытаюсь написать небольшой код в Интернете, где люди могут загружать изображения и видео 360 °, размещать маркер / точку доступа на сферическом изображении / видео 360 °, а затем применять текстуру изображения / видео к сфере в Unity3D. Если я наложу простую координатную сетку x / y на 360-градусное видео / изображение-текстуру, введу некоторые x / y-координаты для размещения маркера / горячей точки и верну текстуру на сферу, Unity не будет правильно интерпретировать это, поскольку Теперь мы находимся в трехмерном пространстве и смотрим на текстуру изнутри сферы, отображаемой на плоскость, со всеми возникающими искажениями.

У меня вопрос: как преобразовать эти координаты x и y на 2D-плоскости 360-градусной видеотекстуры в координаты, которые можно понять в 3D в 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);
}

Это мой самый первый пост, поэтому, пожалуйста, извините меня, если я делаю что-то не так, и дайте мне знать, как улучшить.


person Brushbender    schedule 15.03.2016    source источник


Ответы (1)


Сферические координаты отличаются от двухмерных или трехмерных координат, поскольку вам необходимо измерять их в радианах. Обычно он измеряется от центра сферы и оси XY. Он отмечает прямоугольную область на поверхности сферы. Пожалуйста, обратитесь к этой ссылке для сферических координат в единстве - https://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/

person Shalabh Raizada    schedule 14.12.2016