OpenGL:渲染skybox cubmap问题

时间:2018-11-14 14:29:46

标签: c++ opengl textures skybox

我正在创建带有立方体贴图的Sky框,所以我使用此站点生成了立方体贴图Sky box generator的侧面,现在我有6 512个png文件,我使用以下代码进行渲染:< / p>

glGenTextures(1, &cubemapTexture);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTexture);
for (GLuint i = 0; i < images.size(); i++) {
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, images[i].width, images[i].height, 0, GL_RGB, GL_UNSIGNED_BYTE, images[i].data);
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);

代码可以很好地处理不同的图像,但是从该站点下载的那些图像给我以下结果

enter image description here

这是一张无法使用的图片示例:

Sample tha is not working

这是工作图像的示例:

enter image description here

1 个答案:

答案 0 :(得分:1)

PNG文件似乎包含Alpha通道,因此应在glTexImage2D调用中使用GL_RGBA,如下所示:

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA, images[i].width, images[i].height, 0, GL_RGBA , GL_UNSIGNED_BYTE, images[i].data);