2011-09-05 6 views
3

장치 방향이 변경되면 내 OpenGLES보기에 문제가 있습니다. Jeff Lamarche's Xcode template을 사용하고 있습니다.OpenGLES의 iPhone 방향 변경 처리

AutoresizeMask이 설정되면 GLView에서 - (void)layoutSubviews이 호출됩니다. 이 일이 생기면 내가 그리는 대상이 사라집니다. 배경색을 변경하고 변경 사항을 볼 수 있기 때문에 OpenGL보기는 여전히 부분적으로 작동합니다. AutoresizeMask 인 경우

하지 세트, 뷰 회전과 OpenGL을 객체는 여전히 볼 수 있지만, 다음 뷰는 잘못된 크기입니다.

이것은 두 번 이상 호출 할 때 문제가되는 layoutSubviews에 뭔가있는 것을 보여줍니다.

다음은 장치가 화면에 삼각형이 사라이 코드를 회전하는 문제

- (void)drawView:(UIView *)theView 
{  
    Vertex3D vertex1 = Vertex3DMake(0.0, 1.0, -3.0); 
    Vertex3D vertex2 = Vertex3DMake(1.0, 0.0, -3.0); 
    Vertex3D vertex3 = Vertex3DMake(-1.0, 0.0, -3.0); 
    Triangle3D triangle = Triangle3DMake(vertex1, vertex2, vertex3); 

    glLoadIdentity(); 
    glClearColor(0.7, 0.7, 0.7, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glColor4f(1.0, 0.0, 0.0, 1.0); 
    glVertexPointer(3, GL_FLOAT, 0, &triangle); 
    glDrawArrays(GL_TRIANGLES, 0, 3); 
    glDisableClientState(GL_VERTEX_ARRAY); 
} 

을 보여줍니다 drawView에 대한 몇 가지 아주 기본적인 코드입니다. 다시 세로로 방향을 다시 지정해도 다시 나타나지 않습니다.

GLView의 방향이 바뀌지 않아야합니까, 아니면 OpenGL 코드의 버그입니까?

답변

1

내가 틀렸다면 정정하십시오.하지만 믿으 려는데 layoutSubviews 새 크기와 일치하도록 프레임 버퍼를 삭제하고 다시 만들어야합니다. here (Apple 개발자 프로그램에 등록되어 있다고 가정)에서 "iOS 5의 OpenGL 모범 사례"비디오를 확인하십시오. 연사는 회전에 대해 이야기합니다. 이전에 수동으로 OpenGL을 사용하여 수동으로 제안한 방법은 무엇입니까? 성능 문제는 없지만 이제 내장 회전을 사용하여 쉽게 처리 할 수 ​​있다고 말합니다. 연사는 또한 GLKView을 사용하는 경우 프레임 버퍼 크기를 조정할 것이라고 언급합니다.

또한 "많은 개발자가이 문제에 문제가 있습니다"라는 것이 무슨 뜻인지 잘 모르겠습니다. 구글과 스택 오버플로 (Stack Overflow)를 이용한 검색으로는이 문제가있는 사람이 나에게 공개되지 않았다. 나는 당신의 코드에 문제가있을 수도 있다고 의심한다.

또한 Jeff Learche의 Xcode 템플릿에 대한 링크를 따라 가며 Xcode 4 템플릿에 대한 링크가 깨졌습니다. 2011 년 5 월부터있을 수 있습니다. 아마도 OpenGL 요구 사항이 아닌 경우 GLK 프레임 워크를 살펴보십시오. 너무 전문?