0

假设我有这个 glutIdleFunc 在 OpenGL 场景的背景中运行,其中包含一个小生物,它有多个“脉动”的径向排列的腿:

 void PulsateLegs(void)
 {
   lowerLegsRot = (lowerLegsRot + 1)%360;
   glutPostRedisplay();
 }

...在显示功能中使用 lowerLegsRot 值的地方如下:

 glRotatef((GLfloat)lowerLegsRot, 1.0, 0.0, 0.0);

不看小家伙到底长什么样子,很难想象,但很明显,这个功能让双腿反复旋转。我想将这种旋转限制在一定范围内(例如,-15 到 50 度),此外,让腿在该范围内来回移动,就像钟摆一样。

由于我要进行 65 度的扫描,因此我尝试将“%360”更改为“%65”作为第一步。但这使得腿走得太快了,如果我想使用模数,我不能使用较低的增量值,它只适用于整数。

是否有另一种方法来实现所需的第一步行为?更重要的是,我怎样才能让腿来回走动?使用多次调用的函数来概念化有点困难(与仅使用处理所有事情的循环结构相比,我在意识到这一点之前尝试过!)

4

1 回答 1

1

如果我想使用仅适用于整数的模数,我不能使用较低的增量值。

无论如何,%操作员都坏了。您不应使用整数,而应使用浮点数,并使用 fmod (double) 或 fmodf (float) 函数。

于 2012-11-05T23:22:37.143 回答