在iOS中的openGL 2中旋转模型



我在iOS和Android上使用OpenGl,我想做的是绘制一个模型,一个球体,在球体内设置相机/眼睛坐标,设置纹理并启用平移和缩放以实现360度效果,我刚刚使用OpenGl1.0为Android制作,但我在iOS中遇到了很多问题,所以我使用OpenGl2.0制作,一切都设置好了,可以工作,但我在平移方面有问题,为了旋转模型视图矩阵,我正在应用旋转变换,它有效,但如果我改变任何轴的旋转,它会混淆其他两个轴。最后,如果我在X和Y两个轴上都应用旋转,球体会旋转,就像在Z轴上进行了某种变换一样,纹理倒置或以对角线显示,我在Android中进行了完全相同的转换,我在那里没有任何问题,有人有这个问题的经验吗?有什么建议吗?线索密码文章我认为,当我应用第一个变换时,空间中的坐标会发生变化,而下一个变换没有正确应用。

这是我的iOS代码:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
glClear(GL_COLOR_BUFFER_BIT);
GLKMatrixStackPush(_obStack);
GLKMatrixStackRotate(_obStack,
GLKMathDegreesToRadians(_obAngleX),
0.0f, 1.0f, 0.0f);
GLKMatrixStackRotate(_obStack,
GLKMathDegreesToRadians(_obAngleY),
1.0f, 0.0f, 0.0f);
GLKMatrixStackScale(_obStack,
_obScaleFactor,
_obScaleFactor,
_obScaleFactor);
self.obEffect.transform.modelviewMatrix = GLKMatrixStackGetMatrix4(_obStack);
// Prepare effect
[self.obEffect prepareToDraw];
// Draw Model
glDrawArrays(GL_TRIANGLES, 0, panoramaVertices);
GLKMatrixStackPop(_obStack);
self.obEffect.transform.modelviewMatrix = GLKMatrixStackGetMatrix4(_obStack);
}

这是我的安卓代码:

public void onDrawFrame(GL10 arGl) {
arGl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
arGl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
arGl.glPushMatrix();
arGl.glRotatef(obAngleY, 1.0f, 0.0f, 0.0f);
arGl.glRotatef(obAngleX, 0.0f, 1.0f, 0.0f);     
arGl.glScalef(obScaleFactor, obScaleFactor, obScaleFactor);
if (obModel != null) {
obModel.draw(arGl);
}
arGl.glPopMatrix();
}

我反复尝试了几个实现,每次都没有成功,最后,我回去实现了适用于iOS的OpenGL 1.0版本,在这种情况下,每当矩阵旋转时,轴都不会旋转,所以这是我的解决方案,实现OpenGL 1.0版本。

最新更新