Domanda

Finora ho usato solo glDrawArrays e vorrei passare all'utilizzo di un buffer di indice e di triangoli indicizzati. Sto disegnando un oggetto piuttosto complicato con corde di trama, normali e corde di vertici. Tutti questi dati vengono raccolti in un singolo buffer di vertici interfogliati e disegnati utilizzando chiamate simili a (Supponendo che tutto il serup sia eseguito correttamente):

glVertexPointer( 3, GL_FLOAT, 22, (char*)m_vertexData );
glNormalPointer( GL_SHORT, 22, (char*)m_vertexData+(12) );
glTexCoordPointer( 2, GL_SHORT, 22, (char*)m_vertexData+(18) );
glDrawElements(GL_TRIANGLES, m_numTriangles, GL_UNSIGNED_SHORT, m_indexData );

Ciò consente a m_indexData di essere intercalato anche con gli indici delle mie normali e delle mie corde di trama e l'array di indici di posizione standard? Oppure presuppone un unico elenco lineare di inidices che si applicano all'intero formato dei vertici (POS, NOR, TEX)? Se quest'ultimo è vero, come è possibile rendere lo stesso vertice con differenti corde o normali di trama?

Immagino che anche questa domanda possa essere riformulata: se avessi 3 elenchi indicizzati separati (POS, NOR, TEX) in cui questi ultimi 2 non possono essere riorganizzati per condividere lo stesso elenco di indici del primo, qual è il modo migliore per renderlo.

È stato utile?

Soluzione

Non è possibile avere indici diversi per i diversi elenchi. Quando specifichi glArrayElement (3) , OpenGL prenderà il terzo elemento di ogni elenco.
Quello che puoi fare è giocare con il puntatore che specifichi poiché essenzialmente la posizione nell'elenco a cui si accede alla fine è l'offset del puntatore dall'inizio dell'elenco più l'indice specificato. Ciò è utile se si dispone di un offset costante tra gli elenchi. se le liste sono solo una permutazione casuale, questo tipo di gioco per ogni vertice sarà probabilmente costoso come usare semplicemente il vecchio glVertex3fv () , glNormal3fv () e glTexCoord3fv ()

Altri suggerimenti

Ho problemi simili nel tentativo di fare lo stesso in Direct3D 9.0

Per la mia implementazione di OpenGL 3 è stato piuttosto semplice e il mio codice sorgente è disponibile online se potrebbe aiutarti ... https://github.com/RobertBColton /enigma-dev/blob/master/ENIGMAsystem/SHELL/Graphics_Systems/OpenGL3/GL3model.cpp

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