Domanda

Ho un sistema di particelle in cui le posizioni e le varie proprietà sono memorizzate in un oggetto vertex buffer. I valori vengono continuamente aggiornati da un kernel CUDA. Al momento sto solo rendendoli utilizzando GL_POINTS come cerchi piatte. Ciò che mi interessa è il rendering queste particelle sono cose più coinvolti come modelli 3d di uccelli animati, per esempio. Sto cercando di capire quale sarebbe il metodo migliore per. Per il bene della conversazione diciamo l'animazione del modello uccello si compone di 3 fotogrammi (posizione delle ali e cosa no)

Posso vedere caricando i modelli in elenchi di visualizzazione e loop su tutte le particelle nella traduzione, rotazione, ecc la matrice quindi chiamando l'elenco di visualizzazione. Questo non sembra un approccio ideale perché richiederebbe portando tutti i dati delle particelle verso l'host da GPU solo per fare operazioni di matrice a spingere di nuovo alla GPU (a meno che non posso chiamare le funzioni di disegno da un kernel CUDA ?? ?)

Non so molto di shader, sarebbero stati in grado di gestire una cosa del genere?

A questo punto sto per lo più alla ricerca di consigli su cosa strada da seguire, ma se siete a conoscenza di articoli o tutorial che trattano l'argomento, complimenti.


Sto lavorando con l'OpenGL in modo nativo su Windows 7 a 64 bit con C ++. Non sto usando GLUT

È stato utile?

Soluzione

Probabilmente si desidera utilizzare: EXT_draw_instanced. Non ho mai effettivamente utilizzato Instancing, ma la maggior parte GPU moderna (GF6 e fino credo) consentono di alimentare la GPU un modello e un elenco di punti e lo hanno disegnare il modello in ogni punto.

Ti google qualche informazione in più e vedere quello che mi viene in mente ....

Beh, questa è la specifica ufficiale, e sembra che hanno un tutorial su di esso.

http://www.opengl.org/registry/specs/ARB /draw_instanced.txt

Altri suggerimenti

È necessario essere creativi per fare una cosa del genere. Se è stato utilizzato CUDA per calcolare una posizione e la rotazione in 2 trame galleggiante 3 componenti e quindi cotto un "indice" con ogni vertice e con incrementi di 1 per ogni istanza geometry allora si potrebbe scrivere un ombreggiatore che carica le trame e quindi utilizza vertex shader trama occhiata per selezionare il pixel corrispondente dal 2 trame e costruire una matrice di trasformazione. È quindi trasformare i verts della rete dalla matrice trasformare avete costruito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top