2011-11-28 14 views
13

Come posso aggiungere un effetto luminoso a una linea che disegno? Sto usando OpenGL per Linux.Come aggiungere un effetto luminoso a una linea per OpenGL?

+2

Questo è comunemente chiamato "aggiunta [fiore] (http://en.wikipedia.org/wiki/Bloom_ (shader_effect))", per facilitare la ricerca. C'è una bella sezione su come farlo [qui] (http://ofps.oreilly.com/titles/9780596804824/chadvanced.html#fig-BloomTriptych) – bobobobo

+0

C'è anche un grande riassunto degli effetti di luce [qui] (http://prideout.net/archive/bloom/) – bobobobo

risposta

7

Anch'io una volta speravo che ci fosse una soluzione molto semplice a questo, ma sfortunatamente è un po 'complicato, almeno per un principiante.

Il modo in cui gli effetti luminosi vengono implementati oggi, indipendentemente dall'API (D3D, OpenGL) è con pixel/frammenti-ombreggiatori. Di solito coinvolge più passaggi di rendering in cui si esegue il rendering della scena, quindi si esegue il rendering di un passaggio in cui sono visibili solo "oggetti luminosi", quindi si applica un pixelhader di fioritura e si compongono insieme.

consultare il link fornito da @Valmond per i dettagli

Edit:

Va aggiunto che questo può essere realizzato con il rendering differito, dove normali, le posizioni e le altre informazioni come una "bandiera" è bagliore reso a una trama, cioè memorizzato in diversi componenti della trama. Quindi uno shader leggerà dalle trame e eseguirà calcoli fulminei ed effetti di post-elaborazione in un unico passaggio poiché tutti i dati di cui ha bisogno sono disponibili da quella texture renderizzata.

1

Senza utilizzare gli shader, si potrebbe anche provare a renderizzare texture e a eseguire una sfocatura radiale. Come punto di partenza controlla NeHe-Tutorials.

8

È possibile implementare l'effetto sfocatura radiale descritto in Nehe Lesson 36. L'idea principale è di rendere il disegno su una texture, e farlo N volte con un piccolo offset dopo ogni render, fino a quando il disegno è pronto per essere copiato nel framebuffer.

Ho scritto una piccola demo che utilizza Qt and OpenGL. Si può vedere il disegno originale (senza sfocatura) qui sotto:

enter image description here

L'immagine successiva mostra la disegno con la sfocatura effetto acceso:

enter image description here

lo so non è molto, ma è un inizio.

Problemi correlati