Windows/OpenGL

06. OpenGL Programming - GLUT의 기능

Ohjeonghak 2014. 10. 12. 14:22
반응형

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

 

 

 

 

 

 

 

 

 

 

반응형