【发布时间】:2021-10-27 14:33:35
【问题描述】:
我想了解如何使用 OpenGL 创建大量相似的二维对象,然后分别为每个对象设置动画。
我感觉会使用this 和glfwGetTime() 来完成。
这里有人可以帮我指出正确的方向吗?
好的,这是迄今为止尝试过的一般事情:
我们有这个处理翻译的向量,创建了以下代码,我稍微修改了一下,以便根据时间改变位置。
glm::vec2 translations[100];
int index = 0;
float offset = 0.1f;
float time = glfwGetTime(); // newcode
for (int y = -10; y < 10; y += 2)
{
for (int x = -10; x < 10; x += 2)
{
glm::vec2 translation;
translation.x = (float)x / 10.0f + offset + time; // new adjustment
translation.y = (float)y / 10.0f + offset + time*time; // new adjustmet
translations[index++] = translation;
}
}
稍后,在渲染循环中,
while (!glfwWindowShouldClose(window))
{
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
shader.use();
glBindVertexArray(quadVAO);
glDrawArraysInstanced(GL_TRIANGLES, 0, 6, 100); // 100 triangles of 6 vertices each
glBindVertexArray(0);
time = glfwGetTime(); // new adjustment
glfwSwapBuffers(window);
glfwPollEvents();
}
是我尝试过的。我想我误解了图形管道的工作方式。正如我之前提到的,我的猜测是我需要使用一些 glm 矩阵来完成这项工作,但我不确定......
【问题讨论】:
-
我不太确定你想问什么。你的代码有什么问题。你预计会发生什么?实际发生了什么?哪条线路没有按预期工作?我可以想象你认为
time = glfwGetTime(); // new adjustment应该有效果,但为什么呢?
标签: c++ animation opengl glfw glm-math