C ++ OpenGL 只绘制 1 个点而不是网格

c++ opengl drawing only 1 point instead of grid

本文关键字:网格 OpenGL 绘制      更新时间:2023-10-16

我正在为我的 DLL 解决一些绘图包装器,它正在计算一些数组。在这个代码中,我需要它来绘制,但我不明白,为什么当我只绑定一次时,它只绘制 1 个点。但是当我绑定它时(据我所知,由于记忆,我不应该这样做)每个绘画事件,它都会按照我的期望绘制我的网格。

下面是绑定数据的初始状态。

bool mBindData = true;

然后在我的绘制函数中:

        GLuint vbo;
        if(mBindData){
            mBindData = false;
            glGenBuffers(1, &vbo);
            //getting size of my array of vertexes
            int size = this->mModel->GetVboSize() * sizeof(float);

            glBindBuffer(GL_ARRAY_BUFFER, vbo);
            glBufferData(GL_ARRAY_BUFFER, s2, this->mModel->GetVbo(), GL_STATIC_DRAW);
            glBindBuffer(GL_ARRAY_BUFFER, vbo);
            glEnableVertexAttribArray(0);
            glVertexAttribPointer(
                        0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
                        3,                  // size
                        GL_FLOAT,           // type
                        GL_FALSE,           // normalized?
                        0,                  // stride
                        (void*)0            // array buffer offset
                        );
        }
        glDrawArrays(GL_POINTS, 0,this->mModel->GetVboSize()); 

如果没有

if(mBindData){}

它运作良好。但正如我所说,我确信这不是办法。

我很感激你能给我的每一个建议。

谢谢。

编辑1:我的问题是,当我只绑定一次vbo时,为什么它只绘制1点而不是NxN点网格。我错过了什么?

我很

抱歉提出一个问题。我只是愚蠢,没有阅读整个QT组件。我不得不在paintGL()之后调用update()。它现在正在工作。