Question

J'ai actuellement aucune solution pour la texture cartographie un icosaèdre sans couture d'un pôle à. La cartographie de la texture de ce qui semble primitive être un problème commun, qui ne sont pas encore complètement résolu. J'ai fait beaucoup de recherches et j'ai essayé beaucoup de différentes approches pour générer les coordonnées uv, approche le plus proche (et le plus petit) est la suivante:

GLfloat u = 0.5f * ( 1.0f + atan2( z , x ) * ( 1 / M_PI ));  
GLfloat v = acos( y ) * ( 1 / M_PI );

Un icosaèdre ou géosphère fait partie des différents frameworks open-source, tels que ou Geist3D mais jmonkey engine aucune des mises en œuvre semble fonctionner correctement. Il devrait être impossible de cartographier une texture rectangulaire déplié ou je me trompe? Chaque extrait de code est la bienvenue.

Je l'ai téléchargé le projet Xcode qui est construit avec openFrameworks 0,61 pour iPhone. Il y a aussi deux fichiers PNG à l'intérieur, chacun d'eux montre une autre variante de couture.

Était-ce utile?

La solution

Vous devez changer votre image de texture, l'image de texture que vous avez est une distorsion de la sphère où le pôle est étiré en une ligne, vous ne serez jamais en mesure de cartographier ce bien à un icosaèdre, afin de le faire vous aurait besoin d'une division plus comme la longitude et la latitude système où une telle distorsion provient. Au lieu de cela, vous avez besoin d'une image de texture où le pôle est divisé en plusieurs points distincts. Vous pouvez le voir sur certaines cartes du monde où ils tentent de minimiser la distorsion de la cartographie d'une sphère sur une surface plane. par exemple. http://www.planetaryvisions.com/Project.php?pid=2236

Vous pouvez trouver de bonnes informations sur les différentes façons de texturer une sphère http: // www. vterrain.org/Textures/spherical.html

Autres conseils

Surface de icosaèdre a une topologie d'une sphère. Surface d'une texture 2D a une topologie d'un avion. Il existe pas difféomorphisme entre sphère et plan. Autrement dit, il n'y a pas de correspondance sans étirements et des larmes entre la texture 2D et la surface de icosaèdre.

Cependant, il existe une correspondance entre un cubemap et un icosaèdre.

Je me rends compte de cette question est vieux, mais puisque personne n'a mentionné la solution suivante, je pensais que je lui répondais.

Deux solutions possibles:

  1. Lors de la construction du treillis, détecter si un triangle est situé sur la couture. Si oui, réglez les coordonnées de texture à l'aide x + 1 pour chaque sommet de l'autre côté de la couture. Réglez votre texture pour envelopper horizontalement et vous débarrasser de la couture, au moins pour la plupart de vos polygones.
  2. Mieux encore: calculer la coordonnée de texture dans votre fragment shader, en fonction de la surface normale. Cela va se débarrasser de la couture complètement.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top