所以我試圖在iPad上使用GLKit繪製和旋轉一個立方體。我的問題是,隨着立方體旋轉,看起來縱橫比隨着它的變化而變化,在旋轉時擠壓它。我的意思是在立方體逆時針旋轉90度後的三幅圖像中可以看到。雖然在開始時(第一張圖片),立方體的比例寬度/高度大約爲。 1/2我已經通過GLKit投影
GLKMatrix4 scaleMatrix=GLKMatrix4MakeScale(0.5, 1., 0.3);
因爲它原來它被「擠」之後的pI/2圈結束時,與約爲該基材(前翻)的一側是雙倍的高度設定(第三張圖片)。我相信我的錯誤是在我傳遞給GLKMatrix4MakePerspective
的論據中,但是因爲我不熟悉openGL方法的所有調用,並且我也放了一些我的代碼的一些部分,我相信這些部分可能與此有關,在圖片。
- (void)draw{
//just a quaternion that rotates the cube
GLKQuaternion glkq=GLKQuaternionMake(_quat.x,_quat.y,_quat.z,_quat.w);
GLKMatrix4 rotationMatrix=GLKMatrix4MakeWithQuaternion (glkq);
GLKMatrix4 scaleMatrix=GLKMatrix4MakeScale(0.5, 1., 0.3);
GLKMatrix4 translateMatrix = GLKMatrix4MakeTranslation(0.,0.,0.);
GLKMatrix4 modelMatrix =GLKMatrix4Multiply(translateMatrix,
GLKMatrix4Multiply(scaleMatrix,rotationMatrix));
GLKMatrix4 viewMatrix = GLKMatrix4MakeLookAt(0, 0, 5, 0, 0, 0, 0, 1 , 0);
effect.transform.modelviewMatrix = GLKMatrix4Multiply(viewMatrix, modelMatrix);
effect.transform.projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(45.0f), 3./4., 3, -5);
[effect prepareToDraw];
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, triangleVertices);
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, 0, triangleColors);
glDrawArrays(GL_TRIANGLES, 0, 36);
glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribColor);
}
我不知道,如果你也許需要的代碼的其他一些地方,告訴我什麼,我做錯了什麼......
謝謝,rickster,是的,這正是我應該先縮放然後旋轉的問題。關於翻譯,我想它應該是最後的(在左邊)?否則不會圍繞對象的中心旋轉?我不知道我必須嘗試... – venkman