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

Foi útil?

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;

http://darksleep.com/oobjloader/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top