OpenGLES, как отобразить текстуру в файл .obj с несколькими материалами - PullRequest
0 голосов
/ 15 апреля 2019

Я сейчас пишу файл 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]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...