我正在创建一个模板类,以便初始化VBO并用不同类型的数据填充它,即2d向量,3d向量,索引等。 值被传递给std:vector中的类构造函数,然后,据我所知,所有这些都必须在一个浮点数组中连接起来,以便将它们推送到VBO中。
假设我有一个像这样的3d矢量类:
class Vector3
{
public:
GLfloat* Values;
public:
Vector3(GLfloat x, GLfloat y, GLfloat z)
{
Values = new GLfloat[3];
Values[0] = x;
Values[1] = y;
Values[2] = z;
}
~Vector3() { delete Values}
static int Size() { return 3; };
...
};
然后是带有此构造函数的模板类
template <class T1> class VBO
{
public:
VBO(std::vector<T1*> v_array)
{
int s = T1::Size();
GLfloat *map = new GLfloat[v_array.size() * s];
int pos = -s;
for (std::vector<T1*>::iterator it = v_array.begin(); it != v_array.end(); ++it)
std::copy((*it)->Values, (*it)->Values + s, map + (pos += s));
...
}
};
现在我可以使用'map'使用glBufferData
在VBO中推送数据我的问题是。有一个更好的方法吗?说,是否有可能直接在VBO中推送std :: vector v_array?