Post

OpenGL - 4 OpenGL API

OpenGL - 4 OpenGL API

04_01 그래픽스 표준

​

-1 국제 표준

표준화(Standardization)는 “ 주어진 여건에서 최적의 질서를 유지하기 위해, 현존하거나 잠재하는 문제들에 대해, 공유성과 재사용성을 높이기 위해 규정을 재정하는 행위로 정의된다.

​

컴퓨터 그래픽스 분야는 ISO 표준이 제정되어 있다.

​

컴퓨터 그래픽스의 표준에 의하면 컴퓨터 그래픽스는 “컴퓨터 하드웨어와 소프트웨어를 사용하여 물체와 물체영상을 생성, 변형, 디스플레이, 저장하는 것”으로 정의된다.

그래픽스 분야의 표준은 다음과 같은 개념을 염두에 두고 제정된다.

​

  • 1 주 전산기 독립성(Host Machine Independence)

  • 동일한 프로그램으로 다양한 하드웨어에서 사용할 수 있어야 한다.

  • 2 장비 독립성(Device Independence)

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

  • 3 프로그램 언어 독립성(Programming Language Independence)

  • 프로그램을 작성할 때 어떠한 프로그램 언어를 사용해도 된다.

  • 4 운영자 이식성(Operator Portability)

  • 새로운 프로그램 사용법을 누구든지 쉽게 터득할 수 있어야 한다.

​

-2 기본 요소와 시스템 리스트

​

​

​

여기서 (b) - 1 처럼 둥글게 처리한 것을 원형 캡(Round cap)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        (b) - 2 처럼 끝을 수직으로 잘라버린 것을 버트 캡(Butt cap)

        (b) - 3 처럼 선 두께의 반만큼 확장한 것을 확장 캡(Projecting Cap)

        (c) - 1 처럼 둥글게 처리한 것을 원형 연결(Round Join)

        (c) - 2 처럼 잘라낸 것을 베벨 연결(Bevel Join)

        (c) - 3 처럼 뾰족하게 처리한 것을 마이터 연결(Miter Join)

        (d) - 1 처럼 다각형 내부를 어떤 색상으로 채워넣은 채움 다각형(Filled Polygon)

        (d) - 2 처럼 점층적 변화를 준것(Gradation)

        (d) - 3 처럼 사선 패턴으로 채운 것

        (d) - 4 처럼 윤곽선 제거(outline)

​

을 통틀어서 기본 요소 외양(Primitive Aspects) - 요소들이 매 순간 어떤 모습을 띠고 화면에 표시되는 지를 말함.

​

기본 요소 외양이 가지고 있는 외양값을 기본 요소 속성(Primitive Attribute)라고 한다.

​

​

-3 GKS,PHIGS

​

그래픽스 표준은 표준이 언급하는 내용에 따라 4가지로 분류, 이는 계층 구조로 이루어져 있다.

1
                                 상위     ->    하위

응용 프로그램 레벨(Application Level) - 가상 레벨(Virtual Level) -> 논리적 레벨(Logical Level) -> 물리적 레벨(Physical Level)

​

ISO 그래픽 표준에는 크게 두 가지 흐름이 있다.

1985년 제정된 GKS - 주로 2차원을 위주로 다룸.

1989년 제정된 PHIGS - 주로 3차원을 위주로 다룸.

​

bitmap 파일은 가장 저급하고 단순히 화소값을 저장하지만, GKS는 그림을 저장할 때 기본 요소의 위치,

속성, 가시성 등의 정보를 저장한다. GKS 메타파일(Metafile)은 그림을 저장하는 대신 그림을 만들어 낼 때

사용하는 순차적 명령어들을 저장하기도 함.

​

PHIGS는 GKS보다 더욱 상위 레벨의 메타파일을 사용하는데,

예를 들어서 오른쪽 로봇팔을 움직일 때 왼쪽 로봇팔은 자연스럽게 흔들고, 그 왼쪽 팔에 있는 관절들을 또 움직여주는 구조체의 최상위 객체로부터 시작하여 계층구조의 위에서 아래로 관통하면서 해당 물체를 그려낸다.

​

-4 언어 바인딩

​

