OpenGL中的动态VBO

时间:2010-07-16 16:42:54

标签: opengl dynamic-data vbo

存储用于VBO(或顶点数组)的动态数据的最佳方法是什么。我看到的只有2D静态数组的例子,指向该数组的指针与下一个参数一起用作步长,用于一个元素的字节等。我可以使用“动态”数组,因此我可以指定它的大小,但只需一次。我的观点是,例如,如果你已经绘制了1000点(谈论2D,所以我认为点比顶点更好)作为线条并且你添加新点,这样你就必须制作大小为1001的新数组,复制从旧字段到新字段的所有内容,添加新点并将其发送到图形内存。最好的方法是使用矢量或deques作为临时存储,但后来我必须转换为数组并再次发送它。

那么有更好的方法吗?我是否只能在不发送旧数据的情况下向VBO添加新零件?或者更好的方法来存储数据/使用矢量作为数据源而不进行转换?

1 个答案:

答案 0 :(得分:5)

我通常只使用'ole vector trick:

struct GL_Vertex
{
    Eigen::Vector2f tex;
    Eigen::Vector3f color;
    Eigen::Vector3f pos;
};
...
vector<GL_Vertex> buf(1000);
...
glTexCoordPointer( 2, GL_FLOAT, sizeof(GL_Vertex), &buf[0].tex );
glColorPointer( 3, GL_FLOAT, sizeof(GL_Vertex), &buf[0].color );
glVertexPointer( 3, GL_FLOAT, sizeof(GL_Vertex), &buf[0].pos );