更改glFrustum不会更改视口

时间:2011-03-24 21:07:11

标签: iphone opengl-es objective-c++

我在屏幕上有一个立方体,我想给出缩小的效果,所以我调整了截锥体越来越大。这是代码:

- (void)Draw {

    EAGLView* videoController = [EAGLView Instance];
    [videoController BeginDraw];

    glClearColor(0.1f, 0.7f, 0.1f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glViewport(0, 0, videoController.mBackingWidth, videoController.mBackingHeight);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    float mAspectRatio = 1.6666;
    static float mHalfViewAngleTan = 0.1;
    mHalfViewAngleTan += 1.1;
    float mNearZClip = 1.0;
    float mFarZClip = 1000.0;
    glFrustumf( mAspectRatio*-mHalfViewAngleTan, mAspectRatio*mHalfViewAngleTan, -mHalfViewAngleTan, mHalfViewAngleTan, mNearZClip, mFarZClip );

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    static float rotZ = 0.0f;
    ++rotZ;
    if(rotZ > 360)
        rotZ = 0;

    glRotatef(rotZ, 0, 0.5, 0.5);

    RenderModel(modelObj);

    [videoController EndDraw];
}

glRotate工作正常。然而,随着mHalfViewAngleTan越来越大似乎没有发生任何事情,场景变化没有明显的方式。我已经尝试过越来越大的数字,每帧增加mHalfViewAngleTan的数量。更改近平面和远平面也正常工作。

RenderModel中没有glMatrixMode / glPushMatrix调用。它启用和禁用客户端状态,设置glVertPointer并调用glDrawArray。

所有这些代码都在.mm文件中调用.cpp文件。

2 个答案:

答案 0 :(得分:1)

mNearZClip设置为大于零的值。请参阅Notes

答案 1 :(得分:1)

过去我遇到过这个问题。我直接包括Open GL 1.1或2.2标头解决了这个问题。不太清楚为什么修复它。