2016-03-15 65 views
1

我有一個360球形視頻。我使用這個視頻作爲Unity中球體的紋理。球體內部是一個攝像頭,這起到了我虛擬現實體驗的設置的作用。很基本。將360紋理平面上的座標轉換爲球形

我想在網上寫一些代碼,人們可以上傳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); 
} 

這是我的第一個職位,所以請原諒我,如果我做錯了什麼,讓我知道如何改進。

回答