手动构建mipmap时纹理为黑色

我正在尝试从一系列图像中手动构建一个mipmap。 为了简洁起见,我们假设包含我想要的图像的文件(从256×256到32×32)具有pathfile_1...4

我做什么来加载纹理是:

 GLuint textureID; glGenTextures(1,&textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4); for i from 1 to 4 unsigned char* image = stbi_load_from_file(file_i, &width, &height, &comp, 3); glTexImage2D(GL_TEXTURE_2D, (i-1), GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); stbi_free_image(image); 

当我去尝试在渲染中使用这个创建的纹理时,我所得到的只是一个黑色的结果。 单独使用每个纹理都能正常工作,所以我排除了它们的格式不正确。 它可能是什么?

你的代码中唯一明显的错误是,你似乎指定了从0级到3级的4个mip级别,但是,将GL_TEXTURE_MAX_LEVEL设置为4.最大级别是最后一个mip级别的从零开始的索引,所以在这种情况下,应该是3:

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 3);