Programming

Android OpenGL ES 사용에 앞서 알아두면 좋은것

라우드니스 2012. 1. 5. 21:09


1. OpenGL ES 1.1과 2.0의 차이점

간단하게 차이점을 적어봅시다.

OpenGL ES 1.1 : OpenGL 1.5 버전과 대응. 1.0버전의 +a 버전. 고정파이프라인 함수들을 사용합니다. 컴퓨터 그래픽스 수업에서 배우시는 것들.

OpenGL ES 2.0 : OpenGL 2.0 버전과 대응. 프로그래밍가능한 하드웨어 함수들을 사용. 쉐이더 언어를 사용합니다. 

가장 중요한 것은 차이점에서 적었듯이 두 버전의 OpenGL에서 사용하는 함수의 종류가 완전히 다르기 때문에 호환성은 없습니다.


무엇을 더 많이 쓰느냐? 라고 한다면 일단 단순한 경우에는 OpenGL ES 1.1 버전이 아닐까 합니다. 이는 아무래도 그래픽스를 수업등을 통하여 맛만 보고 넘어가는 경우 배웠던 환경과 매우 비슷하기 떄문이라 생각합니다. 인터넷에서 글을 찾으면 아무래도 이쪽이 많이 나오게 되죠. 이쪽은 안드로이드 1.6버전부터 지원합니다.

2.0의 경우 쉐이더언어라는 존재와 '프로그래밍가능한' 부분 때문인지 하드웨어가 필요합니다. (흔히 말하는 GPU)

즉, 그래픽카드라는 하드웨어 부품이 지원하지 않으면 지원하지 않습니다. 때문에 안드로이드 에뮬레이터에서 지원하지 않기때문에 아무래도 테스트를 하기 위해서는 그만큼의 실제 기기가 필요하고 그래픽스 공부를 시도하지 못할 수 도 있습니다. 안드로이드 버전은 2.2 부터 지원합니다.

하지만 2.0을 공부하면 쉐이더언어의 경우 모든 OpenGL에서 공유해서 사용할 수 있기 때문에 궁극적으로는 이쪽이 더 낫지않나 싶습니다. 또 더 화려한 효과를 주려면 쉐이더 언어가 필수이기도 하구요.


2. Android에서 OpenGL ES를 어떻게 사용하느냐?

Java와의 차이점은 Android에서 제공하는 opengl 패키지를 사용합니다.

안드로이드에 적용하는 대략적인 흐름은 SurfaceView와 동일합니다.

GLSurfaceView객체를 만들고 이것을 View로써 띄어주면 되는 것 입니다.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        GLSurfaceView view = new GLSurfaceView(this);
        view.setRenderer(new OpenGLRenderer());
         setContentView(view);
}

중요한 것은 view에 적용하는 OpenGLRenderer라는 것이겠죠?

해당 객체는 Renderer 인터페이스를 상속받음으로써 구현합니다. (android.opengl.GLSurfaceView.Renderer)

구현 내용은 onSurfaceCreated, onSurfaceChanged, onDrawFrame 3가지 입니다. 

해당 부분에서 OpenGL의 초기화나 화면 변경시 해줘야 하는것들을 하면 되고, 

onDrawFrame에 화면에 표시할 사항을 프로그래밍 해주면 화면에 나오게 됩니다.

반응형