En primer lugar, probablemente debería utilizar VBO todo el tiempo. Para objetos pequeños y grandes.
Luego, el segundo problema es "¿cómo combinar varios objetos separados en un objeto grande?" - para reducir el número de llamadas OpenGL que deben realizarse. Generalmente, los objetos que usan la misma textura (s), configuraciones de materiales y sombreadores se pueden combinar. P.ej. Si tiene toneladas de cajas idénticas por ahí, podría tener sentido combinarlas en varias "cajas de cajas" más grandes.
Si un objeto es una lista triangular, entonces la combinación es fácil; solo crea una lista triangular grande fuera de las listas fuente. Si un objeto es una tira de triángulo, entonces tienes que usar "triángulos degenerados" para unir las tiras (esta es una optimización muy útil para un solo objeto también, si no se puede representar como una sola tira).
Un "triángulo degenerado" es un triángulo que tiene dos o tres índices de vértices idénticos. El hardware de gráficos puede reconocerlos y omitirlos muy rápido.
Así que si tiene, por ejemplo, dos tiras con un triángulo cada una, para un total de seis vértices.
Los índices triángulo original de las bandas serían:
1) 0, 1, 2
2) 0, 1, 2
Ahora se unen a todos los vértices juntos, por lo que terminan con 6 vértices.
1) 0, 1, 2 (unchanged)
2) 3, 4, 5
Ahora tiene una matriz de vértices, pero todavía dos tiras separadas. Tiene que unirse a ellos mediante la inserción de triángulos degenerados:
1) 0, 1, 2, 2, 2, 3, 4, 5
(Creo que lo anterior es correcto, pero en realidad no han verificado)
La idea es la siguiente: con la tira anterior, la tarjeta gráfica sería dibujar triángulos de estos vértices:
0, 1, 2
1, 2, 2 <- degenerate! won't be drawn
2, 2, 2 <- degenerate! won't be drawn
2, 2, 3 <- degenerate! won't be drawn
3, 4, 5
en caso general, ya sea que usted tiene que insertar dos o tres triángulos degenerados basados en la longitud de la banda original, por lo sinuoso que el triángulo sigue siendo correcta.
Acabo de implementar un método descrito en http://craiggiles.wordpress.com/2009/08/03/opengl-es-batch-rendering-on-the-iphone/ y funciona bien. – RandomEtc