오다기리 박의 알고리즘 노트

[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 04. 오픈지엘 API 본문

컴퓨터 그래픽스/OpenGL

[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 04. 오픈지엘 API

오다기리 박 2019. 2. 14. 21:08

OpenGL로 배우는 3차원 컴퓨터 그래픽스


Chapter 04. 오픈지엘 API

Section 01. 그래픽스 표준

  • ISO 표준

    • 컴퓨터 그래픽스 :  “하드웨어와 소프트웨어를 사용하여 물체와 물체영상을 생성, 변형, 디스플레이, 저장하는 것”

    • 주전산기 독립성 : 동일한 프로그램을 가지고서 다양한 모든 하드웨어에서 사용할 수 있어야 한다.

    • 장비 독립성 : 입출력 장비의 종류가 달라도 동일 기능을 수행하기 위한 프로그램 명령은 동일해야 한다.

    • 프로그램 언어 독립성 : 프로그램 작성에 어떠한 프로그램 언어를 사용해도 된다.

    • 운영자 이식성 : 새로운 프로그램 사용법을 누구라도 쉽게 터득할 수 있어야 한다.

  • 기본요소와 시스템 리스트

  • GKS, PHIGS

    • 그래픽스 표준에의한 분류

      • 응용 프로그램 레벨 : 응용 프로그램이 지켜야 할 표준을 추상적인 수준에서 서술하는 것

      • 가상 레벨 : 출력되어야 할 내용을 기본요소를 사용하여 서술하는 것

      • 논리적 레벨 : 주어진 장비에서 해당 기본요소를 그리기 위해 필요한 과정을 서술

      • 물리적 레벨 : 개별 입출력 장비에 관한 내용 서술

    • ISO 그래픽 표준의 흐름

      • GKS (Graphical Kernel System) : 2차원 위주, 전역 좌표계, 정규화 장치 좌표계, 장치 좌표계

      • PHIGS(Programmer’s Hierarchical Interactive Graphics System) : 3차원 모델링, 가시화, 전역 좌표계, 정규화 장치 좌표계, 장치 좌표계, 시점, 가시부피

    • 그래픽 파일

      • 비트맵 파일 : 단순히 화면 화소값을 저장

      • GKS 메타파일 : 그림을 만들어 낼 떄 사용한 순차적 명령어들 저장

      • PHIGS 메타파일 :  GKS 메타파일의 내용을 포함 + 응용 프로그램 레벨에서 기본 요소 사이의 관계까지 저장(ex. CSG의 불리언 연산의 내용)

  • 언어 바인딩

    • 그래픽 소프트웨어 개발자를 위한 부분


Section 02. API

  • 그래픽 API

    • API : 함수를 이용하여 프로그램을 작성하는데 직접 활용할 수 있도록 한 라이브러리 함수

    • 직접 하드웨어를 제어하는 명령 대신 그보다 상위 개념인 라이브러리 함수를 호출함으로써 손쉽게 응용 프로그램 작성 가능

    • 응용프로그램이 라이브러리 함수 호출 -> 드라이버 소프트웨어에 의해 해당 하드웨어를 제어하는 어셈블리 명령어로 바뀜

  • High-Level 그래픽 API

    • 그림을 그리기 위한 실제적인 세부 과정을 명시하는 대신, 물체를 정의하고 물체 사이의 관계를 묘사함으로써 프로그램 작성 완료

    • ex) Open Inventor, VRML

  • Low-Level 그래픽 API

    • 물체를 구성하는 기본요소의 정의부터 시작해서 실제 그림을 그리는 세부적인 과정을 일일히 명시

    • 그래픽 메모리, 그래픽 가속 칩 등 하드웨어와 밀접함 : 하드웨어 성능을 최대한 발휘 가능

    • ex) OpenGL, Direct3D

