¿Cómo pasarías las definiciones de la cara de los archivos OBJ a OpenGL?
Pregunta
He escrito un cargador OBJ que analiza los vértices, las coords de textura y las normales, cada uno se almacenan en un floatbuffer y pasan a OpenGL:
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);
Sin embargo, estoy perplejo sobre cómo se supone que debo pasar mi búfer de índice a Gldrawelements, he leído que el índice se referirá al índice en la matriz para los vértices, textura y normales, pero al leer la descripción del archivo OBJ, Parece que las caras se almacenan en un formato como este:
f 1/2/3 4/5/6 7/8/9
con el formato siendo
vertice/texture/normal
Gldrawelements solo acepta 1 índice, que debería referirse a los 3, pero cuando miro un archivo OBJ real, esto no parece posible. ¿Cómo se pasa el índice para los 3?
Puede encontrar una copia del código aquí:http://codepad.org/melc1hic
Solución
No puede directamente, debe hacer algunos preprocesos antes de pasar los datos a OpenGL, por lo que solo se usa un índice para cada vértice, y este índice también funciona para coordenadas de textura, normales, etc.
Otros consejos
He escrito una pequeña biblioteca que analiza los archivos .obj e incluye código de muestra para representar el modelo en OpenGL (LWJGL). Con suerte, el código para crear el VBOS es bastante sencillo y lo suficientemente claro como para darle una idea de cómo funciona, o simplemente podría usar la biblioteca, o cortar y pegarlo. (La licencia es dominio público). Eche un vistazo;