¿Cómo uso Vertex Buffer objetos para hacer muchos círculos diferentes?

StackOverflow https://stackoverflow.com/questions/1484572

  •  18-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de escribir un juego que se ocupa de muchos círculos (bueno, aficionados triángulo, pero usted consigue la idea). Cada círculo tendrá una posición x, posición y, y una propiedad de masas. de propiedad de masa de cada círculo será diferente. Además, quiero dar color a algunos grupos de círculos diferentes, mientras se mantiene un centro de círculo transparente, y la decoloración a opaco a lo largo del perímetro de los círculos.

Me dijeron utilizar OISCIV, y he estado buscando en Google durante todo el día. Quisiera un ejemplo completo de cómo quisiera llamar estos círculos y una explicación de cómo funcionan OISCIV, manteniendo esa explicación sencilla.

¿Fue útil?

Solución

No he implementado OISCIV mí todavía, pero por lo que entiendo, que funcionan de manera similar a los objetos de textura. De hecho, cuando yo estoy recordando a mí mismo y explicar a los demás lo son OISCIV, me gusta incorrectamente Llamada de textura objetos '' de amortiguación textura objetos, para reforzar la similitud conceptual.

(No para ser mezclado con tampón texturas de extensión especificada-NVIDIA < a href = "http://www.opengl.org/registry/specs/EXT/texture_buffer_object.txt" rel = "nofollow noreferrer"> GL_EXT_texture_buffer_object .)

Así que vamos a pensar: ¿cuáles son los objetos textura? Son objetos que generan usando glGenTextures(). glGenBuffersARB() hace algo similar. Una analogía se aplica con glBindTexture() y glBindBufferARB().

(A partir de OpenGL 1.5, funciones y glGenBuffers() glBindBuffer() han entrado en OpenGL núcleo, por lo que se pueden utilizar en lugar de los equivalentes de extensión.)

Pero, ¿qué son exactamente estos objetos textura '', y qué es lo que hacen? Bueno, tenemos en cuenta que se puede, de hecho, utilizar glTexture2D() en cada cuadro para establecer una textura. objetos textura sólo sirven para reducir el tráfico entre la GPU y la memoria principal; en lugar de enviar toda matriz de píxeles, se envía sólo el "nombre de OpenGL" (es decir, un identificador entero) del objeto textura que ustedes saben que es estática.

OISCIV sirven propósito similar. En lugar de enviar el conjunto de vértices y otra vez, se carga la matriz una vez usando glBufferData() y luego envía sólo el "nombre de OpenGL" del objeto. Son grandes para los objetos estáticos, y no tan grande para objetos dinámicos. De hecho, muchos motores 3D genéricos como Ogre3D le proporcionan una forma de especificar si una malla es dinámica o estática, muy probablemente, con el fin de que pueda decidir entre OISCIV y vertex arrays.

Para sus propósitos, OISCIV son no es la respuesta correcta. ¿Quieres numerosos objetos simples que se están transformando y cambiando continuamente. Por sencilla, me refiero a los que tienen menos de 200 vértices. A menos que usted tiene la intención de escribir un vertex shader muy elegante y complejo, OISCIV son no para usted. Que desea utilizar matrices de vértice, que se pueden manipular fácilmente desde la CPU principal y actualizarlos cada cuadro sin hacer llamadas especiales para tarjeta gráfica para volver a subir todo el VBO en la tarjeta de gráficos (que puede resultar más lento que simplemente enviar vertex arrays).

Aquí hay una letscallit bastante bueno "página del manual" de nVidia sobre VBO API . Leerlo para más información!

Otros consejos

buena vbo tutorial

Lo que está haciendo se ve como partículas, es posible que desee google "renderizado de partículas" por si acaso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top