0
我写了下面的代码,在x轴上旋转一个整体,然后是y轴,并来回旋转。该代码生成期望的结果。一个革命的OpenGL矩阵变换
- (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;
}
}
我的问题是,当我改变了增量我为0.02%或0.2或.3这样的东西,为什么立方体旋转静态只有一个革命?
如果将i递增.2,则在重置和旋转轴被更改之前,用于转换的i的最后一个值为6.2。基本上,保持立方体水平的是什么?我认为用更大的i增量,立方体在切换轴之前不会进行整个旋转。
我明白了。所以,基本上,为什么模型重置,而不是保持与它改变旋转轴时相同的状态? – 2012-04-07 00:49:04
因为在每次“更新”调用期间,您总会重置模型矩阵。当旋转轴改变时,您可以在初始位置再次绘制模型一次。顺便说一下'_rotation'的含义是什么?似乎未被使用。 – 2012-04-07 07:49:07
'_rotation'实际上应该是'i'。我会将模型重置为之前的状态以获得所需的结果。有关这样做的任何建议?有最佳做法吗?我应该在更新结束时保存矩阵并将其设置为更新开始? – 2012-04-07 13:54:49