在指定范围内的glutIdleFunc中旋转

时间:2012-11-05 23:06:55

标签: function opengl rotation

让我说这个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”作为第一步。但是这使得腿变得太快了,如果我想使用模数,我不能使用较低的增量值,这只适用于整数。

是否有其他方法可以实现所需的第一步行为?更重要的是,我怎样才能让腿来回走动?使用一个被多次调用的函数来构思是很困难的(而不是只使用一个处理所有事情的循环结构,在我意识到这一点之前我试过了!)

1 个答案:

答案 0 :(得分:1)

  

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

%运算符无论如何都被破坏了。你不应该使用整数,而是使用浮点数,并使用fmod(double)或fmodf(float)函数。