언어 바인딩(Language Binding)은 그래픽 소프트 웨어 개발자를 위한 것이다.

​

표준을 지키라는 뜻이다.

1
2
3
4
int max(int a,int b)
{
  return (a > b ? a : b);
}

에서 max라는 함수는 내가 지정한 것이지만, 표준으로 이미 지정되어 있다 치고,또 이미 지정되있다.

첫번째 파라미터에는 비교할 정수 a , 두번째 파라미터에는 비교할 정수 b를 넣으란 소리다.

내가 string(문자열)을 넣거나 하는건 표준에 어긋나는 행위라는 것이다.

​

표준이 제정되기까지는 오랜시간이 걸리는데, 심사에 의해 제정된 표준을 심사 표준

표준이 제정되면서 새로운 하드웨어, 소프트웨어 출현으로 표준보다 앞선 규칙이 통용되는 경우를

사실 표준 이라고한다.

​

04_02 API(application Programming Interface)

​

API는 라이브러리 함수를 만한다. 라이브러리 함수는 그래픽 하드웨어와 응용 프로그램 사이에 위치하여,

사용자가 좀 더 쉽게 그래픽 하드웨어를 제어할 수 있게 도와주는 함수들이라고 할 수 있다.

​

2차원 그래픽 API - PDL(page Description Language)

3차원 그래픽 API - 펙스(PEX)나 렌더맨(Renderman)을 들 수 있다.

펙스는 윈도우에서만 돌아가기 때문에 범용성이 좋지 않다.

​

3차원 그래픽 API는 라이브러리 함수의 구체성을 기준으로 크게 두 가지로 분류한다.

고수준 API(High - Level API)에서는 그림을 그리기 위한 세부 과정을 명시하는 대신, 물체를 정의하고 물체 사이의 관계를 묘사함으로써 프로그램 작성이 완료. ex) OpenInventor, VRML, Java3D 등

저수준 API(Low - Level API)에서는 실제 그림을 그리는 세부적인 과정을 일일이 명시

ex) OpenGL,Direct 3D

​

04_03 오픈지엘 개괄

​

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

아이리스 지엘(Iris GL)이 개인용 컴퓨터에 이식되기 시작했고, 이를 오픈지엘(OpenGL)이라 부르기 시작했다.

저수준 API인 OpenGL이 고수준 API보다 좀 더 세부적인 사항 수정이 쉽다.

​

지엘의 설계 원리는 범용성, 효율성, 독립성, 완전성 등으로 구성되어 있다.

​

범용성 : MS 윈도우 운영체제 뿐만아니라 유닉스 등 운영체제에서도 실행될 수 있다.

효율성 : 하드웨어 기능 중 공통적인 부분을 찾아내어 그 성능을 극대화 하는 것.

독립성 : 어떤 행위가 다른 행위에 영향을 미치지 않아야 한다.

완전성 : 특정 하드웨어 기능에 대해서는 ARB 확장 형태로 명령어를 제공함으로써 사용자마다 다른 그래픽 하드웨어를 가지고 있어, 그 하드웨어를 어떤 API가 수용하지 않으면 다른 API를 찾는 문제를 해결

상호 작업성 : 지엘 프로그램이 클라이언트가 되고 그래픽 서버가 그 명령을 서비스하는 클라이언트 - 서버 모델

​

지엘의 입력을 기하 기본 요소(Geometry Primitives) 나 영상 기본 요소(Image Primitives)로 구성된다.

​

04_04 오픈지엘 프로그래밍

​

이하 지엘 데이터 타입이다.

​

지엘 프로그램은 세 가지 요소로 구성된다.

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

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

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

​

GLU 라이브러리는 GL 라이브러리 위에 구축된 것이므로, GLU 함수 호출은 결국 GL 함수 호출로 바뀐다.

GLUT 라이브러리는 입출력 및 윈도우를 제어하기 위한 것이므로 운영체제를 호출한다.

GLUT 함수는 명령어의 번역이 운영체제 마다 달라서 프로그래머가 신경쓸 이유가 없고, 이러기에 호환성이 좋다.

GLUT의 기능 중 가장 중요한 것 중의 하나가 콜백 함수다.

​

GLUT에는 프로그램 제어 상태 변수 와 시스템 고정 상태 변수 등이 있다.

