[OpenGL ES] OpenGL/OpenGL ES 설명

By | 2018-04-15

시작~

개인적으로 대학원을 다니면서 공부했던 부분을 정리하지 않아서 후회를 많이 했다. 그래서 새롭게 공부하는 자료들은 최대한 정리할 예정이다. 처음이 OpenGL ES이다. 본 자료 내용 Learn OpenGL 홈페이지의 내용을 기반으로 작성하였다(아래 출처 참조). 모든 예제는 Android Studio에서 실행되도록 수정하였다. 처음 공부를 하는 부분이라 최대한 이해한 내용만 작성할 예정이다. 영어를 잘하시는 분은 이 글을 읽지 마시고 Learn OpenGL에 가셔서 본문을 읽어주세요. 개인적으로 영어를 잘하지 못하여서 최대한 이해한 부분만 작성했습니다.

OpenGL ES의 대략적인 설명

OpenGL ES는 OpenGL을 휴대폰과 같은 휴대용 기기에서 사용하기 위해서 수정된 API (Application Programming Interface)라고 생각하면 이해하기가 편하다(하지만 실제로 API는 아니라고 한다). 현재 저는 OpenGL ES 3.0을 사용하여 예제를 작성하면서 공부를 진행하고 있다. 인터넷을 찾아본 결과 현재 나오는 휴대용 단말기(Galaxy, iPhone 등)에서 실행되는 많은 애플리케이션은 2. X 버전을 사용한다. 물론 3.X도 지원한다. 실제로 3.0과 2. X의 큰 차이를 느끼지 못하였다. 하지만, 1.X이후 버전에서는 큰 차이가 있다. 2. X 이전(1.X) 에는 Fixed Function Pipeline (Immediate Mode)라고 하여서 고정된 연산 방법을 사용하였다. 결과적으로 OpenGL을 배우고 사용하기 쉬운 편이었다고 한다. 하지만, 2.0 이상이 되면서 Core Profile Mode라고 하여 GPU가 해야 하는 연산을 프로그래머가 작성하는 방법을 사용한다. 그 결과 새로 배우기는 어렵지만, GPU를 더 효율적으로 사용할 수 있다.

개인적인 생각: 개인적으로 프로그래머가 더 많은 권한을 받게 되면 CPU와 GPU 같은 하드웨어를 더 효율적으로 사용할 수 있다고 생각한다. 하지만 역시나 프로그래밍하기가 더 어려워진다. 현재는 Vulkan과 같은 OpenGL보다 더 많은 권한을 프로그래머에게 주어서 하드웨어 더 효율적으로 사용할 수 있는 API가 새로 공개되었다. CPU/GPU의 Clock 속도가 더 올라가지 않기 때문에 프로그래머가 하드웨어를 이해하고 코딩을 해야 하는 시대가 되어가는 것 같다.

Open GL Extension

OpenGL의 새로 나온 Technique의 나오면 Extension을 사용하여 공개한다. Extension을 사용하기 위해서는 GPU를 제작하는 회사에서 지원을 해주면 사용이 가능하다. 그리고 Extension 버전에서 유용한 부분은 미래의 OpenGL에 포함된다.

추가적인 설명

OpenGL을 사용하기 위해서는 C/C++에 대한 지식이 필요하다고 한다. 현재 삼각형을 그리고 Texture를 입히는 과정까지 진행하였는데 C/C++에 대한 지식이 크게 필요하지 않았다. 그리고 Android Studio에서 OpenGL을 사용하기 위해서 NDK를 사용해야 한다고 한다. 하지만 Texture까지 읽으면서 예제를 작성해았지만, Java에서 제공하는 라이브러리만 사용하였다. 결과적으로 예제를 작성하면서 NDK를 사용한 부분은 없는 것 같다 (어쩌면 Android Studio가 자동으로 모든 부분을 해결해줄 수도 있다).

모든 소스 코드는 압축 파일로 공개 할 예정이다. 해당 소스코드는 Learn OpenGP 홈페이지에서 제공하는 예제를 사용하였다. 이와 더불어 안드로이드에서 실행하기 위해서 변경된 부분은 인터넷 이곳저곳을 뒤져가면서 수정을 하였다. 모든 예제는 갤럭시 노트7 또는 갤럭시 S8에서 실행 여부를 확인하였다.

실험환경

  • Window 7 또는 10
  • Android Studio 3
  • OpenGL ES 3.0

출처

  1. https://learnopengl.com/

Leave a Reply

Your email address will not be published. Required fields are marked *