我有一个带有小字符的 OpenGL 程序,可以用箭头键在屏幕上移动。当一个人改变方向时,角色也会相应地改变它的方向,基本上是这样的:
//Pressing the up arrow to go in the up direction
if(prevSwimDirection == RIGHT)
swimAngle = 90;
...
glutPostRedisplay();
游泳方向在代码其他地方的显示功能中得到处理:
if(changesMode == SWIM_AROUND)
glRotatef((GLfloat)swimAngle, 0.0, 0.0, 1.0);
当然,这会导致即时的、突然的方向变化。我试图像这样平滑它们,但没有运气:
if(prevSwimDirection == RIGHT)
for(double i = swimAngle; i < 90; i += 0.00001){
swimAngle = i;
glutPostRedisplay();
}
我尝试用各种值增加 i 并最终意识到计算似乎是在重新显示之前执行的,即使我在整个循环中都调用了 glutPostRedisplay() 。换句话说,它仍然会突然改变方向,但有轻微的初始延迟。
有没有办法让它正常工作(或者,更好的是,有效地)?