在iOS中使用openGL 2旋转模型

我正在iOS和Android上使用OpenGl,我想要做的是绘制一个模型,一个球体,在球体内设置相机/眼睛坐标,设置纹理并启用平移和缩放以实现360度效果,我刚刚为使用OpenGl 1.0的Android做了准备,但是我在iOS中遇到了很多问题,所以我使用OpenGl 2.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);
}

这是我的Android代码:

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版本。

链接地址: http://www.djcxy.com/p/81827.html

上一篇: Rotating model in openGL 2 in iOS

下一篇: Find relative position of axes of cube after rotation