2010-09-25 8 views
5

Da quello che ho raccolto ha usato sparse voxel octrees e raycasting. Non sembra che abbia usato opengl o direct3d e quando guardo il gioco Voxelstein sembra che i cubi in miniatura vengano effettivamente disegnati invece di un semplice mazzo di 2d quadrati. Il che mi ha colto alla sprovvista. Non sono sicuro di come lo faccia senza opengl o direct3d.Qualcuno può descrivere l'algoritmo usato dal motore Voxlap di Ken Silverman?

Ho provato a leggere il codice sorgente ma per me è stato difficile capire cosa stava succedendo. Vorrei implementare qualcosa di simile e vorrei che l'algoritmo lo facesse.

Sono interessato a come ha eseguito rendering, abbattimento, occlusione e illuminazione. Qualsiasi aiuto è apprezzato.

+1

È necessario aggiungere un collegamento al codice sorgente piuttosto che farci sapere a chi non lo sa rintracciare tramite un motore di ricerca –

risposta

6

L'algoritmo è più vicino al ray-casting che al ray-tracing. È possibile ottenere una spiegazione da Ken Silverman stesso qui:

http://www.jonof.id.au/forum/index.php?topic=30.0

In breve: su una griglia, memorizzare un elenco RLE di voxel superficiali per ogni x, y pila di voxel (se z significa 'up') .Supponendo 4 gradi di libertà, esegui il ray cast per ogni linea verticale sullo schermo e mantieni un elenco di span visibili che vengono ritagliati mentre viene disegnato ogni cubo. Per 6 gradi di libertà, fai qualcosa di simile ma con linee di scansione inclinate nello spazio dello schermo.

+0

Link is dead :( – oldmud0

5

non ho guardato lo stesso algoritmo, solo dagli screenshot:

sembra che i cubi in miniatura sono in realtà in corso di definizione, invece di solo un mucchio di piazza 2d

Yep, è così che funziona il ray-tracing. Non disegna i quadrati 2d, ma traccia i raggi. Se traccia i tuoi raggi contro molti cubi in miniatura, vedrai molti cubi in miniatura. La scena è rappresentata da molti cubi in miniatura (voxel), quindi li vedi quando ti guardi più da vicino. Sarebbe bello in realtà lisciare i dati in qualche modo (traccia contro la funzione di energia levigata) per renderli più agevoli.

Sono interessato a come si è esibito il rendering

da ray-tracing

abbattimento

alcuna necessità di abbattimento quando ray-tracing

occlusione

l'occlusione del voxel-voxel viene gestita in modo naturale mediante ray-tracing. Se disegna sprite può usare un buffer Z generato dal ray-tracer.

e l'illuminazione

E 'possibile approssimare il normale locale, cercando in cellule vicine e alla ricerca che sono occupati e che non sono. Quindi eseguire il calcolo dell'illuminazione.

Qualsiasi aiuto è apprezzato.

Grazie.