2010-11-21 17 views
6

Consentitemi di avere una mesh (ad esempio una sfera) al centro della stanza, piena di cubi e una fonte di luce. Come posso rendere semplice e veloce il cast di shadow in OpenGL, usando solo le funzioni "standard" (fisse)? Nota: il risultato deve contenere anche il cubo e le ombre delle sfere.Come creare ombre facili e indipendenti dalla scena senza ombreggiatori in OpenGL

+1

BTW- "funzioni standard" non sono proprio l'espressione che stai cercando. "Funzione fissa" è più simile, ma gli shader sono ciò che è stato "standard" per diversi anni. – Kos

+0

Sì, stavo pensando a come chiamare questo quando ha composto la mia domanda. Adesso è risolto, grazie! =) – shybovycha

risposta

4

Se è possibile generare una sagoma della sfera, è possibile utilizzare shadow volumes. L'hardware nVidia ha anche supportato la funzione fissa shadow mapping per un periodo giusto.

I volumi ombra hanno lo svantaggio di requisiti di riempimento molto elevati. Le mappe shadow possono essere migliori ma richiedono un passaggio extra.

Se si sta proiettando su un singolo piano, potrebbe essere più facile solo per project the object on to a plane.

+0

Il punto è usare un algoritmo universale - non solo per la silhouette della sfera =) Ma grazie comunque! =) – shybovycha

+0

Scusa, non ho cliccato un secondo link ... Sì, avevi ragione, la shadow mapping è abbastanza buona e l'ho scoperta da solo (stupido) =) – shybovycha

+0

@shybovycha: Solo per quello che sai. NESSUNA delle tecniche sopra elencate sono solo per le sfere;) – Goz

2

Non esiste un modo facile e veloce. Ci sono molte tecniche diverse, ognuna delle quali ha i suoi pro e contro. Puoi guardare un progetto che ospita su github, che usa un codice molto semplice per creare un'ombra, usando la tecnica del volume d'ombra (http://iuiz.github.com/VolumeShadow/). Tuttavia è scritto in Java, ma non dovrebbe essere difficile portarlo in qualsiasi altra lingua.

I modi più importanti per creare le ombre sono il cosiddetto metodo "shadow mapping", in cui si esegue il rendering della scena (con la fotocamera alla sorgente luminosa, diretta a ciascun oggetto di fusione shadow) su una trama. E la seconda tecnica è il metodo voulume ombra (reso famoso con Doom3).

+0

Grazie, ma ho già avuto l'idea =) Le ombre proiettive sarebbero essere abbastanza =) – shybovycha

1

Ho trovato un modo utilizzando StencilBuffers. Essendo un po 'confuso per un po', alla fine ho avuto l'idea - con questa cosa più difficile sarebbe passare attraverso ogni fonte di luce e proiettare tutti gli oggetti scena. Questo sembra più bello di texture shadowing e funziona più velocemente delle ombre volumiche. here e here sono alcune risorse che mi hanno aiutato a capire il passo della moltiplicazione della matrice (mi ha confuso un po 'quando stavo guardando attraverso la demo di dino). Per quanto mi riguarda, questo metodo è più facile da capire e da usare. L'unica domanda rimasta da risolvere è come calcolare la matrice di moltiplicazione.

Anche se questo metodo potrebbe essere modificato un po 'usando le textures as shown here.

Grazie a tutti! =)