Я сейчас пишу файл obR и mtl glRenderer, и я самообучаюсь и плохо знаком с этим. Я использую это https://github.com/javagl/Obj для быстрой загрузки файла и получения индексов вершин и т. Д. Используя этот загрузчик obj, я также могу извлекать группы материалов. Насколько я понимаю, материальные группы - это группа объектов с ka kd ks или другими материалами.
Я могу загрузить и отобразить эти объекты. Но проблема в неправильном отображении текстуры. Файл obj содержит 3 материала, но имеет только одну подобную текстуру.
newmtl blinn4SG
illum 4
Kd 0.15 0.15 0.15
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
Ni 1.00
Ks 1.00 1.00 1.00
newmtl blinn8SG
illum 4
Kd 1.00 0.00 0.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
Ni 1.00
Ks 0.86 0.86 0.86
newmtl phong1SG
illum 4
Kd 1.00 1.00 1.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
map_Kd ToyPlane.bmp
bump DECALSbump.jpg -bm -0.25
Ni 1.00
Ks 0.50 0.50 0.50
Ns 1.62
Как я заметил, три материала используют одну и ту же текстуру. Но я не могу правильно рендерить текстуру.
Это мой псевдокод.
GLES20.glUseProgram(augmentationProgram);
// active texture
// bind texture
// I got a material group
// each material contains a list of vertices, textureCoords, kd, ks, etc.
for (int i = 0 ; i < size of mtl group; i++) {
// bind vertices[i]
// bind textureCoords[i]
// I think the problem is here
GLES20.glVertexAttribPointer(textureCoorUniform, 2, GLES20.GL_FLOAT, false, 0, texCoords_buffer[i]);
GLES20.glEnableVertexAttribArray(textureCoorUniform);
GLES20.glUniform1i(textureUniform, 0);
// draw()
GLES20.glDrawElements(GLES20.GL_TRIANGLES, indices_length[i], GLES20.GL_UNSIGNED_INT, indices_buffer[i]);
}