Изменение glFrustum не меняет область просмотра - PullRequest
0 голосов
/ 25 марта 2011

У меня есть куб на экране, я хочу сделать эффект уменьшения, поэтому я настраивал усеченный конус, чтобы быть больше и больше Вот код:

- (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 ]

1 голос
/ 04 мая 2011

У меня была эта проблема в прошлом.Я решил это путем непосредственного включения заголовков Open GL 1.1 или 2.2.Не совсем уверен, почему это исправило это.

1 голос
/ 25 марта 2011

Установите mNearZClip на значение, большее нуля. См. Примечания .

...