Ciò che stai cercando di ottenere sembra molto legato a questo:
Analogico di coordinate sferiche in n-dimensioni
nel tuo caso in 2 dimensioni, basta usare questa formula per mappare i vertici del rettangolo che hai (lascia sperare che sia suddiviso) sulla tua sfera (non dimenticare di moltiplicare per la metà del diametro da qualche parte. Solo i matematici vivono su una sfera unitaria tutti gli altri le persone decenti usano i diametri ...)
EDIT: Dato che tutto ciò è un po 'vago, fornisco alcuni approfondimenti Cosa serve da questa formula per essere usato:
x = r*sinθ*cosφ
y = r*sinθ*sinφ
z = r*cosθ
θ e φ essendo le coordinate sferiche che stai cercando (latitudine e longitudine) per ottenerlo prendi le coordinate x / y dei punti su una parte dell'immagine panoramica in quanto tale:
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
quindi faresti mappare il tuo quad su una sfera basata sulla sua posizione xy su un sistema di coordinate 2D tradotto nella posizione 3D sullo spazio secondo la mappatura delle sfere.
EDIT: Ho appena avuto un'idea, per andare oltre potresti incapsulare le coordinate del piano sulla sfera usando i valori UV come tali:
for(int i = 0;i < vertices.Length; i++) {
vertices[i] = getPointPosOnSphere(UV[i].y,UV[i].x,HalfDiamater);
}
Lì puoi gestire la posizione del quad sul tuo software 3D preferito (o anche tramite il codice attraverso l'unità) semplicemente assegnando valori UV (se da 0 a 1 su entrambi gli assi, il quad verrà avvolto attorno alla sfera)
ATTENZIONE: L'uso dei raggi UV richiede la conversione da radianti a gradi. (come UV è 0 a 1)