首页 > 解决方案 > 渲染到立方体贴图数组

问题描述

我正在尝试生成一个立方体贴图数组并保存深度值等。我已经确认它是由 glCheckFramebufferStatus 正确生成的,但是当我实际渲染它时,它不存储任何东西。简单的代码如下所示。

// Initialize
glGenTextures(1, &CubeMap);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, CubeMap);

for (int j = 0; j < 6; j++) {
    glTexImage3D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, 0, GL_RGBA16F, 512, 512, ArrayNum, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
}
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

glGenRenderbuffers(1, &CubeMapRBO);
glBindRenderbuffer(GL_RENDERBUFFER, CubeMapRBO);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 512, 512);
glBindRenderbuffer(GL_RENDERBUFFER, 0);


// Render to CubeMap Array
for(int i = 0; i < ArrayNum; i++) {
    for(int j = 0; j < 6; j++) {
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, CubeMap, i);
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, CubeMapRBO);
    }
}

在 2D 纹理数组的情况下,它似乎使用 glFramebufferTextureLayer 而不是 glFramebufferTexture2D,但是当我将其应用于立方体贴图时,返回了错误。如果有人知道什么,请发表评论。

标签: c++openglglsl

解决方案


推荐阅读