Я использую VBO с чередованным массивом для рендеринга загруженного объекта obj (формат модели). Возможно ли это сделать вместо вектора? Код GL работает с использованием вектора, но смещение для вектора векторов будет совсем другим. Таким образом, буфер не проходит через вектор правильно. Поэтому ничего не делает, но создается.
Итак, мой обычный код для VBO (с пропущенными не относящимися к делу битами):
#define BUFFER_OFFSET(bytes) ( (GLubyte*) NULL + (bytes) )
//define interleaved array
GLfloat Cubedata[12][4] =
{
//tu tv Cr Cg Cb Ca Nx Ny Nz Vx Vy Vz
+0.0f, +1.0f, +1.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +1.0f, -0.5f, +0.5f, +0.5f,//top left 0
+0.0f, +0.0f, +1.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +1.0f, -0.5f, -0.5f, +0.5f,//bottom left 1
+1.0f, +0.0f, +1.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +1.0f, +0.5f, -0.5f, +0.5f,//bottom right 2
+1.0f, +1.0f, +1.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +1.0f, +0.5f, +0.5f, +0.5f //top right 3
};
//define other stuff
//create vbo
glGenBuffersARB(2, VBOid); //generates ids for the buffers
glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBOid[0]);//specifes the current buffer object
glBufferDataARB(GL_ARRAY_BUFFER_ARB, ( (4 * 12) * sizeof(GLfloat) ), *Cubedata, GL_STATIC_DRAW_ARB);
glInterleavedArrays(GL_T2F_C4F_N3F_V3F, 0, BUFFER_OFFSET(0) );//set offsets
//bind indicies
//bind current buffer, render
это прекрасно работает для массива типа GLfloat, но с вектором GLfloat это не так. Определение вектора должно иметь двенадцать столбцов и n-ых строк, таких как:
vector< vector<GLfloat> > vec_interleaved(12,vector<GLfloat>(4) );
Итак, до моего вопроса, как вы рассчитываете смещение для вектора? в этом случае я хочу, чтобы буфер начинал чтение с каждых 12 элементов / начала каждой строки.