Ho un vertex che accetta i seguenti attributi:OpenGL: attributo singolo vertice per più vertici?
a_posCoord
: posizione del verticea_texCoord
: coordinata trama (passata allo shader frammento)a_alpha
: fattore di trasparenza (passato allo shader frammento
Gli oggetti che sto rendendo sono tutti "tabelloni" (una coppia di triangoli rettangoli per formare un rettangolo).
Sto utilizzando una singola chiamata a glDrawArrays
per il rendering di molti tabelloni pubblicitari, ognuno dei quali può avere un valore alfa univoco. Un singolo tabellone ha 6 vertici. Ecco alcuni pseudocodice per illustrare come organizzo vertice attributo tampone per un singolo cartellone:
vertexAttributes = [
px1,py1,pz1, // vertex 1: a_posCoord
tx1,ty1, // vertex 1: a_texCoord
alpha, // vertex 1: a_alpha
px2,py2,pz2, // vertex 2: a_posCoord
tx2,ty2, // vertex 2: a_texCoord
alpha, // vertex 2: a_alpha
px3,py3,pz3, // vertex 3: a_posCoord
tx3,ty3, // vertex 3: a_texCoord
alpha, // vertex 3: a_alpha
px4,py4,pz4, // vertex 4: a_posCoord
tx4,ty4, // vertex 4: a_texCoord
alpha, // vertex 4: a_alpha
px5,py5,pz5, // vertex 5: a_posCoord
tx5,ty5, // vertex 5: a_texCoord
alpha, // vertex 5: a_alpha
px6,py6,pz6, // vertex 6: a_posCoord
tx6,ty6, // vertex 6: a_texCoord
alpha // vertex 6: a_alpha
// ... Many more billboards not shown ...
];
noti come lo stesso valore alpha
viene ripetuto per 6 volte, una volta per ogni vertice.
C'è un modo per specificare un attributo per tutti e 6 i vertici senza doverlo ripetere per ogni singolo vertice?
Ecco quello che voglio attribuire il vertice tampone a guardare come, nell'interesse di ridurre la dimensione del buffer:
vertexAttributes = [
px1,py1,pz1, // vertex 1: a_posCoord
tx1,ty1, // vertex 1: a_texCoord
px2,py2,pz2, // vertex 2: a_posCoord
tx2,ty2, // vertex 2: a_texCoord
px3,py3,pz3, // vertex 3: a_posCoord
tx3,ty3, // vertex 3: a_texCoord
px4,py4,pz4, // vertex 4: a_posCoord
tx4,ty4, // vertex 4: a_texCoord
px5,py5,pz5, // vertex 5: a_posCoord
tx5,ty5, // vertex 5: a_texCoord
px6,py6,pz6, // vertex 6: a_posCoord
tx6,ty6, // vertex 6: a_texCoord
alpha // vertex 1-6: a_alpha
// ... Many more billboards not shown ...
];
Per quel che vale, la mia soluzione attuale funziona bene, ma mi fa mi sento sporco Ho appena iniziato a capire come usare glVertexAttribPointer
e mi chiedevo se in qualche modo supportasse qualcosa di simile, o se ci fosse un metodo o una tecnica diversa che potrei usare per ottenere qualcosa di meno forza bruta.
Questa è più specificamente una domanda WebGL, ma sono curioso di OpenGL in senso generale.
Sono consapevole che uno shader di geometria è davvero ciò di cui ho bisogno per questo particolare esempio, ma è fuori discussione dal momento che attualmente non sono supportati in WebGL.
possibile duplicato [Rendering ingrana con diversi indici] (http://stackoverflow.com/questions/11148567/rendering-meshes-with-multiple-indices) –
molto vicino ad essere un duplicato, anzi, ma mi piacerebbe tenerlo aperto per alcuni giorni per vedere se ci sono altre conoscenze là fuori dal momento che la mia domanda è un po 'più specifica e qualcuno potrebbe avere un approccio completamente diverso di cui non sono a conoscenza. Immagino che dovrò mantenere i dati ridondanti fino a quando WebGL non utilizzerà il supporto shader della geometria di ES3. – namuol
Ho notato che glVertexBindingDivisor non fa parte di WebGL 1.0 o ES 2.0 (che sto usando) ... :( – Andy