Frage

Ich habe noch keine Lösung für die Texturabbildung einen Ikosaeder ohne Naht von Pol zu Pol. Das Textur-Mapping dieser primitiven scheint ein weit verbreitetes Problem zu sein, die noch nicht vollständig gelöst ist. Ich habe eine Menge Forschung gemacht und ich habe zur Erzeugung der UV-Koordinaten viele verschiedene Ansätze versucht, die meisten in der Nähe (und kleinste) -Ansatz ist diese:

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

Ein Ikosaeder oder Geosphäre ist ein Teil der verschiedenen Open-Source-Frameworks, wie Jmonkeyengine oder Geist3d aber keine der Implementierungen scheint korrekt zu funktionieren. Es sollte nicht unmöglich sein, eine entfaltete rechteckigen Textur abzubilden oder bin ich falsch? Jeder Code-Schnipsel ist willkommen.

Ich habe das Xcode-Projekt hochgeladen hier die mit openframeworks gebaut 0,61 für iPhone. Darüber hinaus gibt es zwei PNG-Dateien in jedem von ihnen zeigt eine weitere Naht Variation.

War es hilfreich?

Lösung

Sie benötigen eine Texturbild zu ändern, wird die Textur Bild, das Sie haben, ist eine Verzerrung der Sphäre, wo der Pol auf eine Linie gestreckt wird, werden Sie nie in der Lage sein, dies zu einem Ikosaeder richtig abzubilden, um so was Sie zu tun müsste eine Abteilung mehr wie die Längen- und Breitengrad-System, das eine solche Verzerrung kommt. Stattdessen müssen Sie ein Texturbild, wo der Pol in mehrere verschiedene Punkte gebrochen. Sie können sehen, auf einigen Weltkarten, wo sie versuchen, aus Abbildung einer Kugel auf eine flache Oberfläche, um die Verzerrung zu minimieren. z.B. http://www.planetaryvisions.com/Project.php?pid=2236

Sie können einige gute Informationen über verschiedene Wege finden, eine Kugel unter http Textur: // www. vterrain.org/Textures/spherical.html

Andere Tipps

Fläche Ikosaeder hat eine Topologie einer Kugel. Oberfläche einer 2D-Textur hat eine Topologie einer Ebene. Es gibt keinen Diffeomorphismus zwischen Kugel und Flugzeug. Das heißt, es ist keine Zuordnung ohne Dehnungen und Risse zwischen 2D-Textur und Ikosaeder Oberfläche.

Allerdings gibt es eine Zuordnung zwischen einer Cubemap und einem Ikosaeder.

Ich weiß, diese Frage ist alt, aber da niemand die folgende Lösung erwähnt, ich dachte, dass ich antworten würde.

Zwei mögliche Lösungen:

  1. Wenn das Netz der Konstruktion erkennen, ob ein Dreieck auf der Naht sitzt. Wenn dem so ist, passen die Texturkoordinaten durch für jeden Scheitelpunkt auf der anderen Seite der Naht unter Verwendung von x + 1. Legen Sie Ihre Textur horizontal wickeln, und Sie werden von der Naht loszuwerden, zumindest für die meisten Ihrer Polygone.
  2. Noch besser: berechnen die Textur in Ihrem Fragment-Shader-Koordinate, bezogen auf die Oberfläche normal. Dies wird vollständig loszuwerden, die Naht bekommen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top