Ce que vous essayez de réaliser semble très lié à cela:
Analogique des coordonnées sphériques en n dimensions
dans votre cas en 2 dimensions, alors vous utilisez simplement cette formule pour cartographier les sommets du rectangle que vous avez (espérons qu'il est subdivisé) sur votre sphère (n'oubliez pas de multiplier par le demi-diamètre quelque part. Seuls les mathématiciens vivent sur une sphère unitaire tous les autres les gens décents utilisent des diamètres ...)
EDIT: Comme tout cela est un peu vague, je donne quelques informations supplémentaires Ce dont vous avez besoin pour utiliser cette formule:
x = r*sinθ*cosφ
y = r*sinθ*sinφ
z = r*cosθ
θ et φ étant les coordonnées sphériques que vous recherchez (Latitude et Longitude) pour l'obtenir, vous prenez les coordonnées x / y des points sur une partie de l'image panoramique en tant que telle:
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
vous obtiendrez alors votre quad sur une sphère basée sur sa position xy sur un système de coordonnées 2D traduite en position 3D sur l'espace selon la cartographie de la sphère.
EDIT: Je viens de vous faire une idée, pour aller plus loin, vous pouvez encapsuler les coordonnées du plan sur la sphère en utilisant les valeurs UV comme telles:
for(int i = 0;i < vertices.Length; i++) {
vertices[i] = getPointPosOnSphere(UV[i].y,UV[i].x,HalfDiamater);
}
Là, vous pouvez gérer la position du quad sur votre logiciel 3D préféré (ou même par code à travers l'unité) simplement en attribuant des valeurs UV (si de 0 à 1 sur les deux axes, le quad sera enroulé tout autour de la sphère)
AVERTISSEMENT: Pour utiliser des UV, vous devrez effectuer une conversion de radians en degrés. (comme UV est de 0 à 1)