Pregunta

tengo actualmente ninguna solución para la textura de la cartografía de un icosaedro sin una costura de polo a polo. El mapeado de texturas de esta primitiva parece ser un problema común, que no está completamente resuelto todavía. He hecho un gran trabajo de investigación y he intentado un montón de diferentes enfoques para generar las coordenadas UV, la más cercana (y más pequeño) enfoque es la siguiente:

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

Un icosaedro o geosfera es parte de diversos marcos de código abierto, como jMonkeyEngine o geist3d pero ninguna de las implementaciones parece funcionar correctamente. Debe ser imposible para mapear una textura rectangular desplegada o estoy equivocado? Cada fragmento de código es bienvenido.

He subido el proyecto Xcode aquí que se construye con openFrameworks 0.61 para iPhone. También hay dos archivos PNG en el interior, cada una de ellas muestra otra variación de la costura.

¿Fue útil?

Solución

Es necesario cambiar la imagen de la textura, la imagen de textura que tiene es una distorsión de la esfera en la que el polo se estira en una línea, usted nunca será capaz de asignar esto correctamente a un icosaedro, con el fin de hacer lo que necesitaría una división más como la longitud y la latitud del sistema, que tal distorsión viene. En lugar necesita una imagen de textura en el que el polo está dividido en varios puntos distintos. Esto se puede ver en algunos mapas del mundo donde tratan de minimizar la distorsión de la cartografía de una esfera sobre una superficie plana. p.ej. http://www.planetaryvisions.com/Project.php?pid=2236

Se puede encontrar algo de información bien en diferentes formas para dar textura a una esfera en http: // www. vterrain.org/Textures/spherical.html

Otros consejos

Superficie del icosaedro tiene una topología de una esfera. La superficie de una textura 2D tiene una topología de un avión. Existen no difeomorfismo entre esfera y el plano. Es decir, no hay ninguna asignación sin estiramiento y desgarramiento entre la textura y la superficie 2D icosaedro.

Sin embargo, hay una asignación entre un cubemap y un icosaedro.

Me doy cuenta de esta pregunta es viejo, pero ya que nadie menciona la siguiente solución, que pensé contesto.

dos soluciones posibles:

  1. Cuando la construcción de la malla, detectar si un triángulo se sienta en la costura. Si es así, ajustar las coordenadas de textura mediante el uso de x + 1 para cada vértice en el lado lejano de la costura. Establecer su textura para envolver horizontal y que va a deshacerse de la costura, por lo menos para la mayoría de sus polígonos.
  2. Mejor aún: calcular coordenadas de la textura en el fragment shader, en base a la superficie normal. Esto deshacerse de la costura por completo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top