2016-03-15 4 views
1

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

Я пытаюсь написать немного кода в Интернете, где люди могут загружать 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); 
} 

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

ответ

0

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

Смежные вопросы