Come vorresti passare un file OBJ definizioni volto a OpenGL
Domanda
Ho scritto un caricatore OBJ, che analizza i vertici, coordinate texture e normali, ciascuna vengono memorizzati in un FloatBuffer, e passò a OpenGL:
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);
Comunque sto perplesso su come dovrei passare il mio buffer di indice per glDrawElements, ho letto che l'indice farà riferimento all'indice della matrice per i vertici, la consistenza, e normali, ma dopo aver letto l'OBJ descrizione del file, sembra che le facce sono memorizzati in un formato come questo:
f 1/2/3 4/5/6 7/8/9
con l'essere formato
vertice/texture/normal
glDrawElements accetta solo 1 indice, che dovrebbe fare riferimento a tutti e 3, ma quando guardo un file OBJ vero e proprio, questo non sembra possibile. Come si passa l'indice per tutti e 3?
È possibile trovare una copia del codice qui: http://codepad.org/melc1HIC
Soluzione
È possibile non direttamente, è necessario fare un po 'di pre-elaborazione prima di passare i dati a OpenGL, in modo che solo un indice viene utilizzato per ogni vertice, e questo indice funziona anche per le coordinate di texture, normali, ecc.
Altri suggerimenti
Ho scritto una piccola biblioteca che analizza file obj, e include il codice di esempio per il rendering del modello in OpenGL (LWJGL). Il codice per creare le VBOs si spera abbastanza semplice e sufficiente per darvi un'idea di chiaro come funziona, o si potrebbe utilizzare la biblioteca, o tagliare e incollare da esso. (La licenza è di dominio pubblico.) Date un'occhiata a esso;