preconcetti
Ok, quindi quello che ho raccolto finora è questo:
- non utilizzare la pipeline fissa (deprecato o destinato a essere deprecato)
- vbos memorizza "modelli di oggetti" (n dati di vertici, principalmente)
- i vaos descrivono come vengono disposti i dati in modo che le chiamate di disegno sappiano quale parte di ciascun vbo è per quale tipo di informazioni sui vertici (un vao può riferirsi a più vbo, il contrario è piuttosto difficile)
- ogni chiamata di disegno invia anche dati vertici agli shader
Come vedo il 3D (opzionale)
Date queste informazioni, posso vedere come disegnare oggetti complicati in 3D sia molto bello con il moderno OpenGL. In pratica carichi un sacco di modelli di oggetti (probabilmente da Blender o altri software simili) in VBO con coordinate locali, e poi semplicemente fornisci a ciascuna istanza di un oggetto un diverso parametro shader (offset) per disegnare nello spazio mondiale.
Problema / domanda
In 2D, tuttavia, i problemi e le priorità sono completamente diversi. Non disegni oggetti molto complessi, non hai bisogno di matrici di proiezione complicate e quant'altro e shader sono molto più semplici.
Quale sarebbe il modo migliore per disegnare frequentemente (davvero frequentemente, praticamente ogni fotogramma) cambiando geometria con OpenGL moderno?
Nel paragrafo seguente puoi vedere alcune idee di problemi (il problema del cerchio e del rettangolo), che identificano meglio il tipo di cambiamenti che mi interessano.
I miei tentativi (facoltativo)
Quindi, ho iniziato a pensare come avrei gestito il disegno della geometria 2D di base sullo schermo:
- un quadrato: carica un
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO per la geometria di un quadrato nello spazio locale, quindi fornisci allo shader la larghezza effettiva del quadrato e le coordinate del mondo e le informazioni sul colore
si raffredda, sembra facile. Passiamo a un cerchio:
- un cerchio: triangolo fan con ... eh. quanta precisione (numero di vertici)? per i piccoli cerchi la precisione deve essere piccola e per i cerchi dei bug la precisione deve essere alta. Chiaramente il caricamento di 1 VBO non può essere adatto a tutti i casi. Cosa succede se devo aggiungere precisione perché un cerchio viene ridimensionato per essere più grande?
Meno fico. Passiamo a qualcosa di leggermente più semplice, un rettangolo:
- un rettangolo: eh. non esiste una "geometria generale del rettangolo". Hai solo una proporzione larghezza / altezza e il gioco è fatto, ma ogni rettangolo è probabilmente diverso se le dimensioni cambiano.
Come puoi vedere, le cose vanno in discesa da lì. Soprattutto con poligoni complessi e quant'altro.
Nessuna politica di codice: P
Ho solo bisogno di una panoramica dell'idea, non è necessario alcun codice, in particolare il codice C o C ++. Dì cose come: "crea un VBO con questi dati di vertice e poi associali, ...".