ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OpenGL API
    OpenGL/Computer Graphics 2019. 7. 1. 16:30

    안녕하세요 dely입니다:)

    오늘은 OpenGL API에 대해 정리해보겠습니다.

     

    OpenGL은 실리콘 그래픽스사의 워크스테이션용 API인 GL이 발전한 것으로,

    그래픽 관련 하드웨어를 상위 수준에서 다룰 수 있도록 함으로써

    프로그래머가 쉽게 그래픽 처리를 할 수 있도록 도와주는 라이브러리 함수입니다.

    또한 OpenGL은 다양한 그래픽 API 중에서 오랫동안 많은 이들이 사용해왔고,

    저수준 API로써 그래픽 메모리, 그래픽 가속 칩 등의 하드웨어와 매우 근접되어 있기 때문에

    이것을 직접 제어함으로써 하드웨어 성능을 최대한 발휘 시킬 수 있다는 장점을 갖고 있습니다.

     

    OpenGL 설계 시 고려 사항

     

    OpenGL을 설계할 때 몇가지 고려한 사항들이 있는데 다음과 같습니다.

    범용성 - 거의 대부분의 하드웨어에서 실행될 수 있도록 설계되었습니다. 그래서 윈도우나 유닉스 운영체제 모두에서 실행될 수 있습니다.

    효율성 - 하드웨어 회사마다 기능이 서로 다르기 때문에, 만약 어떤 하드웨어가 다른 하드웨어에서는 지원하는 어떤 기능을 지원하지 않는다면 해당 기능을 비활성화 해둠으로써 렌더링 속도를 높일 수 있습니다.

    독립성 - 텍스쳐, 조명 등의 기능끼리 서로 얽혀 발생하는 오류를 방지하기 위해 기능 간의 독립성을 최대한 보장합니다.

    완전성 - 기존 OpenGL에서 지원하지 않는 특정 하드웨어 기능이 있다면 ARB 확장 형태로 명령어를 제공함으로써 이러한 문제를 해결합니다.

    상호 작업성 - 네트워크를 사용한 그래픽으로 출력으로, 그래픽 서버가 그래픽 명령을 내리고 그래픽 프로그램이 클라이언트가 되는 환경에서 그래픽 명령어를 인코딩/디코딩 하는 방법을 사용합니다.

     

    파이프라인

     

    GPU 처리 속도를 획기적으로 개선한 것이 파이프라인 구조입니다.

    GL의 입력은 기하 기본 요소(3차원의 점, 선, 다각형)와 영상 기본 요소(2차원 비트맵 영상)로 구성되고,

    GL의 출력은 입력된 기하학적 기본 요소로 구성된 물체를 렌더링한 모습으로 나오게 됩니다.

    파이프라인은 입력과 출력 사이에서 그래픽 처리 작업을 기능별로 세분하여 이를 순차적으로 배치한 것입니다.

    컨베이어 벨트 시스템처럼 각 기능만 수행하고 다음 차례의 기능 수행자에게 넘기기만 하면 되기 때문에

    일을 끊기지 않게 수행할 수 있고, 모든 서브 프로세서가 동시에 가동됨으로써 전체 처리 속도가 빨라지게 됩니다.

    지엘 파이프라인의 서브 프로세서 (OpenGL로 배우는 3차원 컴퓨터 그래픽스(주우석/한빛미디어) 131p)

    파이프라인 순서는 위의 그림과 같습니다.

    파이프라인은 물체가 어떻게 그려져야 할 것인지를 표현하는 상태 변수(그래픽 콘텍스트) 값을 기준으로 자동 실행 됩니다.

    또 속성값 관련 함수가 포함된 시스템 테이블(System List)을 사용하여 기본 요소를 default값으로 두고 필요한 명령어만 호출함으로써

    반복되는 속성값들을 작성하지 않아도 됩니다.

     

    결국 하드웨어 상에서 상태 테이블에 상태 변수 값이 기록되고,

    개별 파이프라인 프로세서는 필요한 상태 변수 값을 이 테이블로부터 읽어 프로세스를 실행하게 됩니다.

     

    상태 변수 종류

     

    상태 변수 종류는 새로운 값을 설정하거나, 현재 값을 검색하는 두 종류의 함수가 있습니다.

    현재 값을 검색 : glGet* 함수 (ex, GetIntegerv(enum state_name, int *data), GetFloatv(enum state_name, int *data) 등등..)

    새로운 값을 설정 : (ex, glEnable(enum mode_name), glDisable(enum mode_name) 등등)

    반응형

    댓글

Designed by Tistory.