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