我有一个与顶点缓冲区对象相关联的浮点顶点数组,用于绘制立方体。顶点阵列中交错的是与每个顶点关联的颜色。
在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()
一次更改一种颜色。
我迷失了解释。我想念什么?