用于数据可视化的VAO + VBOs逻辑(增强图)

时间:2014-01-09 19:05:57

标签: ios boost opengl-es-2.0 glkit boost-graph

我正在使用Boost Graph Library来组织图中边缘链接的点,现在我正在处理它们的显示。

我是OpenGL ES 2 / GLKit和顶点阵列对象/顶点缓冲对象的新手。我跟着this tutorial这是非常好的,但在我想我应该做的最后是:

  • 仅为Shape类的“模型”实例创建一次顶点(表示我的提升点位置的“精灵”);
  • 使用此模型提供维生素生态系统;
  • 将VBO绑定到唯一的VAO;
  • 在一次绘制调用中绘制所有内容,更改每个“精灵”的矩阵。

我已经读过访问VBO对于性能非常糟糕,我应该使用交换VBO。

我的问题是:

  • 是单次调用中可能的矩阵转换/缩放/旋转吗?
  • 然后,如果是:我的逻辑是好的吗?
  • 最后:有一些代码示例会很棒: - )

1 个答案:

答案 0 :(得分:0)

如果您只想绘制图表,除了OpenGL ES之外,还有更容易使用的库。但假设你有理由:

只要抓住你描述的内容并进行测试即可。如果它足够好,那么恭喜你:你已经完成了。

您没有提到有多少图表,每个图表有多少点,修改点的频率以及您想要的帧速率。

如果您要更新几百个顶点,并且它们不经常更改,您可能甚至不需要VBO。即使没有它们,最近的硬件也可以呈现很多精灵。取决于有多少顶点以及它们改变的频率。

首先,试试这个:

// Bind the shader
glUseProgram(defaultShaderProgram);

// Set the projection (camera) matrix.
glUniformMatrix4fv(uProjectionMatrix, 1, GL_FALSE, (GLfloat*)projectionMatrix[0]);

for ( /* each chart */ ) 
{
    // Set the sprite (scale/rotate/translate) matrix.
    glUniformMatrix4fv(uModelViewMatrix,  1, GL_FALSE, (GLfloat*)spriteViewMatrix[0]);

    // Set the vertices.
    glVertexAttribPointer(ATTRIBUTE_VERTEX_POSITION, 3, GL_FLOAT,         GL_FALSE, sizeof(Vertex), &pVertices->x));
    glVertexAttribPointer(ATTRIBUTE_VERTEX_DIFFUSE,  4, GL_UNSIGNED_BYTE, GL_TRUE,  sizeof(Vertex), &pVertices->color));

    // Render.  Assumes your shader does not use a texture, 
    // since we did not set one.
    glDrawArrays(GL_TRIANGLES, 0, numVertices);
}