0

我编写了以下代码来将立方体在 x 轴上旋转一整圈,然后在 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 之类的值时,为什么立方体仍然恰好旋转一圈?

如果 i 增加 0.2,则在转换中使用的 i 的最后一个值将是 6.2,然后它会被重置并更改旋转轴。基本上,什么是保持立方体水平?我认为随着 i 的较大增量,立方体在切换轴之前不会旋转一整圈。

4

1 回答 1

1

6.28 = 2*M_PI, 给定一个完整的旋转代码。参数i直接给出GLKMatrix4Rotate。如果你想要不同的长度,你可以在条件中改变这个常量,或者i在调用之前映射参数GLKMatrix4Rotate

对于第二种方法,修改代码:

  1. 将 的间隔更改i[0;1],并使步长稍微小一些。
  2. GLKMatrix4Rotate用调用i*2*M_PI

现在动画通常像以前一样运行,但是,您可以使用缓动函数来扭曲它。

于 2012-04-05T04:53:23.870 回答