OpenGL - 只能绘制到立方体贴图的第一面

时间:2014-01-17 15:56:35

标签: c++ opengl depth

由于某些原因,试图在第一个以外的任何一方画画似乎都没有效果。

这就是我创建立方体贴图的方式:

GLuint frameBuffer;
glGenFramebuffers(1,&frameBuffer);

GLuint texture;
glGenTextures(1,&texture);

glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);
glBindTexture(GL_TEXTURE_CUBE_MAP,texture);

glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_DEPTH_TEXTURE_MODE,GL_LUMINANCE);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_COMPARE_FUNC,GL_LEQUAL);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_COMPARE_MODE,GL_COMPARE_R_TO_TEXTURE);

for(int i=0;i<6;i++)
{
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X  +i,0,GL_DEPTH_COMPONENT,size,size,0,GL_DEPTH_COMPONENT,GL_FLOAT,0);
    glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_CUBE_MAP_POSITIVE_X  +i,texture,0);
    glDrawBuffer(GL_NONE);
}

从立方体贴图写入/读取:

glBindFramebuffer(GL_DRAW_FRAMEBUFFER,frameBuffer);
glBindTexture(GL_TEXTURE_CUBE_MAP,texture);

float *pixels = new float[size *size];
for(int j=0;j<(size *size);j++)
    pixels[j] = 1.f;

for(int i=0;i<6;i++)
{
    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_CUBE_MAP_POSITIVE_X +i,texture,0);

    glTexSubImage2D(
        GL_TEXTURE_CUBE_MAP_POSITIVE_X +i,
        0,
        0,0,
        size,size,
        GL_DEPTH_COMPONENT,
        GL_FLOAT,
        &pixels[0]
    );
}

glBindFramebuffer(GL_READ_FRAMEBUFFER,frameBuffer);
for(int j=0;j<6;j++)
{
    glFramebufferTexture2D(GL_READ_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_CUBE_MAP_POSITIVE_X +j,texture,0);
    glReadPixels(0,0,size,size,GL_DEPTH_COMPONENT,GL_FLOAT,&pixels[0]);
    for(int k=0;k<(size *size);k++)
    {
        if(pixels[k] != 1.f)
        {
            // Incorrect pixel
            break;
        }
    }
}

所有这一切应该是将立方体贴图的所有边的所有像素的深度分量设置为1然后再次读出它们。但是,在读取像素时,似乎只对第一面有效,对于所有其他边,深度成分为0。

0 个答案:

没有答案