OpenGL - 将矢量数据动画化为单独的帧

OpenGL - animating the data of the vector as separate frames

我将计算结果的输出(基本上是特定旋转的一定数量的长方体)存储在 std::vector Box 中,基于它我正在创建用于 OpenGl 可视化的模型矩阵:

    std::vector<glm::mat4> modelMatrices;
    for (int32_t i = 0; i < Box.number_of_cuboids(); i++)
    {
            float rx, ry, rz, teta;
            Box.cuboid(i).get_rotation(rx, ry, rz, teta, j);
            float x, y, z;
            Box.cuboid(i).position(x, y, z, j);
            glm::mat4  model = glm::translate(glm::mat4(1.0f), glm::vec3(x, y, z))
                                 * glm::rotate(glm::mat4(1.0f), teta, glm::vec3(rx, ry, rz))
                               * glm::scale(glm::mat4(1.0f), glm::vec3(
            Box.cuboid(i).width(), Box.cuboid(i).length(j), Box.cuboid.height()));
            modelMatrices.push_back(model);
        }
    }

我可以像这样成功地想象它们:

 while (!glfwWindowShouldClose(window))
    {
        processInput(window, Box.size_x(), Box.size_y(), Box.size_z());
        glClearColor(0.95f, 0.95f, 0.95f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        /* shaders part <...>*/

        for (int32_t i = 0; i < modelMatrices.size(); i++)
        {
            ourShader.setMat4("model", modelMatrices[i]);
            glDrawArrays(GL_TRIANGLES, 0, 36);
        }
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

我的问题是Box已经是计算的最终输出了。我想看看所有的迭代步骤,所以基本上我想做的是:

function ManyCalculations (std::vector<Box>)
{
   at every iteration I save the current status Box in the vector, i.e. 
}

所以基本上在假设 10000 次迭代之后我最终得到相同数量的 Box 元素,现在我想 运行 在我的 OpenGl 函数中 frames/animation(视频?)这样的向量, 所以我可以看到内容的演化计算。

要用每一帧为您的对象设置动画,您需要不断更新顶点缓冲区对象 (VBO)。

您可以继续为每个新框添加一个框架或更改转换矩阵。

然后在绘制之前在 VBO 中设置新数据。

如果您知道这种情况下数据的最大大小,您可以构建一个大型 VBO 并使用 glBufferSubData 不断更新数据。

glBindBuffer(GL_ARRAY_BUFFER, m_VBO);
glBufferData(GL_ARRAY_BUFFER, Box.number_of_cuboids() * sizeof(cuboids), &Box[0], GL_DYNAMIC_DRAW);