首页
学习
活动
专区
圈层
工具
发布

GLKit投影
EN

Stack Overflow用户
提问于 2013-09-30 20:50:05
回答 1查看 442关注 0票数 0

因此,我试图使用GLKit在iPad上绘制和旋转一个立方体。我的问题是,当立方体旋转时,它似乎随着长宽比的变化而旋转,当它旋转时挤压它。我的意思是,在接下来的三张图片中可以看到立方体逆时针旋转90度。虽然在开始(第一张图像),比宽度/高度的立方体是大约。1/2我已经设定了

代码语言:javascript
复制
GLKMatrix4 scaleMatrix=GLKMatrix4MakeScale(0.5, 1., 0.3);

当它变成“挤压”结束后,π/2转弯,边是基础(转弯前)是两倍的高度(第三张图像)。我相信我的错误在于我传递给GLKMatrix4MakePerspective的论点,但是由于我对所有对openGL方法的调用都不太适应,我还把代码的某些部分放在了图像之后,我认为这些部分可能与此有某种联系。

代码语言:javascript
复制
- (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);
}

我不确定你是否需要代码的其他部分来告诉我我在这里做错了什么.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-01 21:54:28

矩阵乘法作为一系列的几何变换,从右到左工作,是不可交换的。即,给定一个旋转矩阵R和标度矩阵S,乘积S x R的意思是“按R旋转,然后由S缩放”,这与“S缩放,然后由R旋转”(如乘积R x S)的结果不同。

旋转后缩放:不是将一个立方体挤压成一个矩形棱镜,然后旋转它,而是旋转一个立方体,然后挤压产生的图像。逆转scaleMatrixrotationMatrix的乘法,您就会看到预期的结果。

(而且,您的translateMatrix指定了零的转换,因此将其乘以模型视图矩阵没有任何作用。如果它是非零,那么你应该把它按什么顺序乘成模型视图矩阵?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19103571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档