​

​

04_05 오픈지엘 설치와 설정

​

은 각자 알아서..

​

라고 했으나

​

– 추가 수정—-

​

R패키지 설치했던것과 똑같이 오픈지엘 설치하는데 거의 1시간을 썼습니다.

​

일단 일반 glut라는 것과 freeglut라는게 있는데, 예전에는 glut를 썼는데, opengl 홈페이지 들어가보면 freeglut로 대체되었습니다. 때문에, 인터넷에 검색하다보면 glut설치법과 freeglut 설치법이 따로 나뉘어져 있어 혼돈을 줍니다.

​

freeglut를 설치하는 것을 opengl 홈페이지에서 권하므로, freeglut를 설치하고 그에 맞는 .lib 파일과 .h파일은

visualstudio 헤더파일 있는곳과 라이브러리 있는 곳에 복사 붙여넣기 해주시면 됩니다.

​

그리고 freeglut를 사용시

glutInit(&argc, argv); 로 초기화를 꼭 해줘야 한다고 하네요..

​

다른분들은 저처럼 고생하시길 마세요.

​

감사합니다..

실험 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<freeglut.h>
void MyDisplay()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_POLYGON);
	glVertex3f(-0.5, -0.5, 0.0);
	glVertex3f(0.5, -0.5, 0.0);
	glVertex3f(0.5, 0.5, 0.0);
	glVertex3f(-0.5, 0.5, 0.0);

	glEnd();
	glFlush();
}

int main(int argc,char** argv)
{
	glutInit(&argc, argv);
	glutCreateWindow("OpenGL Drawing Example");
	glutDisplayFunc(MyDisplay);
	glutMainLoop();

}



4장연습문제

​

  • 1 그래픽 분야의 ISO 표준 중 하나인 PHIGS에는 구조체 개념이 포함되어 있다. (True/False)

-> True PHIGS는 물체의 집합을 다루는데, 그것을 구조체라 한다.

​

  • 2 API는 프로그램 언어다. (TRUE/FALSE)

-> API는 프로그램 언어가 아닌, 프로그램 언어로 만들어진 라이브러리 함수 집합이다.( 개인생각 )

​

  • 3 고수준 API는 장면 묘사 위주로, 구조체 렌더링 방식이 포함되어 있지 않다. (TRUE/FALSE)

-> TRUE

​

  • 4 파라미터 리스트를 사용할 경우 시스템 테이블은 불필요하다. (TRUE/FALSE)

-> FALSE 파라미터 리스트를 사용하는 경우가 불편해서 시스템 테이블이 생겨난 것이다.

​

  • 5 파이프라인 구조에서 서브 프로세서의 논리는 하드웨어적으로 고정되어 있다. (TRUE/FALSE)

-> TRUE

​

  • 6 지엘이 C 함수에 대한 호출이라면 GLU는 지엘에 대한 호출이다. (TRUE/FALSE)

-> TRUE

​

  • 7 점, 선, 삼각형 등 렌더링의 최소단위를 그래픽 ()이라 한다.

-> 기본요소

​

  • 8 심사 표준이 제정되지 않는 상태에서 현실 시장에서 통용되는 표준을 ()이라 한다.

-> 사실 표준

​

  • 9 ISO에서 시스템 테이블은 지엘의 ()에 해당한다.

-> 상태변수 도표

​

  • 10 GLUT는 지엘과 () 운영체제 사이의 인터페이스다.

-> 윈도우즈

​

  • 11 장면묘사 API에서 () 노드는 2개 이상의 노드로 구성된다.

-> 그룹

​

  • 12 윈도우 좌상단을 화면 좌표(30,10)에 위치시키기 위한 GLUT 함수는 ()이다.

-> glutinitWindowPosition(30,10)

​

  • 13 C 언어의 부동 소수 타입인 float에 해당하는 지엘 타입은 () 이다.

-> GLfloat

​

  • 14 어떤 모드를 활성화하기 위한 지엘 함수는 () 이다.

-> glEnabled()

​

  • 15 ISO 그래픽스 표준 내용을 인터넷에서 조사하여 발표해보라

-> …

This post is licensed under CC BY 4.0 by the author.