2011-03-03 3 views
0

Android 애플리케이션 용 OpenGL ES 2.0 렌더링 컨텍스트는 세로 모드 (480x800)이지만 가로 모드 (800x480)로 렌더링하려고합니다.회전 Android OpenGL ES 2.0 뷰포트

쉐이더로 전송 된 행렬을 수정하지 않고 어떻게 OpenGL 뷰포트를 회전시킬 수 있습니까?

나는 셰이더를 가지고있다. 셰이더는 폰트 렌더러와 같은 단위 행렬을 사용한다. 그래서 몇 군데의 행렬에 회전 컴포넌트를 추가해야 할 것 같습니다. 어떻게 든 뷰포트를 전 세계적으로 회전시킬 수 있습니까?

Android에서 풍경 렌더링 컨텍스트를 어떻게 든 요청할 수 있습니까?

이 문제의 아키텍처 패턴이 있습니까?

답변

2

<activity android:screenOrientation="landscape" ...을 추가하여 문제를 해결했습니다. 이렇게하면 OpenGL이 가로 방향으로 사용됩니다.

0

내 앱에서 두 가지 작업을 수행합니다. 첫째, 매니페스트 파일에 다음 행을 수정

<activity android:name=".YourActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation"> 

가 그 회전에서 모든 것을 다시 초기화하는에서 그것을 중단했다. 보기 포트를 설정합니다

public void onSurfaceChanged(GL10 gl10, int width, int height) 
{ 
    gl10.viewport(0, 0, width, height); 

    //setup your matrices here 
} 

을하지만 당신은 새로운 화면 형상을 고려 너무 거기에 당신의 행렬을 업데이트해야합니다 : 둘째, 당신의 GLSurfaceView.Renderer 파생 클래스에서이 함수를 재정의합니다. 행렬에 추가 회전을 추가 할 필요는 없으며 'onSurfaceChanged'메소드에서 프로젝트 행렬을 다시 설정하면됩니다.

HTH.

+0

감사합니다. 이미 처음 두 가지 작업을 수행합니다. 셰이더를 사용하기 때문에 단일 프로젝션 매트릭스가 없으므로 세 번째 제안을 할 수 없습니다. – Meh

+0

별도의 영사 매트릭스를 가질 수 있습니다. 이는 귀하에게 달려 있습니다. 셰이더 계산에서 월드 와이드 및 포스트 투영 공간 수학을 별도로 유지하는 데 유용하기 때문에 저는 이것을 권하고 싶습니다. – Luther

+0

@luther "rotation on matrices"의 주요 측면을 떠났습니다. 이 http://stackoverflow.com/questions/33773770/use-rotatem-of-matrix-to-rotate-matrix-from-surfacetexture-but-corrupt-the-vid 도움이 될 것 같아요. – enthusiasticgeek