일단, Primitives 가 뭔지 알아야 겠죠? :-D 사전적인 의미는 찾아보시면 아시겠지만, (물건 따위가 덜 발달하고 불편하여) 원시적인 (참조 : 네이버 사전ㅋ) 이란 의미를 가지고 있어요. 서적에서 얘기하는 예시는 "덜 사회적인 사람(an unsophisticated person)" (음???????) 이라고 하는데... 뭔 소리인지는 잘 모르겠어요 :-D(외쿸문화란...ㅋ)
간단히 얘기하면 가장 근본이 되는 것들 입니다. 우리는 OpenGL을 이용해서 그럴싸한 뭔가를 그리려고 하는 것이잖아요? 그린다의 가장 기본은 뭘까요?
점 이겠죠? :-D
그 점이 이어진 것이 선 이겠고, 그 선들이 이어진 게 면, 그 면들이 이어지면 부피가 있는 물체가 될 것이고~ 가장 기본적인 것들을 그려주는 겁니다.
그 시작과 끝은 아래와 같은 형식으로 만들어 지게 됩니다. 저 중간에 해당하는 Primitive를 형식에 맞게끔 만들어 주면 되겠죠?
구지 저 처럼 들여쓰기를 하지 않아도 상관은 없어요 :-D 전 제가 보기 편하려구요ㅎ 그럼 위에서 주석처리된 do something에서는 정보를 전달해 주어야 겠죠. 그리는 것에 관련된 정보니까 좌표가 될 거에요. 이때는 glVertex..(..)라는 함수를 사용해서 정보를 OpenGL에 넘겨주게 됩니다.
원형은 아래와 같아요. [] 내부에 있는 것은 그것들 중 하나가 나와야 한다는 소리입니다. [v]는 포함 될 때가 있고, 아닐 때가 명확히 있기 때문에 있거나 없을 수 도 있지만, 앞의 두개[][]는 내부의 것 중 하나가 포함 되야 해요:-D
한꺼번에 적히니까 알아보기 힘드네요. 좀 풀어 볼까요?
구분이 되도록 나누었습니다. 숫자는 차원을 의미 합니다. 그 다음 나오는 것은 타입을 이야기 하는 것이죠. 마지막에 나오는 v는 배열로 인자를 넘길 때 사용하게 됩니다.
그럼 몇 가지를 보도록 할게요.
참조 : OPENGL GAME PROGRAMMING(Foreword by Mark J.Kilgard)
간단히 얘기하면 가장 근본이 되는 것들 입니다. 우리는 OpenGL을 이용해서 그럴싸한 뭔가를 그리려고 하는 것이잖아요? 그린다의 가장 기본은 뭘까요?
점 이겠죠? :-D
그 점이 이어진 것이 선 이겠고, 그 선들이 이어진 게 면, 그 면들이 이어지면 부피가 있는 물체가 될 것이고~ 가장 기본적인 것들을 그려주는 겁니다.
그 시작과 끝은 아래와 같은 형식으로 만들어 지게 됩니다. 저 중간에 해당하는 Primitive를 형식에 맞게끔 만들어 주면 되겠죠?
- 함수 원형
void glBegin(GLenum mode); void glEnd();
- mode의 인자
/* glBegin params */ GL_POINTS // Single points GL_LINES // Non-connected lines GL_LINE_STRIP // Series of connected lines GL_LINE_LOOP // Closed loop of connected lines GL_TRIANGLES // Single triangles GL_TRIANGLE_STRIP // Series of connected triangles GL_TRIANGLE_FAN // Set of triangles containing a common central vertex GL_QUADS // Quadrilaterals GL_QUAD_STRIP // Series of connected quadrilaterals GL_POLYGON // Polygon with an arbitrary number of vertices
- 사용법
glBegin(mode); // do something glEnd();
구지 저 처럼 들여쓰기를 하지 않아도 상관은 없어요 :-D 전 제가 보기 편하려구요ㅎ 그럼 위에서 주석처리된 do something에서는 정보를 전달해 주어야 겠죠. 그리는 것에 관련된 정보니까 좌표가 될 거에요. 이때는 glVertex..(..)라는 함수를 사용해서 정보를 OpenGL에 넘겨주게 됩니다.
원형은 아래와 같아요. [] 내부에 있는 것은 그것들 중 하나가 나와야 한다는 소리입니다. [v]는 포함 될 때가 있고, 아닐 때가 명확히 있기 때문에 있거나 없을 수 도 있지만, 앞의 두개[][]는 내부의 것 중 하나가 포함 되야 해요:-D
void glVertex[2, 3, 4][d, f, i, s][v](..);
한꺼번에 적히니까 알아보기 힘드네요. 좀 풀어 볼까요?
void glVertex[2, 3, 4][d, f, i, s][v](..); void glVertex2d(GLdouble x, GLdouble y); void glVertex2f(GLfloat x, GLfloat y); void glVertex2i(GLint x, GLint y); void glVertex2s(GLshort x, GLshort y); void glVertex3d(GLdouble x, GLdouble y, GLdouble z); void glVertex3f(GLfloat x, GLfloat y, GLfloat z); void glVertex3i(GLint x, GLint y, GLint z); void glVertex3s(GLshort x, GLshort y, GLshort z); void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); void glVertex4f(GLfloat x, GLfloat y, GLfalot z, GLfloat w); void glVertex4i(GLint x, GLint y, GLint z, GLint w); void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w); void glVertex2sv(const GLshort *v); void glVertex2fv(const GLfloat *v); void glVertex2iv(const GLint *v); void glVertex2sv(const GLshort *v); void glVertex3sv(const GLshort *v); void glVertex3fv(const GLfloat *v); void glVertex3iv(const GLint *v); void glVertex3sv(const GLshort *v); void glVertex4sv(const GLshort *v); void glVertex4fv(const GLfloat *v); void glVertex4iv(const GLint *v); void glVertex4sv(const GLshort *v);
구분이 되도록 나누었습니다. 숫자는 차원을 의미 합니다. 그 다음 나오는 것은 타입을 이야기 하는 것이죠. 마지막에 나오는 v는 배열로 인자를 넘길 때 사용하게 됩니다.
그럼 몇 가지를 보도록 할게요.
- Drawing Points in 3D(3차원상에 점 그리기)(뭐 직역이 다소 촌스럽긴 해도) 그림의 가장 기본이 되는 점을 그려보도록 하겠습니다.
glBegin(GL_POINTS); glVertex3f(0.0, 0.0, 0.0); glEnd();
(휴우...) 다 됐어요 :-D 뭐 일단 표현을 하자면,
점을 그리자! : GL_POINTS
좌표는 이거야... : (0.0, 0.0, 0.0)
점 그리기 끝 : glEnd()
여러 개의 점을 그리고 싶다면, 위의 내용을 여러 번 반복 하면 되겠죠.
glBegin(GL_POINTS); glVertex3f(0.0, 0.0, 0.0); glEnd(); glBegin(GL_POINTS); glVertex3f(0.0, 1.0, 0.0); glEnd();
위의 내용은 사실 최악의 코드 랍니다. 점의 경우에는 찍으면 되니까 한번에 표현 해주어도 되어요. 바로 아래 처럼..
glBegin(GL_POINTS); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 1.0, 0.0); glEnd();
- Drawing Lines in 3D(3차원상에 선 그리기)역시 촌스러운 직역(ㅋㅋ :-D) 선이기 때문에 최소한 "두 개" 이상의 점들의 좌표가 필요 하겠죠? 기본이 되는 코드는 아래와 같습니다.
glBegin(GL_LINES); glVertex3f(0.5, 0.5, 0.0); glVertex3f(-0.5, -0.5, 0.0); glEnd();
결과는 아래와 같이 나오네요.
참조 : OPENGL GAME PROGRAMMING(Foreword by Mark J.Kilgard)
'Programming > OpenGL' 카테고리의 다른 글
Understanding Coordiante Transformations (0) | 2012.03.13 |
---|---|
OpenGL primitives_2 (2) | 2011.12.24 |
OpenGL states (0) | 2011.12.22 |
Basic OpenGL programming Full-Screen (0) | 2011.12.12 |
Basic OpenGL programming in Windows_2 (0) | 2011.12.01 |