/ / Muchos objetos con diferentes texturas en OpenGL ES 2.0 - opengl-es, opengl-es-2.0

Muchos objetos con diferentes texturas en OpenGL ES 2.0 - opengl-es, opengl-es-2.0

Soy nuevo en OpenGL ES 2.0 con su canalización programable y estoy aplicando una aplicación que representa muchos objetos, todos con diferentes texturas. Entonces, ¿esto requerirá llamar a glDrawArrays para cada objeto y cambiar las texturas entre llamadas? ¿O hay otra forma de dibujar múltiples objetos con diferentes texturas con una sola llamada glDrawArrays?

Lo pregunto porque noté que hacer muchas llamadas a glDrawArrays es MUCHO más lento cuando se intenta usarlas en lugar de glBegin / glEnd con OpenGL "de escritorio".

Estoy renderizando mosaicos de mapa para que TODAS las texturas sean diferentes, se carguen dinámicamente (no pueden pasar mucho tiempo procesándolas como si se hubieran cargado una vez) y también bastante grandes (hasta 512x512).

Respuestas

3 para la respuesta № 1

Desafortunadamente, no existe una forma simple de aplicar múltiples texturas en un solo lote glDrawArrays llamada. Sin embargo, hay formas de hacerlo funcionar. Una de las estrategias más comunes se conoce como Texture Atlas. Básicamente, la idea es combinar muchas imágenes juntas en una textura más grande, con cada subimagen ocupando un sub-rectángulo conocido de la textura. Cuando los asigna a sus primitivas, proporciona las coordenadas del sub-rectángulo correspondiente a la imagen que desea mostrar.

Un atlas de texturas funcionará en una gran cantidad decasos, pero puede ser relativamente complejo de configurar. Si no tiene que hacer una textura diferente para cada objeto, lo primero que debe intentar es simplemente agrupar tantas primitivas que usen la misma textura como sea posible.

Si no estaba utilizando OpenGL ES, también podría considerar el uso de matrices de texturas, si sus texturas son todas del mismo tamaño.