2010-07-30 8 views
5

Entonces, en una aplicación de renderizado OpenGL, generalmente es mejor crear y mantener un búfer de vértices a lo largo de la vida de una aplicación y simplemente intercambiar los datos de cada cuadro con glBufferData, o es mejor simplemente eliminar el VBO y recrearlo en cada cuadro?¿Es mejor crear nuevas VBO o simplemente intercambiar los datos? (OpenGL)

La intuición me dice que es mejor intercambiar datos, pero algunos programas de ejemplo que he visto hacen lo segundo, así que estoy un poco confundido.

Leí el documento técnico de Nvidia sobre VBO, pero como soy un novato en opengl, no tiene mucho sentido.

Gracias de antemano por y asesoramiento

Respuesta

5

Dado que se está generando un nuevo conjunto de datos de cada cuadro de la documentación parece indicar que GL_STREAM_DRAW es la forma correcta de hacer las cosas.

0

Lo significativo de los VBO es que son búferes de datos de procesamiento que se almacenan en la memoria de gráficos y no en la memoria principal de la computadora. Eso hace que su uso sea muy eficiente cuando los datos en ellos no se actualizan (demasiado) con frecuencia, porque cada vez que haces eso, la computadora tendrá que transferir (potencialmente grandes cantidades de datos) desde la memoria principal a la gráfica, que es lenta. .

Por lo tanto, el caso ideal es poner todos los datos de renderización necesarios en VBO una vez y luego manipularlos únicamente mediante funciones de OpenGL como la transformación de matriz o mediante sombreadores.

Así que, por ejemplo, coloque las coordenadas del espacio del mundo de cada malla y las coordenadas de la textura en VBO y nunca vuelva a tocarlas directamente; usarías la matriz de vista de modelo, las funciones de iluminación y los sombreadores para renderizarlos.

Puede hacer más para optimizar el uso de VBO, pero eso es lo básico tal como lo he entendido.

Encuentre algunos buenos consejos y más detalles aquí: How do I use OpenGL 3.x VBOs to render a dynamic world?

Cuestiones relacionadas