opengl es如何将纹理映射到具有多种材质的.obj文件

时间:2019-04-15 14:53:18

标签: java android opengl-es textures

我目前正在编写obj和mtl文件glRenderer,并且我是自学成才。我正在使用此https://github.com/javagl/Obj快速加载文件并获取顶点索引等。通过使用此obj加载器,我还可以提取材质组。根据我的理解,材料组是带有ka kd ks或其他材料的obj组。

我可以加载和呈现这些obj。但是问题是错误的贴图纹理。 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]);
}

0 个答案:

没有答案