我编写了以下代码,在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增加.2,则转换中使用的i的最后一个值将为6.2,然后才会重置并更改旋转轴。基本上,什么是保持立方体水平?我认为,对于i的较大增量,立方体在切换轴之前不会进行整个旋转。
答案 0 :(得分:1)
6.28 = 2*M_PI
,代码完全轮换。参数i
直接提供给GLKMatrix4Rotate
。如果您需要不同的长度,可以在条件中改变此常量,或在调用i
之前映射参数GLKMatrix4Rotate
。
对于第二种方法,修改代码:
i
的间隔更改为[0;1]
,并使步长稍微缩小。GLKMatrix4Rotate
致电i*2*M_PI
。现在,animtion通常像以前一样运行,但是,你可以用easing functions来扭转它。