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

È stato utile?

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;

http://darksleep.com/oObjLoader/

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