반응형
GLUT의 기능
- 윈도우 초기화
void glutInit( int *argc, char **argv ); | 윈도우와 운영체제와 세션(통신을 하기 위한 연결점) 연결 |
void glutInitWindowPosition( int x, int y ); | 윈도우의 위치 설정 (GLUT의 화면 좌표계는 윈도우 운영체제의 좌표계와 일치하지만 OpenGL의 화면 좌표계와는 다르다) |
void glutInitWindowSize( int width, int height ); | 윈도우의 크기 설정 |
void glutInitDisplayMode( unsigned int mode ); | 디스플레이 모드 설정 mode의 종류 GLUT_RGB, GLUT_RGBA, GLUT_INDEX, GLUT_SINGLE, GLUT_DOUBLE, GLUT_ACCUM, GLUT_ALPHA, GLUT_DEPTH |
- 윈도우 관리
void glutSetWindowTitle(char *name); | 윈도우 타이틀 설정 |
void glutCreateWindow(char *name); | 새로운 윈도우 생성 |
void glutReshapeWindow(int width, int height); | 렌더링 크기 변경에 따른 윈도우 크기 재설정 |
void glutPostRedisplay(void); | 현재의 윈도우를 새로고침 하도록 요구하는 것 |
void glutSwapBuffers(void); | 프런트 버퍼와 백 버퍼를 swapping 하기 위한 것 즉, 더블 버퍼링에서는 프런트 버퍼 내용이 화면에 뿌려지는 동안 새로운 내용이 백 버퍼에 쓰여지고, 백 버퍼에 기록이 다되면 프런트 버퍼와 백 버퍼가 바뀐다. 싱글 버퍼에서는 버퍼의 내용을 화면에 뿌리고 새로운 내용이 버퍼에 쓰여진다. glutSwapBuffers()함수가 실행되면 묵시적으로 glFlush() 가 호출된다. |
void glutDisplayFunc( void(*)(void) ); | 렌더 콜백 함수이며, CallBack 함수로 등록하여 OpenGL에서 렌더링을 필요로 할 때 접근하는 함수이다. |
void glFlush(void); | gl 명령이 완전히 실행되기까지 기다린 후 쌓여있는 명령들을 모두 비우고, 즉시 실행이 되도록 한다. |
void glFinish(void); | gl 명령이 완전히 실행되기 전에 쌓여있는 명령들을 모두 비우고, 즉시 실행이 되도록 한다. |
- 초기화
void glClear(GLbitfield mask); | 버퍼들을 미리 설정된 값으로 지운다. mask 의 종류 GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_ACCUM_BUFFER_BIT, GL_STENCIL_BUFFER_BIT |
=> 윈도우 비트 평면 영역을 glClearColor(), glClearDepth(), glClearAccum(), glClearStencil() 함수에 의해 설정된 값으로 변경.
- 도형 그리기
void glBegin( GLenum mode ); | glBegin() 과 glEnd() 는 그리고자 하는 형태를 지정해주는 기능이고, glBegin() 과 glEnd() 사이에 또다시 glBegin() 과 glEnd()이 사용될 수 없다. 그리고 이 블럭 안에서 사용될 수 있는 함수는 다음과 같이 한정적이다. |
void glEnd(void); |
glBegin의 사용 가능한 파라미터
mode | 설 명 |
GL_POINTS | 개별적인 점들을 표현 |
GL_LINES | 연결되지 않는 선분들을 표현 |
GL_LINE_STRIP | 연결된 일련의 선분들을 표현 |
GL_LINE_LOOP | 연결된 선분들을 처음과 끝이 연결되서 하나의 닫힌 선문들로 표현 |
GL_TRIANGLES | 개별적인 삼각형들을 표현 |
GL_TRIANGLE_STRIP | 연결된 일련의 삼각형들을 표현 |
GL_TRIANGLE_FAN | 하나의 꼭지점을 공유하는 일련의 삼각형들을 표현 |
GL_QUADS | 개별적인 사각형들을 표현 |
GL_QUAD_STRIP | 연결된 일련의 사각형들을 표현 |
GL_POLYGON | 임의의 개수의 꼭지점들을 가진 다각형을 표현 |
간단한 예제 - 왕관 모양을 출력하기
먼저 그릴 모양을 생각하고 왕관 모양의 좌표 정보를 준비한다.
sourcode
#include <gl⁄glut.h> #include <gl⁄GL.h> #include <gl⁄GLU.h> void crown() { glClear(GL_COLOR_BUFFER_BIT); //색상 버퍼 비우기 glBegin(GL_POLYGON); //다각형 그리기 glColor3f(255.0, 255.0, 0.0); //색상 셋팅 glVertex3f(-0.5, -0.5, 0.0); glVertex3f(0.5, -0.5, 0.0); glVertex3f(0.7, 0.5, 0.0); glVertex3f(0.3, 0.3, 0.0); glVertex3f(0.0, 0.7, 0.0); glVertex3f(-0.3, 0.3, 0.0); glVertex3f(-0.7, 0.5, 0.0); glEnd(); glFlush(); //싱글버퍼에서 버퍼의 내용을 화면에 뿌리고 새로운 내용이 버퍼에 쓰여진다. } int main(int argc, char **argv) { glutInit(&argc, argv); // 생략하면 절대로 도스상에서는 실행이 안됨. // 윈도우상에서는 생략 가능. glutInitWindowPosition(100, 100); //실행되는 시작 위치 //glutInitWindowSize(500, 600); //생성되는 윈도우 크기 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //RBG 색상 모드와 버퍼 1개를 사용 glutCreateWindow("OpenGL Drawing Exaple"); //태명; 설정한 이름으로 윈도우를 생성함 //glutSetWindowTitle("Crown"); // 후명; 이름을 생성할때 Title을 정해 줬기때문에 생략함 glutDisplayFunc(crown); //디스플레이 이벤트에 대한 콜백 함수로 등록 glutMainLoop(); //main() 무한루프 return 0; }
result
반응형
'Windows > OpenGL' 카테고리의 다른 글
08. OpenGL Programming - 명령어 (0) | 2016.03.14 |
---|---|
07. OpenGL Programming - GL_POLYGON의 특성 (0) | 2014.10.12 |
05. OpenGL Programming - 함수 구조와 데이터 타입 (0) | 2014.10.12 |
04. OpenGL 설치 및 테스트 (2) | 2014.10.11 |
03. OpenGL 학습을 위한 기본 지식 - 그래픽 API와 OpenGL (0) | 2014.10.11 |