* 그래픽 분야 표준화 Guide Line
- Host machine independence : 동일 프로그램을 다양한 H/W에서 사용 가능해야 한다.
- Device Independence : I/O Device 종류가 달라도 프로그램 명령은 동일해야 한다.
- Programming Language Independence : 프로그램 작성에 아무 언어를 사용해도 된다.
- Operator Portability : 사용법을 쉽게 터득 할 수 있어야 한다.
* Graphics Primitives(기본요소) & Attribute(외양)
- 기본요소 : 점, 선, 채움 영역, 꺽은선, 표시 꺽은선, 문자
- 외양 : 겉모양(Aspect), 같은 기본요소라도 패턴 색상, 두께 등을 다르게 하여 다양한 형태를 만들 수 있다.
* ISO Graphic standard
ⓐ GKS(Graphical Kernel System)
- 유럽에서 발달
- 2D 위주 시작 > GKS-3D로 발전
- 파일 저장 형식 : 기본요소(위치 좌표, 속성, 가시성, 변환 정보)를 서술하여 가상 레벨에 저장
ⓑ PHIGS(Programmer's Hierarchical Interactive Graphics System)
- 미국에서 발달
- 3차원 모델링, 가시화에 중점을 두었고, CAD 개념이 도입됨
- 계층 구조로 물체의 상관관계를 하나의 집합으로 표현(구조체)
> 구조체 관통에 의한 드로잉, CTM(Current Transformation Matrix)개념 도입
* Graphics API
- 응용 프로그램 라이브러리, 인터페이스
- PHIGS, GKS는 일반적으로 low level로 정의
- Graphics application program이 바로 Assembly (device language)로 변환되기 힘들기 때문에 사용
* High level graphic API
- 장면을 묘사하는 언어와 이로인해 만들어지는 장면 그래프가 있다.
- 장면 묘사언어(Scene Description language), 장면 그래프(Scene graph)
- 고수준 API예 : Open Inventor, VRML, Java 3D
* Low level graphic API
- 장면 묘사 없이 구체적인 프로시저를 호출
- 하드웨어와 직접연관되서 사용됨(속도 향상!)
- High level보다 더 세분화된 묘사가 가능
* OpenGL 설계원리
1. 범용성 : 운영체제와 무관
2. 효율성 : 하드웨어 가속 기능을 최대한 활용, 회사마다의 공통점과 차이점을 찾아 옵션 기능을 추가
3. 완전성 : 특정 하드웨어의 성질을 ARB로 확장하여 명령어 제공, 추세에 따라 표준이 변경되기도함.
4. 상호 작업성 : C(client)-S(server) model을 지원
5. 독립성 : 기능, 객체간의 독립성을 유지
* GPU 설계원리
- CPU Pipe line과 유사
- 분업, 병렬처리를 통한 처리 속도의 극대화
- 파이프라인의 서브 프로세서는 속도향상을 위해 HW로 제작한다.
> GL은 상태변수(State variable)을 생성하여 각각의 파이프라인에 전달만 하면된다.
> 파이프라인은 상태변수를 참조하고, 자동실행한다.
* 속성 값 할당 방법
- 파라미터리스트와 시스템 테이블 방식이 있다.
- 파라미터리스트의 단점에 의해 시스템 테이블 방식을 많이 사용한다.
ⓐ 파라미터리스트(Parameter list)
> 파라미터로 속성을 모두 전달
ex) drawLine( (1,0), (2,0), (255,0,0) ) ; // 빨강색선을 그린다.
> 속성의 수는 색뿐만 아니라 수많이 존재, 복잡해진다.
eg. HTML CSS
ⓑ 시스템 테이블(System table)
> 각각 속성에 대한 값을 매칭하여 테이블을 생성
> 사용자는 변화시킬 값을 변화시키고, 작업. 현상태(Current State)를 표에서 읽어와서 작업
eg. 그림판, Photoshop
* GL 명령어 구조
- Type에는 다양한 것이 존재하지만, f(float)와 v(array)를 주로 사용한다.
- GL용으로 사용한다는 의미에서 type을 float대신 GLfloat라고 정의하기도 한다.
> float와 GLfloat가 하는 일은 동일하다.
- 속도를 위해 객체 지향 요소를 전혀 가미하지 않았기 때문에 오버라이드가 없다.
* GL, GLU, GLUT
ⓐ GL(OpenGL Core Library) - 렌더링 기능을 제공하는 함수 라이브러리
ⓑ GLU(OpenGL Utility Library)
- OpenGL을 위한 그래픽스 라이브러리로 GL함수에 기반하여 작성되었다.
- GL라이브러리의 도우미 역할로 더 높은 수준의 그리기 루틴을 제공한다.(약 50여 개의 함수가 존재)
- 일반적으로 GL Package(OpenGL Package)에 함께 배포된다.
- 임베디드에 제공되는 것과 다르다. 임베디드에는 OpenGL ES(OpenGL for Embedded Systems)로 제공된다.
- 화면과 세계 좌표간의 맵핑, 미니맵의 텍스쳐 생성, 곡면 표면, NURBS의 그림 등의 기능을
OpenGL에서 제공하는 루틴보다 더 인간 친화적으로 제공한다.
- 사용자의 IO를 받지 않으며 Animation등에서 사용된다.
※ NURBS(Non-Uniform Rational Basis Spline)
- 컴퓨터 그래픽에서 곡선과 표면을 생성하는 수학적 모델
- 3D NURBS는 복잡하고 유기적인 표면을 만들 수 있다.
- Control Point를 이용하여 곡선의 모양을 결정