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
'Windows > OpenGL' 카테고리의 다른 글
08. OpenGL Programming - 명령어 (0) | 2016.03.14 |
---|---|
06. OpenGL Programming - GLUT의 기능 (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 |