studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones c++ linux opengl bloom

c++ - programacion - ¿Cómo agregar efecto brillante a una línea para OpenGL?



manual de programacion android pdf (4)

¿Cómo puedo agregar un efecto brillante a una línea que dibujo? Estoy usando OpenGL para Linux.


Sin usar sombreadores, también puede intentar renderizar para texturar y hacer un desenfoque radial. Como punto de partida, echa un vistazo a NeHe-Tutorials .


Yo también una vez esperé que hubiera una solución muy simple para esto, pero desafortunadamente es un poco complicado, al menos para un principiante.

La forma en que los efectos brillantes se implementan hoy, independientemente de API (D3D, OpenGL) es con pixel / fragment-shaders. Por lo general, involucra múltiples pases de renderizado donde renderiza su escena, luego renderiza un pase donde solo son visibles los "objetos brillantes", luego aplica un pixel bloom y los compone juntos.

Vea el enlace provisto por @Valmond para detalles

Editar:

Se debe agregar que esto se puede lograr con el renderizado diferido, donde las normales, las posiciones y otra información como una "bandera de brillo" se representan en una textura, es decir, se almacenan en diferentes componentes de la textura. Luego, un sombreador leerá las texturas y realizará cálculos de rayos y efectos de posprocesamiento en una sola pasada, ya que todos los datos que necesita están disponibles a partir de esa textura procesada.


Puede implementar el efecto de desenfoque radial descrito en la Lección 36 de Nehe . La idea principal es convertir el dibujo en una textura, y hacer eso N veces con un pequeño desplazamiento después de cada renderizado, hasta que el dibujo esté listo para ser copiado al framebuffer.

He escrito una pequeña demostración que usa Qt y OpenGL . Puedes ver el dibujo original (sin el desenfoque) a continuación:

La siguiente imagen muestra el dibujo con el efecto de desenfoque activado:

Sé que no es mucho, pero es un comienzo.