То, чего вы пытаетесь достичь, похоже, очень связано с этим:
Аналог сферических координат в n-измерениях
в вашем случае в двух измерениях, тогда вы просто используете эту формулу, чтобы отобразить вершины прямоугольника, который у вас есть (будем надеяться, что он разделен) на вашей сфере (не забудьте умножить на где-то полудиаметр. Только математики живут на единичной сфере все остальные приличные люди используют диаметры ...)
РЕДАКТИРОВАТЬ: Поскольку все это немного расплывчато, я даю еще несколько идей, что вам нужно из этой формулы для использования:
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
тогда вы получите отображение своего четырехугольника на сфере на основе его положения xy в 2D-системе координат, переведенной в 3D-положение в пространстве в соответствии с отображением сферы.
РЕДАКТИРОВАТЬ: Только что пришла идея, чтобы пойти дальше, вы можете инкапсулировать координаты плоскости на сфере, используя значения UV как таковые:
for(int i = 0;i < vertices.Length; i++) {
vertices[i] = getPointPosOnSphere(UV[i].y,UV[i].x,HalfDiamater);
}
Там вы можете управлять положением четырехугольников в вашем любимом 3D-программном обеспечении (или даже с помощью кода через единицу), просто назначая значения UV (если от 0 до 1 по обеим осям, то квад будет обернут вокруг сферы)
ВНИМАНИЕ: Использование ультрафиолетовых лучей потребует от вас пересчета в радианы в градусы. (поскольку УФ от 0 до 1)