У меня проблемы с пониманием того, как использовать один буфер с 3 различными данными, у меня есть следующая структура для моих данных vert, text, color:
struct xyzf {
float x, y, z;
};
struct xyf {
float x, y;
};
struct vertype {
xyzf points[4];
};
struct textype {
xyf points[4];
};
struct coltype {
GLuint points[4];
};
struct buftype {
vertype vertex;
textype texcoord;
coltype color;
};
Затем я (пытаюсь) использовать егоследующим образом (что для меня наиболее разумно):
glBindBufferARB(GL_ARRAY_BUFFER, mybufid);
glVertexPointer(3, GL_FLOAT, sizeof(buftype), 0);
glTexCoordPointer(2, GL_FLOAT, sizeof(buftype), (GLvoid *)sizeof(vertype));
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(buftype), (GLvoid *)(sizeof(vertype)+sizeof(textype)));
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_QUADS, 0, indices);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER, 0); // unbind
Но он терпит неудачу, и его рендеринг отличается от того, что я получил, установив шаг и указатели, чтобы обнулить все.Когда я это делаю, мои данные вершин отображаются правильно, но текст / цвет по-прежнему неверны.
Я не могу использовать & data [0] .vertex для последнего параметра в glVertexPointer () и т. Д., Потому что я не могуУ меня больше нет данных, так как я использую VBO, этот метод работает только с массивами вершин.
Также я не уверен, как работает значение count для glDrawArrays (), я читаю документы, которые говорят, что этоиндексы, так что четырехугольник будет иметь 4, верно?Но когда я умножаю количество четырехугольников на 4, это только дает ПОЛОВИНУ моих вершин, что там происходит?(он будет отображать их все, если я умножу на 8 ...)