所以这个关于我的其他OpenGL问题的主题(不是我的OpenGL ES问题,而是OpenGL桌面版).如果你有人按一个键移动一个方格,你如何使方形运动自然而不那么跳跃,但同样的速度我现在拥有它?这是我的glutKeyboardFunc()函数的代码:
void handleKeypress(unsigned char key, int x, int y) { if (key == 'w') { for (int i = 0; i < 12; i++) { if (i == 1 || i == 7 || i == 10 || i == 4) { square[i] = square[i] + 1; } } glutPostRedisplay(); } if (key == 'd') { for (int i = 0; i < 12; i++) { if (i == 0 || i % 3 == 0) { square[i] = square[i] + 1; } } glutPostRedisplay(); } if (key == 's') { for (int i = 0; i < 12; i++) { if (i == 1 || i == 7 || i == 10 || i == 4) { square[i] = square[i] - 1; } } glutPostRedisplay(); } if (key == 'a') { for (int i = 0; i < 12; i++) { if (i == 0 || i % 3 == 0) { square[i] = square[i] - 1; } } glutPostRedisplay(); } }
我很抱歉,如果这没有多大意义,如果它没有意义,我会尝试以更好的方式对其进行改写.
如果我理解正确,问题是您在键盘事件上修改对象位置,并在该事件处理后请求显示.
要获得平滑动画,您应该在键盘事件处理时存储对象的最终位置,然后在渲染过程中插入中间对象位置.插值函数的推导给出了动画的速度.
如果在分离的线程中执行事件处理,则这更好,因此事件处理不会阻止(至少对于少数同步操作)渲染操作.