GL 함수 구조
"gl"은 GL 라이브러리 함수를 뜻한다. 이것이 "glu"이면 GLU 유틸리티 함수이고, "glut" 이면 GLUT 툴킷 함수이다.
"3"은 파라미터 수를 의미한다.
"f"는 파라미터가 부동소수 타입임을 의미한다. 이것이 "i"라면 정수 타입이다.
<GL 데이터 타입>
GL 타입은 GL 자체의 필요에 의해 C/C++의 타입명을 재정의한 것에 불과하다. 또 GL 자체가 C 함수로 구현되어 있으므로, 어떤 변수를 사용하고자 할 때는 굳이 GLfloat 대신에 그냥 float으로 선언해서 사용해도 된다.
"v"는 벡터를 의미한다. 여기서 벡터는 배열을 말한다. 즉, 배열 p[0], p[1]. p[2]에 x, y, z 값을 순차대로 넣으려는 것이다.
GL은 객체 지향적이지 않다. 객체 지향적이라면 glVertex함수는 2D, 3D 등등에 대해 오버로딩이 되있어서 하나의 함수로 모두 해결해야 하지만 GL은 glVertex3f(), glVertex2f() 처럼 차원마다 각각의 함수가 존재한다.
물론 원한다면, C++로 오버로딩을 해서 새로운 함수를 정의해서 공통으로 쓸 수 있지만, 이 경우 문제가 되는것은 실행 속도이다. GL이 객체 지향을 채택하지 않은 것은 순전히 처리속도를 높이기 위함이다.
프로그램 구성 요소
: GL 함수만으로는 GL 프로그램을 작성할 수 없다. GL은 단지 렌더링 기능만 수행할 뿐, 입력장비를 통해 사용자 입력을 받아들이거나 렌더링 결과를 출력하기 위해 운도우를 생성하는것도 GL이 하지 못한다.
이러한 기능은 아래 GLU, GLUT가 담당한다.
- GL(OpenGL Core Library)
: 렌더링 기능을 제공하는 함수 라이브러리 이다.
- GLU(OpenGL Utility Library)
: 50여 개의 함수로 구성된다.
: GL 라이브러리의 도우미 역할을 한다. 이는 다각형 분할(Tessellation), 투상(Projection), 2차원 곡면(Quadratic Surface), NURBS(Non-Uniform Rational B-Spline) 등 고급 기능을 제공한다.
: GL 함수로 작성되어 있기 때문에, GL의 일부로 취급되기도 한다. GLU의 2차 곡면 기능을 이용하면 원구, 원뿔, 원기둥을 손쉽게 생성할 수 있다.
- GLUT(OpenGL Utility ToolKit)
: 사용자 입력을 받아들이거나 화면 윈도우를 제어하기 위한 함수로, 윈도우 운영체제가 실행하는 기능 들이다.
: GLUT 함수는 운영체제를 호출한다. 함수 일부는 GL, GLU 함수를 호출하기도 한다.
GLUT와 운영체제
: 프로그램 실행시 프로그램의 명령을 실행하는 것은 운영체제이다. 즉 하나의 GL 프로그램을 복수의 운영체제에서 돌아가게 만드려면 해당 명령들을 운영체제에 맞게 포팅해주는 역할이 필요하다.
이 역할을 담당하는 것이 GLUT이다.
그래서 동일한 이름의 GLUT의 함수라도 명령어의 번역이 운영체제 별로 다르다. 그래서 프로그래머는 운영체제의 종류를 신경쓸 필요가 없다.
그리고 GLUT 함수는 상대적으로 간단한 추상적 명령으로 구성되어 있기 때문에 프로그래밍 하기가 쉽다.
그러나 GLUT로는 매우 제한된 GUI 인터페이스만 구현 가능하다. 그 이상의 기능을 구현하려면 해당 OS에서 제공하는 라이브러리를 써야하고 그것을 쓰면 해당 OS 에서밖에 동작하지 않는다.
'영상 처리 프로그래밍' 카테고리의 다른 글
[컴퓨터 그래픽스] 좌표계 (1) | 2017.11.23 |
---|---|
[컴퓨터 그래픽스] OpenGL 기본(2) (0) | 2017.11.22 |
[컴퓨터 그래픽스] Introduction (0) | 2017.11.22 |
영상의 기하학적 변환 (0) | 2017.11.02 |
다양한 공간적 필터링 기법 (0) | 2017.11.02 |