'My story'에 해당되는 글 44건

디스플레이 리스트 
변경되지 않는 일련의 명령어들을 컴파일하여 빠른 속도의 렌더링을 위해 사용한는 방법

OpenGL 함수의 실행모드는 두가지로 분류 된다.


1. 직접모드
물체를 화면에 그림과 동시에 물체 생성과 관련된 모든 정보를 파기해 버린다. 따라스 그 물체를 다시 그리려면 모든 코드를 처음부터 다시 실행해야 한다.

2. 보류모드
정의된 물체 정보를 그대로 유지하고 재사용한다. 이미 정의된 물체를 컴파일 된형태로 재 사용함으로써 빠른 속도를 보장한다. OpenGL의 보류모드는 디스플레이 리스트에 의해 이루어진다.

디스플레이 리스트를 선언하기 위해서는 먼저 glGenLists함수를 호출하고 리턴값을 저장해둔다.
그리고 glNewList 함수와 glEndList내부에 사용할 명령어들을 정의 한다.
마지막으로 렌더링함수에서 glCallList함수를 호출 해줌으로써 실행된다.
그러나 디스플레이 리스트의 내용은 한 번 정의되면 일부만 수정이 불가능하게 되므로 수정을 원한다면 전체를 다시 생성해야 한다.

GLuint glGenLists(GLsizei range);
이 함수는 사용 안된 디스플레이 리스트중 첫번째의 아이디를돌려 준다. range는 원하는 아이디의 갯수 이며 어려개를 할당할려면 다음과 같이 한다.
GLuint list1, list2
list1 = glGenLists(2);
list2 = list1+1;

glNewList(GLuint list, GLenum mode);
이 함수는 이제 나오는 명령들을 리스트로 만든다. list는 glGenLists에서 넘겨받은 ID값이다.
mode는 2가지가 있는대 하나는 컴파일만 시키는 GL_COMPILE과 컴파일을 함과 동시에 명령을 즉시 실행하는 GL_COMPILE_AND_EXECUTE가 있다.

void glEndList(void);
이 함수는 리스트로 만들 명령어가 끝났음을 의미한다

void glCallList(GLuint list);
이 함수는 glNewList함수로 컴파일한 리스트를 실행하는 함수이다. list에는 ID값을 넘겨준다.



'라이브러리 > OpenGL' 카테고리의 다른 글

조명과 음영  (0) 2009.03.24
OpenGL의 투영과 뷰포트 변환  (0) 2009.03.24
OpenGL의 모델변환 및 행렬스택  (0) 2009.03.22
기하 변환  (0) 2009.03.22
3차원 물체의 표현  (0) 2009.03.22
정점배열  (0) 2009.03.22
GLUT 모델링  (0) 2009.03.21
OpenGL의 좌표계, 뷰포트  (0) 2009.03.21
파이프라인과 상태변수  (0) 2009.03.21
OpenGL의 설계원리  (0) 2009.03.21
Posted by crownog
,
정점 리스트 개별 정점을 가리키는 일종의 포인터에 해당한다.
정점 배열 : 정점 리스트를 사용하여 함수 호출의 횟수를 줄이기 위한 방법

glEnableClientState 함수를 사용 해서 사용할 배열을 활성화 할수 있다. 활성화 한수에는
gl(사용할배열종류명)Pointer 함수를 사용 하여 적용할 배열과 플래그 등을 설정해준다.
그리고 최종적으로 glDrawElements 함수에 정점리스트 및 필요한 파라미터를 넘겨 호출하면 렌더링을 한다.
(  예) Color배열을 등록할때는 glColorPointer 처럼 하면된다. 그리고 파라미터는 함수마다 다르므로 레퍼런스 확인)

void glEnableClientState(GLenum array);
array는 활성화할 배열의 상수값을 넣는다.

void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
mode는 그릴 형식(GL_POLYGON 등)을 지정 하고, count는 읽어올 정점리스트 갯수, type는 배열의 데이터형, indices는 정점리스트의 시작수로를 넘겨준다.

다각형의 정점을 명시할 때는 오른손 법칙을 사용 하면 반 시계 방향 순서로 명시해야 한다.


'라이브러리 > OpenGL' 카테고리의 다른 글

OpenGL의 투영과 뷰포트 변환  (0) 2009.03.24
OpenGL의 모델변환 및 행렬스택  (0) 2009.03.22
기하 변환  (0) 2009.03.22
3차원 물체의 표현  (0) 2009.03.22
디스플레이 리스트  (0) 2009.03.22
GLUT 모델링  (0) 2009.03.21
OpenGL의 좌표계, 뷰포트  (0) 2009.03.21
파이프라인과 상태변수  (0) 2009.03.21
OpenGL의 설계원리  (0) 2009.03.21
채도, 명도  (0) 2009.03.21
Posted by crownog
,

