Domanda

vorrei fare un gioco fuori di molti cubi e Sto pensando di mettere su piattaforme mobili e anche sul web tramite WebGL. Il mio problema è quando faccio una chiamata drawelements per cubo prendo un colpo sul frame rate. C'è un modo per fare una singola chiamata pareggio per es OpenGL per disegnare loro? L'unica differenza tra i cubetti sarebbe posizione e il colore.

È stato utile?

Soluzione

Mi sono imbattuto in stesso problema io stesso. Ho chiesto domanda simile e ha risposto da solo ieri. Date un'occhiata a:

modo efficiente di disegno in OpenGL ES

Si desidera creare i buffer vertex e caricarli memoria della scheda grafica utilizzando solo una volta gl.bufferData. Quindi utilizzare riferimento a tale buffer ogni volta che si fa gl.drawElements o gl.drawArrays. Fino alla prossima volta che il contenuto dei cambi di scena 3D, è possibile utilizzare questo buffer che viene caricato in memoria della scheda grafica.

Altri suggerimenti

seguire il modello di UITableView nel modo in cui le cellule DEQUEUE. Vorrei costruire un oggetto che tiene traccia degli oggetti che hai disegnato e li collega ad un identificatore. Poi si può semplicemente annullare l'accodamento con detto identificatore. Se sai che stai andando a disegnare molte versioni dello stesso oggetto, utilizzare quell'oggetto per ridurre al minimo rendering / allocazioni.

Se stai usando Vertex Array per le glDrawElements (), suggerirei invece di usare Vertex Buffer Objects. Questo memorizzerà il lato server di dati (in grammi) al posto di lato client (in RAM di sistema). In questo modo è possibile effettuare glDrawElements () chiama con molta meno CPU <->. Dati GPU generali del trasferimento

In alternativa, è possibile memorizzare sei cubi in elenchi di visualizzazione. In questo modo si potrebbe usare glTranlate () per spostare un cubo intorno e poi basta chiamare la lista di visualizzazione per renderla. L'unica avvertenza di utilizzare liste di visualizzazione è che qualunque cosa tu faccia nella lista di visualizzazione è immutabile; Non è possibile modificare le chiamate nella lista di visualizzazione senza dover ricompilare completamente.

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