2011-03-24 7 views
0

화면에 큐브가 있습니다. 축소 효과를주기 위해 크기가 커지고 절두체를 조정했습니다. 다음은 코드입니다.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

나는이 문제가 과거에 발생했습니다. Open GL 1.1 또는 2.2 헤더를 직접 포함 시켜서 해결했습니다. 왜 그것을 고쳐야하는지 잘 모르겠습니다.

1

mNearZClip을 0보다 큰 값으로 설정하십시오. Notes을 참조하십시오.

+0

내부적으로이를 고려해야합니다. 근접 값을 1로 변경하면 내 상자 중 하나를 잘라내는 것 외에는 아무 것도하지 않습니다. – TurqMage

관련 문제