화면에 큐브가 있습니다. 축소 효과를주기 위해 크기가 커지고 절두체를 조정했습니다. 다음은 코드입니다.glFrustum을 변경해도 뷰포트가 변경되지 않습니다
- (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를 호출합니다.
이 코드는 모두 .cpp 파일을 호출하는 .mm 파일에 있습니다.
내부적으로이를 고려해야합니다. 근접 값을 1로 변경하면 내 상자 중 하나를 잘라내는 것 외에는 아무 것도하지 않습니다. – TurqMage