Windows/OpenGL

07. OpenGL Programming - GL_POLYGON의 특성

Ohjeonghak 2014. 10. 12. 16:37
반응형

GL_POLYGON의 특성

 

도형을 그릴 때 면이 생성되기 위한 조건은 수평에 위치하지 않은 3개의 포인트를 모두 이으면 된다.

GL_POLYGON의 특성도 역시 같다. 좌표 포인트가 3개가 될 때마다 면이 이루어질 상황을 고려하여 그려야 한다.

 

예를 들어 별을 그려보도록 하자

 

위의 좌표 정보를 보고 별을 그려보자.

아마 바로 쉽게는 별 모양이 그려지지 않을 것이다.

GL_POLYGON의 특성을 이해했다면 별을 그릴 때 점의 시작 위치와 점선을 이어 그리는 방향과 순서를 함부로 막 정해놓을 수 없다는 것을 알게 될 것이다.

별을 올바르게 그리기 위해서는 안쪽의 좌표를 시작점으로 하여 그려나가야 한다.

 

즉, 그리는 좌표의 시작 점과 추가되는 두번째 점, 세 번째 점으로 추가되는 점을 직선으로 이어 삼각형이 되면 면의 조건을 만족하여 그리는 것이다. 만약 한번 면을 이뤄 그리고 나서 한 점을 더 추가하게 되면 시작점과 마지막 점 그리고 추가된 한 점을 직선으로 이어 면이 되는 조건인 삼각형을 이루면 또 추가적으로 그려 나가게 되는 것이다. 결국 이렇게 면들이 합쳐져서 별 모양이 되는 것이다.

 

예를 들어 좌표 정보 셋팅을 다음 순서로 하면 그려지는 순서는 아래 그림과 같을 것이다.

 

 

빨간색 점의 좌표를 시작 좌표로 했을 때 위의 그림 순서대로 진행을 해야 3점들의 면이 생성되어 별을 표현할 수 있게 되는 것이다.

아래의 소스에서 별들의 좌표 정보를 주석하면서 확인해보면 더 빨리 확인 해 볼 수 있을 것이다.

 

sourcode

 

#include <gl⁄glut.h> #include <gl⁄GL.h> #include <gl⁄GLU.h>  void star() { 	glClear(GL_COLOR_BUFFER_BIT);	//색상 버퍼 비우기 	glBegin(GL_POLYGON);			//다각형 그리기 		glColor3f(255.0, 255.0, 0.0);	//색상 셋팅 		// 별을 그리기 위한 좌표 정보 셋팅 			glVertex3f(0.0, -0.5, 0.0); 			glVertex3f(0.5, -0.8, 0.0); 			glVertex3f(0.3, -0.3, 0.0); 			glVertex3f(0.8, 0.1, 0.0); 			glVertex3f(0.2, 0.1, 0.0); 			glVertex3f(0.0, 0.8, 0.0); 			glVertex3f(-0.2, 0.1, 0.0); 			glVertex3f(-0.8, 0.1, 0.0); 			glVertex3f(-0.3, -0.3, 0.0); 			glVertex3f(-0.5, -0.8, 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("Star");	// 후명; 이름을 생성할때 Title을 정해 줬기때문에 생략함 	glutDisplayFunc(star);	//디스플레이 이벤트에 대한 콜백 함수로 등록 	glutMainLoop();  //main() 무한루프  	return 0; }  

 

 

result

 

 

 

반응형