所以我试图在 iPad 上使用 GLKit 绘制和旋转立方体。我的问题是,当立方体旋转时,它似乎随着纵横比的变化而变化,在它旋转时挤压它。我的意思可以在后面的三个图像中看到,立方体逆时针旋转 90 度。尽管在开始时(第一张图片),立方体的宽度/高度比约为。我设定的 1/2
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);
}
我不确定您是否可能需要代码的其他部分来告诉我我在这里做错了什么......