让我说这个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”作为第一步。但是这使得腿变得太快了,如果我想使用模数,我不能使用较低的增量值,这只适用于整数。
是否有其他方法可以实现所需的第一步行为?更重要的是,我怎样才能让腿来回走动?使用一个被多次调用的函数来构思是很困难的(而不是只使用一个处理所有事情的循环结构,在我意识到这一点之前我试过了!)
答案 0 :(得分:1)
如果我想使用模数,我就不能使用较低的增量值,这只适用于整数。
%
运算符无论如何都被破坏了。你不应该使用整数,而是使用浮点数,并使用fmod(double)或fmodf(float)函数。