OpenGL顶点缓冲区对象不起作用

Posted

技术标签:

【中文标题】OpenGL顶点缓冲区对象不起作用【英文标题】:OpenGL Vertex Buffer Object doesn't work 【发布时间】:2015-10-03 23:52:37 【问题描述】:

我遇到了顶点缓冲区对象的问题,它似乎无法正常工作。 它不会在屏幕上显示任何内容。

这是我的代码:

void gl::glRecti(int x,int y,int w,int h,glColor *color)

    GLuint vbo = 0;

    GLfloat verts[] = 
    
        x,y,
        x,y + h,
        x + w,y + h,
        x + w,y,
    ;

    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glEnableClientState(GL_VERTEX_ARRAY);

        glBindBuffer(GL_ARRAY_BUFFER,vbo);
            glVertexPointer( 4 , GL_FLOAT , sizeof(float) * 8, NULL );
            glDrawArrays(GL_QUADS,0,4);
        glBindBuffer(GL_ARRAY_BUFFER, 0);


    glDisableClientState(GL_VERTEX_ARRAY);


PS:我是 OpenGL 编程的新手。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

你的顶点指针没有意义:

glVertexPointer( 4 , GL_FLOAT , sizeof(float) * 8, NULL );

您是在告诉 GL,每个顶点位置都指定为一个 4 维向量,并且两个连续顶点之间的偏移量是 8 个浮点数。

您提供的是二维位置的紧密封装数组,因此您应该使用 2 作为 size 参数,并使用 2*sizeof(float) 作为步幅(或 0,这是紧凑的数组)。

【讨论】:

非常感谢,但问题仍然存在。你能看到更多错误吗?

以上是关于OpenGL顶点缓冲区对象不起作用的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL累积缓冲区不起作用

此顶点着色器中的统一浮动不起作用

android opengl 2.0 模板缓冲区不起作用

自定义顶点处理器不起作用 - 矩阵乘法错误或其他啥?

在 OpenGL 中创建屏幕截图不起作用

OpenGL第一个立方体渲染不起作用