Dans Blender, j'ai créé une sphère avec une texture panoramique à l'intérieur. J'ai également créé manuellement un maillage plan (incurvé pour correspondre à la taille de la sphère) qui se trouve sur le mur intérieur où je peux dessiner une texture différente.
C'est génial, mais je veux vraiment réduire le travail manuel et faire une partie de ce travail dans un script - comme avoir une variable pour l'image panoramique et les coordonnées de la zone de la photo que je veux remplacer par une nouvelle engrener.
La partie la plus difficile à faire sera de créer un maillage incurvé dans le code qui peut s'asseoir sur la paroi intérieure d'une sphère.
Est-ce que quelqu'un peut-il me montrer la bonne direction?
unity
mesh
dynamic-mesh
user5025
la source
la source
Réponses:
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:
θ 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:
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:
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)
la source
La réponse de Géry Arduino ci-dessus m'a orienté dans la bonne direction, mais je voudrais ajouter quelques choses ici.
1) Le suivi ne fonctionnera pas dans l'unité en raison des différences du système de coordonnées
changer cela en
2) Je n'étais pas clair sur la plage d'entrée des valeurs longues et latentes définies dans la signature de la méthode
Les valeurs de longitude et de latitude doivent être exprimées en radians. Leur gamme est la suivante
la source