Ios OpenGL矩阵变换的一场革命
我编写了下面的代码,在x轴上旋转立方体一整圈,然后在y轴上来回旋转。代码生成所需的结果Ios OpenGL矩阵变换的一场革命,ios,opengl-es,Ios,Opengl Es,我编写了下面的代码,在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);
- (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的增大,立方体在切换轴之前不会旋转一整圈。
6.28=2*M_PI
,代码会完全旋转。参数i
直接指定给GLKMatrix4Rotate
。如果需要不同的长度,可以在条件中改变此常量,或者在调用GLKMatrix4Rotate
之前映射参数i
对于第二种方法,请修改代码:
i
的间隔更改为[0;1]
,并使步长稍小一些i*2*M_PI
调用GLKMatrix4Rotate
现在动画通常和之前一样运行,但是,您可以使用 我明白了。那么,基本上,为什么模型在更改旋转轴时会重置,而不是保持在相同的状态?因为在每次
更新
调用期间总是重置模型矩阵。更改旋转轴后,可以在初始位置再次绘制模型。顺便问一下,旋转的含义是什么?似乎没有使用。\u-rotation
实际上应该是i
。我会将模型重置为以前的状态,以获得所需的结果。有什么建议吗?是否有最佳实践?我应该在更新结束时保存矩阵并将其设置为更新开始吗?我无法给出最佳实践。我会用其他参数(比如我)重新计算矩阵,就像你做的那样。否则,从长远来看,错误可能会成倍增加。