360度の球状ビデオがあります。このビデオを Unity の球体のテクスチャとして使用します。球体の内部にはカメラがあり、これがバーチャル リアリティ体験のセットアップとして機能します。かなり基本的です。
人々が 360 度の画像とビデオをアップロードし、360 度の球状の画像/ビデオにマーカー/ホットスポットを配置し、Unity3D の球体に画像/ビデオ テクスチャを適用できる Web 上に少しのコードを書こうとしています。単純な x/y 座標グリッドを 360 ビデオ/画像テクスチャにオーバーレイし、x/y 座標を入れてマーカー/ホットスポットを配置し、テクスチャを球体に戻すと、Unity はこれを正しく解釈しません。私たちは今 3D 空間にいて、すべての歪みが発生している平面にマッピングされた球の中からテクスチャを見ています。
私の質問は、360 ビデオ テクスチャの 2D 平面上のこれらの x 座標と y 座標を、Unity3D 内の 3D で理解できる座標に変換するにはどうすればよいですか?
私の最初の考えは、2 次元デカルト座標を使用してこれらを球座標に変換することでしたが、これを機能させるためにデカルト座標に z 軸が欠けているようです。
z 軸は単に 0 ですか、それとも球の中心から x/y 座標までの半径ですか? z 軸は何を表していますか? おそらく2つの座標系がありますか?平面上の座標と球の中心からの座標ですか?
これは私がこれまでに持っている変換コードです:
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);
}
これは私の最初の投稿なので、何か間違ったことをしている場合は申し訳ありませんが、改善方法を教えてください.