OpenGL:渲染天空盒立方体贴图问题

Posted

技术标签:

【中文标题】OpenGL:渲染天空盒立方体贴图问题【英文标题】:OpenGL: Render skybox cubmap issue 【发布时间】:2018-11-14 14:29:45 【问题描述】:

我正在创建一个带有立方体贴图的天空盒,所以我使用这个网站来生成立方体贴图的侧面Sky box generator,现在我有 6 512 个 png 文件,我使用以下代码来渲染它:

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);

代码在不同的图像上运行良好,但从本网站下载的图像给我以下结果

这是一个使用不工作的图像示例:

这是工作图像的示例:

【问题讨论】:

你试过GL_RGBA吗? 我试过glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, images[i].width, images[i].height, 0, GL_RGBA , GL_UNSIGNED_BYTE, images[i].data);纹理变黑了。 两者都应该是 GL_RGBA 成功了,谢谢。你能把它作为答案发布吗? 【参考方案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);

【讨论】:

以上是关于OpenGL:渲染天空盒立方体贴图问题的主要内容,如果未能解决你的问题,请参考以下文章

✠OpenGL-9-天空和背景

透明天空盒+透明高度图的OpenGL混合问题

OpenGL立方体贴图面顺序和采样问题

立方体贴图上的 OpenGL 奇怪的红绿蓝线并重复三次

渲染动态立方体贴图 (OpenGL)

OpenGL学习脚印:立方体纹理和天空包围盒(Cubemaps And Skybox)