Me gustaría hacer un juego de muchos cubos y planeo ponerlo en plataformas móviles y también en la web usando webgl. Mi problema es que cuando realizo una llamada de drawelements por cubo, aprieto la velocidad de fotogramas. ¿Hay alguna manera de hacer una sola llamada a OpenGL para dibujar? La única diferencia entre los cubos sería posición y color.¿La manera más eficiente de dibujar objetos idénticos múltiples?
Respuesta
Me encontré con el mismo problema yo mismo. Hice una pregunta similar y la respondí ayer mismo. Echar un vistazo a:
Efficient way of drawing in OpenGL ES
desea crear sus buffers de vértices y cargarlas en memoria de tarjeta gráfica solamente una vez usando gl.bufferData. Luego use referencia a ese buffer cada vez que haga gl.drawElements o gl.drawArrays. Hasta la próxima vez que cambie el contenido de su escena 3D, puede usar este búfer cargado en la memoria de la tarjeta gráfica.
Sigue el modelo de UITableView en cómo dequeue las celdas. Construiría un objeto que realiza un seguimiento de los objetos que ha dibujado y los vincula a un Identificador. Luego, simplemente puede quitarlos de la cola con dicho identificador. Si sabe que va a dibujar muchas versiones del mismo objeto, use ese objeto para minimizar la representación/las asignaciones.
Si está utilizando matrices de vértice para sus glDrawElements(), le sugiero que utilice Objetos de búfer de vértice. Esto almacenará el lado del servidor de datos (en GRAM) en lugar del lado del cliente (en la RAM del sistema). De esta forma puede hacer llamadas glDrawElements() con mucho menos CPU < -> gastos generales de transferencia de datos GPU.
Como alternativa, puede almacenar sus cubos en listas de visualización. De esta forma podría usar glTranlate() para mover un cubo y luego simplemente llamar a la lista de visualización para renderizarlo. La única advertencia para usar listas de visualización es que haga lo que haga en la lista de visualización es inmutable; no puede cambiar las llamadas en la lista de visualización sin recompilarlo por completo.
OpenGL ES no admite listas de visualización. –
- 1. ¿Cómo verificar la matriz idéntica de la manera más eficiente?
- 2. Manera eficiente de dibujar en OpenGL ES
- 3. Algoritmo para dibujar árboles de manera eficiente
- 4. ¿La manera más eficiente de crear miniaturas?
- 5. La manera más eficiente de dibujar un grupo de líneas 3d en matlab
- 6. La manera más eficiente de dibujar partículas en HTML5 en el iPad 2
- 7. Método más eficiente de dibujar miles de partículas (Java/Android)
- 8. Uso de múltiples asignadores de manera eficiente
- 9. ¿Quitar objetos idénticos en Ruby?
- 10. Manera más eficiente de monitorear una cola
- 11. manera más eficiente de extraer una cadena
- 12. Scripting HTTP de manera más eficiente
- 13. Cuál es la manera más eficiente de restaurar bases de datos múltiples en SQL 2008
- 14. Android cargando imágenes al servidor de la manera más eficiente
- 15. ¿La manera más eficiente de nombrar un avatar de usuario?
- 16. La manera más eficiente de hacer un registro de actividad
- 17. ¿Cuál es la forma más eficiente de dibujar voxels (cubos) en OpenGL?
- 18. ¿La manera más eficiente de indexar una matriz devuelta?
- 19. La manera más eficiente de convertir BCD a binario
- 20. La manera más eficiente de invertir una matriz numpy
- 21. ¿La manera más eficiente de contar las ocurrencias?
- 22. ¿La manera más eficiente de obtener varios hashes en Redis?
- 23. manera más eficiente para extraer componentes de la dirección
- 24. ¿La manera más eficiente de almacenar URLs en Mysql?
- 25. Rails as_json issue - Cómo incluir objetos anidados de manera eficiente?
- 26. Manera eficiente de llamar .Sum() en propiedades múltiples
- 27. manera más eficiente de analizar este lenguaje de scripting
- 28. Manera más sencilla para ordenar la lista de objetos
- 29. Manera más eficiente de procesar una cola con hilos
- 30. ¿Existe alguna manera más eficiente de obtener un método anotado?
¿Las posiciones de los cubos entre sí van a cambiar con el tiempo? – LarsH
Posiblemente cambien con el tiempo, ya que me gustaría objetos destructibles. – Xavier
Vea también: http://stackoverflow.com/questions/9352355/draw-many-of-the-same-object-quickly-in-opengl – jwrush