存储用于VBO(或顶点数组)的动态数据的最佳方法是什么。我仅看到的示例是2D静态数组,指向该数组的指针与下一个参数(例如跨步),用于一个元素的字节等一起使用。我可以使用“动态”数组,以便可以在空中指定它的大小,但只能指定一次。我的观点是,例如,如果您已经绘制了1000个点(谈论2D,所以我认为点比顶点更好)作为线带并添加新点,则必须制作尺寸为1001的新数组,然后复制从旧字段到新字段的所有内容,添加新点并将其发送到图形的内存。最好的方法是将向量或双端队列用作临时存储,但是随后我必须转换为数组,然后再次将其发送出去。

因此,有更好的方法吗?是否可以仅将新零件添加到VBO中而不发送旧数据?还是存储数据/使用向量作为数据源而不进行转换的更好方法?

最佳答案

我通常只使用'ole vector技巧:

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 );

10-07 19:33
查看更多