Domanda

Sto cercando di scrivere un gioco che si occupa di molti circoli (beh, Triangolo fan, ma si ottiene l'idea). Ogni cerchio avrà una posizione x, y posizione, e una proprietà di massa. proprietà di massa Ogni del cerchio sarà diverso. Inoltre, voglio colorare alcuni gruppi di cerchi diversi, mantenendo il centro del cerchio trasparente, e dissolvenza a opaco lungo il perimetro dei cerchi.

Mi è stato detto di usare VBOs, e sono stato Googling per tutto il giorno. Vorrei un esempio completo di come vorrei richiamare questi cerchi e una spiegazione di come funzionano VBOs, pur mantenendo quella semplice spiegazione.

È stato utile?

Soluzione

Non ho ancora implementato VBOs me stesso, ma da quanto ho capito, hanno un lavoro simile a oggetti texture. Infatti, quando mi sto ricordando e spiegare agli altri quello VBOs sono, mi piace in modo non corretto oggetti chiamata struttura 'oggetti tampone tessitura', per rafforzare la somiglianza concettuale.

(da non confondere con tampone texture dall'estensione NVIDIA specificato < a href = "http://www.opengl.org/registry/specs/EXT/texture_buffer_object.txt" rel = "nofollow noreferrer"> GL_EXT_texture_buffer_object .)

Quindi cerchiamo di pensare: che cosa sono oggetti texture? Sono oggetti generate utilizzando glGenTextures(). glGenBuffersARB() fa cosa simile. Un'analogia applica con glBindTexture() e glBindBufferARB().

(come di OpenGL 1.5, le funzioni e glGenBuffers() glBindBuffer() sono entrati OpenGL nucleo, in modo da poterli utilizzare al posto degli equivalenti di estensione.)

Ma che cosa sono esattamente questi 'oggetti texture', e cosa fanno? Beh, considera che si può, in realtà, utilizzare glTexture2D() in ogni fotogramma di creare una texture. oggetti texture servono solo a ridurre il traffico tra la GPU e la memoria principale; invece di inviare tutta la matrice di pixel, si invia solo il "nome OpenGL" (vale a dire, un identificatore intero) dell'oggetto tessitura, che si sa essere statico.

VBOs servono scopo simile. Invece di inviare l'array di vertice più e più volte, si carica la matrice una volta utilizzando glBufferData() e poi inviare solo il "nome OpenGL" dell'oggetto. Essi sono l'ideale per gli oggetti statici, e non così grande per gli oggetti dinamici. In realtà, molti motori 3D generici come Ogre3D forniscono un modo per specificare se una maglia è dinamico o statico, molto probabilmente al fine di permettere a decidere tra VBOs e array di vertice.

Per i vostri scopi, VBOs sono non la risposta giusta. Volete numerosi oggetti semplici che vengono continuamente morphing e mutevoli. Con semplice, intendo quelli con meno di 200 vertici. A meno che non si ha intenzione di scrivere uno shader molto intelligente e complesso vertice, VBOs sono non per voi. Si desidera utilizzare gli array di vertice, che si può facilmente manipolare dalla CPU principale e aggiornarli ogni fotogramma senza effettuare chiamate speciali per scheda grafica per ricaricare l'intera VBO sulla scheda grafica (che può risultare più lento di solo l'invio di array di vertice).

Ecco una abbastanza buona letscallit "man page" di nVidia circa VBO API . Leggetelo per ulteriori informazioni!

Altri suggerimenti

buona VBO esercitazione

Quello che stai facendo assomiglia particelle, si potrebbe desiderare di google "rendering particella" per ogni evenienza.

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