У меня есть куб на экране, я хочу сделать эффект уменьшения, поэтому я настраивал усеченный конус, чтобы быть больше и больше Вот код:
- (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.