5-й параметр glVertexAttribPointer
- это смещение в байтах между последовательными общими атрибутами вершин.Если оно равно 0, то атрибуты вершин считаются плотно упакованными.
Ваши вершины состоят из трех компонентов типа float
, поэтому stepde равно 3*sizeof(float)
:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), NULL);
Поскольку вершины плотно упакованы, вы также можете передать 0 параметру:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
Тип индексов GL_UNSIGNED_INT
.Тип индексного массива должен быть целым типом данных, который соответствует GL_UNSIGNED_INT
.В вашем случае это должно быть unsigned int
.
unsigned int indices[] = { .... };
Далее, тип примитива GL_TRIANGLES
состоит из списка индексов, где каждый из 3 образует треугольник.Индексы 0, 1, 2 для ma треугольника, индексы 4, 5, 6 образуют следующий треугольник и так далее.Таким образом, число индексов должно делиться на 3.
Если вы хотите нарисовать куб, то список индексов может выглядеть так:
unsigned int indices[] = {
0,1,2, 0,2,3,
1,5,6, 1,6,2,
5,4,7, 5,7,6,
4,0,3, 4,3,7,
3,2,6, 3,6,7,
1,0,4, 1,4,5
};
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, NULL);