GLUT에서는 몇가지의 물체를 간단히 모델링 할수 있게 함수를 지원 해주고 있다.
각 물체마다 2개의 함수를 지원하고 있으며, 함수명 중간에 Solid가 들어가면 물체의 면을 입히고 Wire이 들어가면 선만을 가지고 그린다.


정육면체
void glutSoildCube(GLdouble size)
void glutWireCube(GLdouble size)
size는 한 변의 길이 이다.

원(구)
void glutSolidSphere( GLdouble radius, GLint slices, GLint stacks);
void glutWireSphere( GLdouble radius, GLint slices, GLint stacks);
radius = 반지름, slices = 세로선의 수, stacks= 가로선의 수

원환체(도넛)
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings);
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings);
원환체(도넛)는 똑같를 크기를 가진 여러개의 원과 가로 선을 이어서 원을 만든다. innerRadius는 원환체를 이루는 원의 반지름 이며, outerRaidus는 원환체 전체의 반지름 이다. nsides는 원환체를 가로단면의 수 이며, rings는 원환체에 들어간 원의 수(윤곽을 이루는 선분의 수) 이다. 

원뿔
void glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks);
void glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks);
base = 밑면의 반지름, height = 원뿔의 높이, slices = 세로선의 수, stacks = 가로선의 수(단면의 수)

정 4면체
void glutSolidTetrahedron(void);
void glutWireTetrahedron();
모델 좌표계의 원점을 중심으로 반지름 1.0인 4면체를 그린다.

정 20면체
void glutSolidIcosahedron(void);
void glutWireIcosahedron(void);
모델 좌표계의 원점을 중심으로 반지름 1.0인 20면체를 그린다.

주전자
void glutSolidTeapot(GLdouble size);
void glutWireTeapot(GLdouble size);
size는 상대적 크기( 개인적인 생각으론 몸통중심원의 반지름 같다)


'라이브러리 > OpenGL' 카테고리의 다른 글

OpenGL의 모델변환 및 행렬스택  (0) 2009.03.22
기하 변환  (0) 2009.03.22
3차원 물체의 표현  (0) 2009.03.22
디스플레이 리스트  (0) 2009.03.22
정점배열  (0) 2009.03.22
OpenGL의 좌표계, 뷰포트  (0) 2009.03.21
파이프라인과 상태변수  (0) 2009.03.21
OpenGL의 설계원리  (0) 2009.03.21
채도, 명도  (0) 2009.03.21
GLUT의 콜백함수  (0) 2009.03.09
Posted by crownog
,

OpenGL은 입력 기본요소인 정점에 일련의 변환이 가해진다. 변환 과정은 다음과 같다.

모델좌표 --> 전역좌표 --> 시점좌표 --> 절단좌표 --> 정규좌표 --> 화면좌표

모델 좌표계 : 모델링에 편하게 설정된 좌표계
전역 좌표계 : 개별 물체의 좌표계를 모아 하나로 만들수 있는 좌표계
시점 좌표계 : 몰체를 바라보는 시점을 기준으로 표현한 좌표계
절단 좌표계 : 시점으로부터 보이지 않는 물체를 잘내기 편하게 설정한 좌표계
정규 좌표계 : 상,하,좌,우 로 1의 범위를 가진 2차원 좌표계
화면 좌표계 : 장치 좌표계 또는 윈도우 좌표계라 하며 화소 단위로 좌표를 표시한다. 좌상단이 기준으로 Y축은 아래쪽이 +이다.

뷰포트
윈도우 내부에 설정한 작은 창으로 윈도우의 일부만 그리거나 화면을 분활 하여 그릴 때 사용한다.
만약 별도로 지정하지 않으면 윈도우 창 자체가 하나의 뷰포트가 된다. 이럴경우 왜곡이 일어나기도 한다.
왜곡이 일어나지 않기 하기 위해서는 종횡비가 유지 되도록 해주면 왜곡이 일어나지 않는다.

glViewport(GLint x, GLint y, GLsizei width, GLsizei height)

뷰포트를 설정할때 주의 할점은 시작위치인 x, y의 값은 윈도우의 좌하단을 원점으로 한다.



'라이브러리 > OpenGL' 카테고리의 다른 글

기하 변환  (0) 2009.03.22
3차원 물체의 표현  (0) 2009.03.22
디스플레이 리스트  (0) 2009.03.22
정점배열  (0) 2009.03.22
GLUT 모델링  (0) 2009.03.21
파이프라인과 상태변수  (0) 2009.03.21
OpenGL의 설계원리  (0) 2009.03.21
채도, 명도  (0) 2009.03.21
GLUT의 콜백함수  (0) 2009.03.09
GLUT의 윈도우 관련 함수  (0) 2009.03.09
Posted by crownog
,