2016-03-01 68 views
-1

我正在解决一些绘图包装为我的DLL计算某些数组。 在这段代码中,我需要它来绘制,但我不明白,为什么当我只绑定一次,它只绘制1点。但当我约束它(因为我知道,我不应该那样做是因为记忆)每个绘画事件,它正在绘制我的网格,正如我所期望的那样。C++ opengl绘制只有1点,而不是网格

这里是bindData的初始状态。

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){} 

它运作良好。但正如我所说,我相信它不是这样。

我欣赏每一个建议,您可以给我。

非常感谢。

EDIT1:我的问题是,为什么它绘制只有1点,而不是点N×N个网格,当我绑定VBO只有一次。我错过了什么?

+0

我不确定你的问题是什么。你可以说得更详细点吗? –

+0

我不能完全肯定,但我的猜测是,那是因为你生成'glGenBuffers只有一个缓冲区(1,VBO)',在那里你会想为N×N点 –

+0

我有float数组,创建一个网格 浮子*阵列= {0.0F,0,0f,0.0F,1.0F,0.0F,0,0f,0.0F,1.0F,0,0f,1.0F,1.0F,0.0F} ,其是2×2的网格。 –

回答

0

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