繁体   English   中英

提取深度缓冲区到数组

[英]Extracting depth buffer to array

我正在尝试将深度缓冲区从OpenGL提取到CPU上的数组。

我下面的代码(经过某种原始修改后,是一个现有组件,旨在提取渲染图像并成功完成)“有效”,但始终返回正好为0。

GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_PIXEL_PACK_BUFFER, buffer);
int size = w*h*sizeof(GLubyte);
glBufferData(GL_PIXEL_PACK_BUFFER, size, NULL, GL_STREAM_READ);
glReadPixels(0, 0, w, h, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
GLubyte* depth = (GLubyte*)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);
return depth;

glBindBuffer调用之后,我尝试了glReadBuffer(GL_DEPTH) ,并glBindBuffer使用GL_DEPTH_COMPONENT24 (每种资源都推荐这样做,但似乎没人能解释原因),但是两者都会产生无效的枚举错误。 GL_DEPTH_TEST已启用,并且没有错误生成。

确保您有深度缓冲区:

#include <GL/glew.h>
#include <GL/glut.h>

GLuint pbo = 0;
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glEnable( GL_DEPTH_TEST );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( -2, 2, -2, 2, -1, 1 );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    glColor3ub( 255, 0, 0 );
    glBegin( GL_QUADS );
    glVertex3i( -1, -1, 0 );
    glVertex3i(  1, -1, 0 );
    glVertex3i(  1,  1, 0 );
    glVertex3i( -1,  1, 0 );
    glEnd();

    int w = glutGet( GLUT_WINDOW_WIDTH );
    int h = glutGet( GLUT_WINDOW_HEIGHT );
    glBindBuffer( GL_PIXEL_PACK_BUFFER, pbo );
    glBufferData( GL_PIXEL_PACK_BUFFER, w * h * sizeof( GLfloat ), 0, GL_STREAM_READ );
    glReadPixels( 0, 0, w, h, GL_DEPTH_COMPONENT, GL_FLOAT, 0 );
    GLfloat* ptr = (GLfloat*)glMapBuffer( GL_PIXEL_PACK_BUFFER, GL_READ_ONLY );
    if( ptr )
    {
        // look for values of ~0.5 here in ptr...
    }
    glUnmapBuffer( GL_PIXEL_PACK_BUFFER );
    glBindBuffer( GL_PIXEL_PACK_BUFFER, 0 );

    glutSwapBuffers();
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE );
    glutInitWindowSize( 128, 128 );
    glutCreateWindow( "GLUT" );
    glewInit();

    glGenBuffers( 1, &pbo );

    glutDisplayFunc( display );
    glutMainLoop();
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM