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

¿Fue útil?

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;

http://darksleep.com/oobjloader/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top