En mi aplicación dibujo un montón de cubos a través de OpenGL ES Api. Todos los cubos tienen las mismas dimensiones, solo que están ubicados en diferentes coordenadas en el espacio. Puedo pensar en dos formas de dibujarlos, pero no estoy seguro de cuál es el más eficiente. No soy un experto en OpenGL, así que decidí preguntar aquí.Manera eficiente de dibujar en OpenGL ES
Método 1, que es lo que uso ahora: dado que todos los cubos son de dimensiones idénticas, calculo el buffer de vértice, el buffer de índice, el buffer normal y el buffer de color solo una vez. Durante una actualización de la escena, repaso todos los cubos, hago bufferData() para el mismo conjunto de búferes y luego dibujo la malla triangular del cubo usando la llamada a drawElements(). Como cada cubo está en una posición diferente, traduzco el mvMatrix antes de dibujar. bufferData() y drawElements() se ejecuta para cada cubo. En este método, probablemente guarde mucha memoria, al no calcular los búferes todo el tiempo. Pero estoy haciendo muchas llamadas a drawElements().
El método 2 sería: Tratar todos los cubos como un conjunto de polígonos repartidos por toda la escena. Calcule vértices, índices, colores, búferes normales para cada polígono (en realidad, triángulos dentro de los polígonos) y empújelos a la memoria de la tarjeta gráfica en una sola llamada a bufferData(). Luego, dibuja con una sola llamada a drawElements(). La ventaja de este enfoque es que hago solo una llamada bindBuffer y drawElements. La desventaja es que uso mucha memoria para crear los buffers.
Mi experiencia con OpenGL es lo suficientemente limitada como para no saber cuál de los métodos anteriores es mejor desde el punto de vista del rendimiento.
Lo estoy usando en una aplicación WebGL, pero es una pregunta genérica de OpenGL ES.
No sé la respuesta, pero después de 2 días sin respuestas yo suspiro Pero su mejor enfoque es intentar implementar el método 2 y ejecutar algunas pruebas de rendimiento. – LarsH
Sí, creo que también. Publicaré lo que encuentre. – Jayesh