Section 03. 오픈지엘 개괄

  • API 레벨

    • API 발전과정

      1982년 실리콘 그래픽스(SGI)사가 자사의 워크스테이션용 그래픽 하드웨어를 파이프라인화하기 위해 개발된 API가 Iris GL(GL) -> 아이리스 지엘이 이후 고성능 그래픽 카드를 장착한 개인용 컴퓨터에 이식되기 시작하며 openGL이라 부름 ->

    • 고수준 API처럼 어떤 장며을 묘사한 것이 아니라, 묘사된 내용으로부터 그 장면을 그려내기 위해 필요한 구체적인 프로시져에 해당한다.

  • GL 설계원리

    • 범용성

      • 대부분의 하드웨어에서 실행가능

      • 소프트웨어 면에서 운영체제 무관하게 설계

    • 효율성

      • 그래픽 프로세서 칩이나 프레임 버퍼 등 그래픽 하드웨어의 가속 기능을 최대한 발휘하기 위해 호환성 지님

    • 독립성

      • 기능간의 독립성이 보장됨

    • 완전성

      • 하드웨어 기능을 대부분 수용한다.

      • 공통된 기능이 아닌 특정 하드웨어 기능에 대해서는 ARB확장 형태로 명령어 제공

    • 상호 작업성

  • 파이프라인과 상태변수

    • 파이프라인

      • 그래픽 처리 작업을 기능별로 세분하여 이를 순차적으로 배치한 것

      • GPU의 처리속도를 획기적으로 개선한 것

      • 파이프라인 구조를 활용하면 모든 서브 프로세서가 동시에 가동되기 때문에 전체 처리속도가 빨라진다. (서브 프로세싱은 하드웨어로 구현된다)

    • 상태변수

      • 상태변수(=그래픽 컨텍스트) : 물체가 어떻게 그려져야 할지를 표현

      • GL은 단지 서브 프로세서에 파라미터를 전달하는 일을 함

  • 시스템 테이블

    • GL 프로그램이 상태변수 값을 설정하면 그 값이 상태 테이블에 기록되고, 개별 파이프라인 프로세서는 필요한 상태변수 값을 이 테이블로부터 읽어서 프로세스를 실행한다.

    • 모드(Modes)

      • 상태변수보다 포괄적인 개념

      • 조명, 텍스처 등과 같은 종류의 상태변수

      • 조명 모드를 비활성화하면 조명에 관련된 모든 상태변수가 자동으로 비활성화됨


Section 04. 오픈지엘 프로그래밍

  • 명령어

    • GL은 처리속도를 높이기 위해 객체지향을 채택하지 않음

  • 프로그램 구성요소

    • 지엘 라이브러리(GL : OpenGL Core Library)

      • 렌더링 기능을 제공하는 함수 라이브러리

    • 지엘 유틸리티 라이브러리(GLU : OpenGL Utility Library)

      • 지엘 라이브러리의 도우미

      • 다각형 분할(Tessellation), Projection, Quadric Surface, NURBS(Non-Uniform Rational B-Spline) 등 고급기능을 제공하는 함수로서 GL 함수로 작성되어있음

    • 지엘 유틸리티 툴 킷(GLUT : OpenGL Utility Toolkit)

      • 사용자 입력을 받아들이거나 화면 윈도우를 제어하기 위한 함수로서 윈도우 운영체제가 실행하는 기능들

      • GL 프로그램과 그 프로그램이 돌아가는 윈도우 운영체제 사이의 인터페이스

      • GL의 일부가 아닌 Freeware

  • GLUT와 윈도우 운영체제

    • 운영체제 역할

      • 프로그램 실행 시 프로그램을 제어

      • GL 프로그램 실행의 시작 명령을 내리는 것도 운영체제

      • GL 요청에 따라 새로운 윈도우 만들기

      • GL의 렌더링 작업이 끝났을 때 윈도우 안에 그 결과를 보이는 함수를 호출

      • 마우스 클릭시 상호작용에 필요한 함수 호출

    • GLUT