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」に変更してみました。しかし、これによりレッグの速度が速すぎたため、intでのみ機能するモジュラスを使用する場合は、低い増分値を使用できません。

望ましい最初のステップの動作を実現する別の方法はありますか?さらに重要なことに、どうすれば足を前後に動かすことができますか?複数回呼び出される関数で概念化するのはちょっと難しいです(これを実現する前に試した、すべてを処理するループ構造を使用するだけではありません!)

4

1 に答える 1

1

また、intでのみ機能するモジュラスを使用する場合は、低い増分値を使用できません。

%とにかくオペレーターは壊れています。整数ではなくfloatを使用し、fmod(double)またはfmodf(float)関数を使用する必要があります。

于 2012-11-05T23:22:37.143 に答える