c++ - OpenGL:渲染天空盒 cubmap 问题

标签 c++ opengl textures skybox

我正在创建一个带有立方体贴图的天空盒,所以我使用这个网站来生成立方体贴图的边 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);

代码在处理不同的图像时运行良好,但从该站点下载的那些图像给出了以下结果

enter image description here

这是所用图片的示例,无法正常工作:

Sample tha is not working

这是工作图像的示例:

enter image description here

最佳答案

PNG 文件似乎包含 alpha channel ,因此您应该在 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);

关于c++ - OpenGL:渲染天空盒 cubmap 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53302550/

相关文章:

c - 如何在 OpenGL 中管理缓存纹理?

opengl - 纹理 alpha channel 在 opengl 中不起作用

c++ - 使用boost的scoped_allocator_adaptor作为共享内存容器

objective-c - CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)

c++ - 如何避免在 C++ 中从字符串常量到 'char*' 的弃用转换

c++ - 抓老鼠?

c++ - 带有 FBO 附件的 glreadpixels

c++ - 如何在 OpenGL 中使纹理透明?

c++ - 绘制带纹理的四边形看起来变形了

c++ - Mac 和 Linux 上的 SDL IMG_Load() 为同一图像返回不同的 BitsPerPixel