'라이브러리/OpenGL'에 해당되는 글 18건

우리가 컴퓨터에서 3차원 물체를 표현할때는 크게 두가지가 있다. 하나는 물체의 겉 표면만 표현하는 것이고 다른 하나는 내부까지 포함해서 표현 하는 것이다.
그중 많이 사용되는것은 겉표면만 표현하는 방법이다. 이른바 경계면 표현이라불리는 이방법은 평면 다각형의 집합으로 나타낸다.

3D 모델링 데이터 에서 면을 구성하고 있는 평면 다각형 하나하나를 메쉬, 표면 메쉬, 다각형 메쉬, 표면 다각형, 또는 단순히 다각형이라 부른다. 일반적으로 메쉬에 사용되는 다각형은 주로 사각형 또는 삼각형을 사용한다.


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

가시성 판단  (0) 2009.03.31
조명과 음영  (0) 2009.03.24
OpenGL의 투영과 뷰포트 변환  (0) 2009.03.24
OpenGL의 모델변환 및 행렬스택  (0) 2009.03.22
기하 변환  (0) 2009.03.22
디스플레이 리스트  (0) 2009.03.22
정점배열  (0) 2009.03.22
GLUT 모델링  (0) 2009.03.21
OpenGL의 좌표계, 뷰포트  (0) 2009.03.21
파이프라인과 상태변수  (0) 2009.03.21
Posted by crownog
,

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

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
,