Glm 按时间旋转对象
Glm rotate object by time
我有一个对象,我想使用此功能在按键按住时旋转它
if (key == GLFW_KEY_S && action == GLFW_REPEAT) {
timer = glfwGetTime();
}
将 timer
发送到此旋转
auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0});
但问题是,我按住 S
键,物体在旋转,但是当我松开它时,时间当然在变化,因为 glfwGetTime()
是实时的。然后我再次按下 S
并按住它旋转,但它从不同的物体角度开始旋转,就像它停止时一样。有什么解决办法吗?
编辑:
我已经通过使用修复了它
timer += 0.1;
但是当我按住S
时,它有大约1秒的延迟,直到物体开始旋转。这与使用真实 glfwGetTime()
相同。怎样才能不耽误?
如果按键被按下,您应该跟踪:
if (action == GLFM_PRESS) {
keysPressed[key] = true;
}
if (action == GLFM_RELEASE) {
keysPressed[key] = false;
}
在渲染循环中:
now = glfwGetTime();
double delta = now - lastTime;
lastTime = now;
if (keysPressed[GLFW_KEY_S]) {
timer += delta;
}
if (keysPressed[GLFW_KEY_A]) {
timer -= delta;
}
auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0});
我有一个对象,我想使用此功能在按键按住时旋转它
if (key == GLFW_KEY_S && action == GLFW_REPEAT) {
timer = glfwGetTime();
}
将 timer
发送到此旋转
auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0});
但问题是,我按住 S
键,物体在旋转,但是当我松开它时,时间当然在变化,因为 glfwGetTime()
是实时的。然后我再次按下 S
并按住它旋转,但它从不同的物体角度开始旋转,就像它停止时一样。有什么解决办法吗?
编辑:
我已经通过使用修复了它
timer += 0.1;
但是当我按住S
时,它有大约1秒的延迟,直到物体开始旋转。这与使用真实 glfwGetTime()
相同。怎样才能不耽误?
如果按键被按下,您应该跟踪:
if (action == GLFM_PRESS) {
keysPressed[key] = true;
}
if (action == GLFM_RELEASE) {
keysPressed[key] = false;
}
在渲染循环中:
now = glfwGetTime();
double delta = now - lastTime;
lastTime = now;
if (keysPressed[GLFW_KEY_S]) {
timer += delta;
}
if (keysPressed[GLFW_KEY_A]) {
timer -= delta;
}
auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0});