Como você passaria a um OBJ Arquivos enfrentam definições para o OpenGL
Pergunta
Eu escrevi um carregador OBJ que analisa os vértices, coordenados de textura e normais, cada um é armazenado em um floatbuffer e passou para o OpenGL:
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);
No entanto, estou perplexo com a forma como devo passar meu buffer de índice para o GldrawElements, li que o índice se referirá ao índice na matriz para os vértices, textura e normais, mas ao ler a descrição do arquivo OBJ, Parece que os rostos são armazenados em um formato como este:
f 1/2/3 4/5/6 7/8/9
com o formato sendo
vertice/texture/normal
O GlDrawElements aceita apenas 1 índice, que deve se referir a todos os 3, mas quando olho para um arquivo OBJ real, isso não parece possível. Como você passa no índice para todos os 3?
Você pode encontrar uma cópia do código aqui:http://codepad.org/melc1hic
Solução
Você não pode diretamente, precisa fazer algum pré -processamento antes de passar os dados para o OpenGL; portanto, apenas um índice é usado para cada vértice, e esse índice também funciona para coordenadas de textura, normais etc.
Outras dicas
Escrevi uma pequena biblioteca que analisa arquivos .OBJ e inclui código de exemplo para renderizar o modelo no OpenGL (LWJGL). O código para criar o VBOS é esperado bastante direto e claro o suficiente para dar uma idéia de como ele funciona, ou você pode usar a biblioteca ou recortar e colar com ele. (A licença é de domínio público.) Dê uma olhada nela;