[OpenGL] 2. Open GL 개념

2024. 4. 3. 15:47·CS/HCI 윈도우즈프로그래밍
반응형

Graphics API

Open GL 프로그래밍에 앞서 Graphics API 에 대해 정리하고자 한다.

그래픽 API는 말 그대로 그래픽 작업을 하는데 필요한 주요 기능을 추상화하여 API로 제공해주는 도구를 말한다.

그래픽 어플리케이션을 만든다면 사용자가 이 어플리케이션과 상호작용할 때 결국 키보드도 쓰고 마우스도 쓰고, 컴퓨터는 화면을 그리기 위해 그래픽카드도 사용하고 할텐데, 그런 하드웨어와 프로그램 사이에 정보를 주고받을 수 있는 중간 통로 역할을 하게 된다.

 

보통 3차원을 그리기 위해서 Graphics API를 사용할텐데, 이때 크게 High Level API 와 Low Level API로 나뉘어진다.

 

High Level API

프로그래머 친화적인 방식이다.

어떤 그림을 그리기 위한 자세한 과정을 명시하기보다

물체를 정의하고 물체와 물체 사이 관계를 묘사하여 그림을 그리는 과정이다.

(ex- OpenInventor, VRML, Java3D 등)

 

Low Level API

물체를 구성하는 기본요소(점)의 정의부터 실제 그림을 그리는 세부 과정(무슨 색으로 어떻게 선을 긋고..)을 일일히 명시하여 그림을 그리게 된다. 보다 기계친화적인 방식이라고 할 수 있다.

(ex- OpenGL, Direct3D)

 

OpenGL 과 OpenGL의 발전

Silicon Graphics의 워크스테이션 API인 GL이 오픈소스인 OpenGL로 발전했다.

 

Open Inventor: OpenGL을 기반으로 scene graph와 objected-oriented graphics 개념이 추가된 API

VRML : Open Inventor 에서 가상현실 개념을 더한 것

OpenGL ES : OpenGL을 안드로이드, IOS와 같은 임베디드 시스템에서 돌리기 위해 등장

OpenVR : Steam 주도로 오픈소스 VR API

OpenXR : Khronos group 주도로 개발된 XR (AR + VR) 라이브러리 표준

WebGL : 웹 개발용 OpenGL로, OpenGL ES 기반이다.

 

사실 OpenGL은 API라고 했지만 API보다 규격(specification)에 가까워서 각 함수의 입출력과 기능만을 정의해두었다.

이걸 실제로 어떻게 구현할지는 개발자에게 달려있어서 보통은 그래픽카드 제조사, 애플의 OpenGL은 애플, 리눅스는 그래픽카드 제조사나 동호회 사람들이 라이브러리를 만든다고 한다.

OpenGL 의 버전별 specification 호스팅은 khronos group이 담당한다.


 

GL의 설계 원리

아래는 GL을 설계할 때 고려한 내용이다.

 

범용성 : 거의 모든 하드웨어에서 실행할 수 있다.

효율성 : 하드웨어가 지원하지 않는 기능을 비활성화하여 불필요한 자원 소모를 막을 수 있다.

독립성 : 각각의 기능이 최대한 독립적으로 실행되도록 하였다.

완전성 : 하드웨어의 최대 성능을 활용할 수 있도록, 공통 기능외에 하드웨어마다 그 전용 확장 형태의 명령어를 제공한다.

상호작업성 : 그래픽 서버를 두고, 워크스테이션에 있는 GL 프로그램을 클라이언트로 하여 그래픽 처리 명령을 서버가 서비스하도록 할 수 있다.

 

Core-profile mode

Open GL 2에서는 라이브러리의 기능과 계산이 개발자에게 숨겨진 (추상화된) immediate mode 형식으로 제공되었다. 이 mode는 개발자가 그림을 그리는 코드를 간단히 작성할 수 있었지만, 기술적인 한계 & 효율적이지 못하다는 단점이 있었다.

 

Open GL 3.2부터는 개발자가 그래픽을 처리할 때 더 많은 권한을 가질 수 있는 core-profile 모드를 갖도록 변경되었다.

비록 배우고 사용하기는 더 어려워졌지만, 그래픽스 파이프라인의 작동 원리를 보다 잘 이해할 수 있게 되었다.

 

State Machine

Open GL은 State Machine (상태 기계)이다. (현재 어떻게 작동하는지 상태 정보를 변수들로 정의한다.)

Open GL의 상태는 OpenGL Context 라는 이름으로 불린다.

Open GL의 상태 (Context)는 OpenGL의 옵션 설정을 바꿔서 변화시키고, 버퍼를 변경하여 상태를 표현한다.

버퍼를 변경한다는 말의 뜻은 뒤에서 '더블 버퍼링' 개념으로 자세히 나온다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > HCI 윈도우즈프로그래밍' 카테고리의 다른 글

[OpenGL] 6. Shader (2) - VAO  (1) 2024.04.07
[OpenGL] 5. Shader (1) - Shader, VBO, Shader Program  (0) 2024.04.05
[OpenGL] 4. Graphics Pipeline  (1) 2024.04.04
[OpenGL] 3. GLFW 기본 예제 뜯어보기  (0) 2024.04.04
[OpenGL] 1. GLFW, GLAD 환경설정  (4) 2024.04.03
'CS/HCI 윈도우즈프로그래밍' 카테고리의 다른 글
  • [OpenGL] 5. Shader (1) - Shader, VBO, Shader Program
  • [OpenGL] 4. Graphics Pipeline
  • [OpenGL] 3. GLFW 기본 예제 뜯어보기
  • [OpenGL] 1. GLFW, GLAD 환경설정
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (615)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (45)
        • 생각 정리 (23)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[OpenGL] 2. Open GL 개념
상단으로

티스토리툴바