¿La forma más rápida de dibujar pequeñas partículas en opengl?


8

Pregunta rápida: ¿Cuál es el método más rápido para renderizar una gran variedad de partículas 4x4 / 8x8 en opengl? Actualmente paso 2 triángulos para cada uno, pero creo que es lento, así que realmente me gustaría saber si lo estoy haciendo bien .....


1
Solo un recordatorio de que, dado que esta es una pregunta de rendimiento, debe medir el rendimiento en su plataforma de destino, (a) para asegurarse de que sea realmente lo suficientemente costoso como para que valga la pena preocuparse y (b) para probar la aceleración de cualquier solución propuesta.
Nathan Reed

Respuestas:


6

Puedes dibujar puntos con OpenGL.

Desea llamar a glDrawArrays () o glDrawElements () con GL_POINTS (en lugar de GL_TRIANGLE_STRIP o lo que esté utilizando).

Esto atraerá puntos a la pantalla en función del tamaño de punto actual, que puede establecer mediante glPointSize () . También puede alias estos puntos, pero en mi experiencia no todos los controladores / hardware admiten puntos con alias.

No puedes texturizar estos puntos; son solo un solo color.


Gracias por la pista. ¿Sabes si podría hacer el Método GL_POINT con sombreadores para poder asignarles también una textura?
user1010005

1
Puede usarlo con sombreadores, pero solo hay un vértice para un punto (en el centro), por lo que puede tener dificultades para encontrar las coordenadas de texto. stackoverflow.com/questions/5839095/... parece que habla un poco sobre esto ...
notlesh

También puede establecer un sprite de punto con GL_POINTS.
Mick

1
@ user1010005 Para el mapa de texturas con GL_POINTS, puede mirar GL_POINT_SPRITE_ARB. Además, estoy bastante seguro de que los puntos siempre terminan ocupando el mismo número de píxeles en la pantalla, sin importar qué tan cerca o lejos estés de ellos.
kevintodisco

@ktodisco, puede pasar el tamaño en puntos como un atributo. Logré un efecto de estrella decente haciendo esto. para cambiar el tamaño en el sombreador vertical, asigne la variable gl_PointSize
notlesh

3

En el núcleo OpenGL 3.2 y superior, los sombreadores de geometría están disponibles para su uso. Para dar una breve descripción, solo le diría a OpenGL que dibuje los puntos que representan las posiciones de sus partículas, y estos puntos pasarían a través del sombreador de vértices normalmente, pero luego cuando llegan al sombreador de geometría, construye el rectángulo (fuera de dos tris) emitiendo vértices a la siguiente etapa de la tubería. Junto con los vértices, puede generar mediante programación coordenadas normales y coordenadas de textura.

Como todo esto se hace en hardware, estoy bastante seguro de que es la forma más rápida en este momento para representar partículas de sprites puntuales.


1
Probablemente sea una solución mejor que GL_POINTS, pero no funcionará para implementaciones antiguas de OpenGL (y OpenGL ES).
notlesh

Suena genial pero planeo portar mi juego a la plataforma Android :(
user1010005

2
@ user1010005 Solo un consejo, debe mencionar que cuando hace la pregunta, para que sepamos con qué restricciones trabajar :)
kevintodisco

Soy un principiante con opengl lo siento D:
user1010005

Me ENCANTARÍA ver el sombreador de geometría disponible en OpenGL ES. ) =
notlesh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.