У меня есть массив вершин с плавающей точкой, связанный с объектом буфера вершин для рисования куба.В массиве вершин чередуются цвета, связанные с каждой вершиной.
В цикле рендеринга в main()
я вызываю функцию каждые n
циклов рендеринга для обновления цветов в массиве вершин.Переменная массива с плавающей точкой передается по указателю.Как только цвета обновляются и все еще находятся в функции обновления, я вызываю glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW)
.Когда это происходит, куб исчезает.
Однако, если функция обновляет только цвета, а затем, после возврата в цикл рендеринга, я вызываю glBufferData()
, с теми же параметрами, обновляются цвета куба икуб остается видимым.
Я попытался повторно привязать объект буфера вершин в функции обновления цвета, но это не работает.
Мне кажется, что существует некоторая связь с буфером вершин OpenGLобъект в цикле рендеринга, сам внутри main()
, который теряется при вызове glBufferData()
во внешней функции.
В цикле рендеринга, который находится в main()
, работает код:
if (faceColorLoopCounter > faceColorDuration) {
faceColorLoopCounter = 0;
IncrementVertexColors(verticesColorAngles, vertices);
// Added here to make colors change periodically.
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
}
Функция, в которой цвета меняются, и где я пытался поместить glBufferData()
,
void IncrementVertexColors(double* verticesColorAngles, float* vertices) {
for (int rowIndex = 0; rowIndex < 7; rowIndex++) {
for (int colIndex = 3; colIndex < 6; colIndex++) {
IncrementVertexColorComponent(verticesColorAngles[rowIndex * 6 + colIndex], vertices[rowIndex * 6 + colIndex]);
}
}
//glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
}
, где glBufferData()
закомментирован, так как он не работаетВот.IncrementVertexColorComponent()
меняет один цвет за раз.
Я потерян для объяснения.Чего мне не хватает?