0

次のコードを書いて、立方体を x 軸で 1 回転、次に y 軸で、前後に回転させました。コードは目的の結果を生成します。

- (void)update
{
if (_x_axis) {
    if (i >= 6.28) {
        i = 0;
        _x_axis = false;
    } else {
        float aspect = fabsf(self.view.bounds.size.width / self.view.bounds.size.height);
        GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);
        self.effect.transform.projectionMatrix = projectionMatrix;
        GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -3.0f);
        modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, i, 0.0f, 1.0f, 0.0f);
        self.effect.transform.modelviewMatrix = modelViewMatrix;
        i += .01;
    }
} else {
    if (i >= 6.28) {
        i = 0;
        _x_axis = true;
    } else {
        float aspect = fabsf(self.view.bounds.size.width / self.view.bounds.size.height);
        GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);
        self.effect.transform.projectionMatrix = projectionMatrix;
        GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -3.0f);
        modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, i, 1.0f, 0.0f, 0.0f);
        self.effect.transform.modelviewMatrix = modelViewMatrix;
        i += .01;
    }
}

私の質問は、i の増分を .02 や .2 や .3 などに変更しても、立方体が正確に 1 回転するのはなぜですか?

i が .2 ずつ増加する場合、変換で使用される i の最後の値は、リセットされて回転軸が変更される前に 6.2 になります。基本的に、立方体のレベルを維持しているのは何ですか? i の増分が大きいと、立方体は軸を切り替える前に完全に回転しないと思います。

4

1 に答える 1

1

6.28 = 2*M_PI、コードを完全に回転させます。パラメータiはそのまま に与えられGLKMatrix4Rotateます。異なる長さが必要な場合は、条件でこの定数を変更するか、iを呼び出す前にパラメータをマップできますGLKMatrix4Rotate

2 番目の方法では、コードを次のように変更します。

  1. の間隔を に変更しi[0;1]ステップ幅を少し小さくします。
  2. GLKMatrix4Rotateで呼び出しi*2*M_PIます。

現在、アニメーションは通常、以前と同じように実行されますが、イージング関数を使用してこれをひねることができます。

于 2012-04-05T04:53:23.870 に答える