Domanda

devo attualmente nessuna soluzione per la texture mapping un icosaedro, senza una cucitura da un polo all'altro. La texture mapping di questa primitiva sembra essere un problema comune, che non è ancora completamente risolto. Ho fatto un sacco di ricerca e ho provato un sacco di diversi approcci per la generazione delle coordinate UV, la più vicina (e più piccola) approccio è questo:

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

Un icosaedro o geosfera fa parte di vari framework open-source, come ad esempio jMonkeyEngine o Geist3D ma nessuna delle implementazioni sembra funzionare correttamente. Dovrebbe essere non impossibili da mappare una texture rettangolare spiegato o mi sbaglio? Ogni frammento di codice è il benvenuto.

Ho caricato il progetto Xcode qui che è costruito con openFrameworks 0,61 per i phone. Ci sono anche due file PNG dentro, ciascuno di essi mostra un'altra variante cucitura.

È stato utile?

Soluzione

È necessario modificare la vostra immagine Struttura, l'immagine di texture che hai è una distorsione della sfera dove il polo è allungata in una linea, non si sarà mai in grado di mappare questo correttamente per un icosaedro, al fine di fare in modo che avrebbe bisogno di una divisione più come la longitudine e la latitudine sistema che tale distorsione proviene. Invece è necessario immagine una texture dove il polo è suddiviso in diversi punti distinti. Si può vedere questo su alcune mappe del mondo in cui si cerca di ridurre al minimo la distorsione da mappare una sfera su una superficie piana. per esempio. http://www.planetaryvisions.com/Project.php?pid=2236

Si possono trovare alcune utili informazioni su modi diversi di texture Un ambito in http: // www. vterrain.org/Textures/spherical.html

Altri suggerimenti

Superficie di icosaedro ha una topologia di una sfera. Superficie di una texture 2D ha una topologia di un aereo. Non esistono diffeomorfismo tra sfera e aereo. Cioè, non v'è alcuna mappatura senza tratti e lacrime tra texture 2D e la superficie icosaedro.

Tuttavia, v'è una mappatura tra un cubemap e un icosaedro.

Mi rendo conto che questa domanda è vecchia, ma dal momento che nessuno ha menzionato la seguente soluzione, ho pensato rispondo.

Due possibili soluzioni:

  1. Nella costruzione della rete, rilevare se un triangolo siede sulla cucitura. In tal caso, regolare le coordinate texture utilizzando x + 1 per ogni vertice sul lato opposto della cucitura. Impostare la vostra struttura per avvolgere in orizzontale e si sbarazzarsi della cucitura, almeno per la maggior parte dei vostri poligoni.
  2. Ancora meglio: calcolare la coordinata della texture nella vostra degli shader frammento, in base alla superficie normale. Questo permetterà di eliminare completamente la linea di giunzione.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top