Pregunta

Necesito dibujar el fondo para un tirador de desplazamiento espacial en 2D. Necesito implementar 3 capas de estrellas: una nebulosa distante (moviéndose realmente lenta) en el fondo, una capa de estrellas lejanas (moviéndose lentamente) y una capa de estrellas cercanas (moviéndose normalmente) encima de las otras dos.

La forma en que lo intenté por primera vez fue usando 3 texturas de 320 x 480 que eran png transparentes de las estrellas. Usé GL_BLEND y SRC_ALPHA, ONE_MINUS_SRC_ALPHA.

Los resultados no fueron excelentes incluso en el 3GS. En los dispositivos de primera generación, el FPS cayó a 40..50, así que creo que lo estoy haciendo de la manera incorrecta.

Cuando deshabilito el GL_BLEND, todo funciona muy bien, incluso en los dispositivos de primera generación y el FPS vuelve a 60 ... así que debe ser el hecho de que estoy tratando de combinar texturas transparentes grandes.

El problema es que no sé cómo hacerlo de otra manera ...

¿Debo dibujar solo la primera nebulosa como una textura opaca y luego intentar emular la capa de estrella media y superior con pequeños puntos moviéndose alrededor de la pantalla?

¿Hay algún otro enfoque sobre el tema de la mezcla? ¿Como puedo acelerar el proceso de renderizado? ¿Es una gran textura (mosaico) la respuesta?

Por favor, ayúdame porque estoy atrapado aquí y no puedo salir.

¿Fue útil?

Solución

No sé cómo quieres que se vean tus estrellas, pero quizás quieras intentar moverlas de una textura a la geometría usando GL_POINTS en el DrawElements o DrawArrays tal vez solo reemplace las dos capas superiores con capas de geometría. Puede manipular los puntos utilizando PointSize , PointSizePointerOES y PointParameter para modificar la representación de los puntos.

Otros consejos

Es posible que desee utilizar texturizado múltiple para ver si eso lo acelera. A cada etapa de múltiples texturas se le puede asignar una matriz de transformación única, por lo que debería poder traducir cada capa a diferentes velocidades.

Creo que todos los modelos de iPhone admiten dos etapas de textura, por lo que debería poder combinar dos de sus capas en una sola llamada de dibujo. Es posible que aún deba recurrir a la mezcla para la tercera capa.

También tenga en cuenta que las pruebas alfa podrían ser más rápidas que las mezclas alfa .

¡Buena suerte!

La nebulosa posterior definitivamente debe ser opaca; todo lo demás se dibuja sobre él, y supongo que lo único detrás es negro. Además, el orgullo tiene un punto: asumir que sus capas de estrellas pueden tener efectivamente un alfa de 1 bit, definitivamente es algo que puede probar. De lo contrario, la técnica GL_POINTS que Harald menciona también funcionaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top