あなたが達成しようとしていることはこれに非常に関連しているようです:
n次元の球座標の類似体
あなたの場合は2次元で、あなたはこの式を使ってあなたが持っている長方形の頂点を球にマッピングします(それが細分されることを期待しましょう)。まともな人は直径を使用しています...)
編集:これはすべて漠然としているので、私はいくつかのより多くの洞察を与えます使用するためにこの式から必要なもの:
x = r*sinθ*cosφ
y = r*sinθ*sinφ
z = r*cosθ
θとφは、パノラマ画像の一部にあるポイントのx / y座標を取得するために求めている球面座標(緯度と経度)です。
public Void getPointPosOnSphere(float Longitude,float Latitude,float r) {
x = r*Mathf.sin(Longitude)*Mathf.cos(Latitude);
y = r*Mathf.sin(Longitude)*Mathf.sin(Latitude);
z = r*Mathf.cos(Longitude);
return new Vector3(x,y,z);
}
//here you could have a for loop iterating through points of your rectangle for each
//point you'd have associated a map coordinate :
Vector3 pointSpacePos = getPointPosOnSphere(pointCoordY,pointCoordX,HalfDiamater);
//End of the for loop
次に、2D座標系のxy位置から球体マッピングに従って空間の3D位置に変換されたクワッドを球体にマッピングします。
編集:ちょうどアイデアを得た、さらに進むために、そのようなUV値を使用して球上の平面の座標をカプセル化することができました:
for(int i = 0;i < vertices.Length; i++) {
vertices[i] = getPointPosOnSphere(UV[i].y,UV[i].x,HalfDiamater);
}
そこで、UV値を割り当てるだけで、お気に入りの3Dソフトウェアでクワッドの位置を管理することができます(または、コードを1にして統一することもできます)(両方の軸で0から1の場合、クワッドは球全体にラップされます)。
警告:UVを使用するには、ラジアンから度への変換を行う必要があります。(UVは0から1であるため)