메인 메뉴
서브 메뉴
작은 원구와 환원체
큰 원구와 원환체

메뉴 콜백을 이용해보았다. 프로그램을 실행시켰을 때 바로 나오는 기본 화면은 작은 원구의 모습이다.

오른쪽 마우스를 클릭하면 메인 메뉴가 나오는데, 여기서 오브젝트의 모양과 크기를 변경할 수 있다. 변경하고 싶은 사항이 있으면 메뉴의 항목에 마우스를 두면 세부사항에 대한 서브 메뉴가 나타난다.

 

#include <GL/glut.h>
#include  <iostream>

GLboolean IsSphere = true;
GLboolean IsSmall = true;

void MyDisplay() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
if ((IsSphere) && (IsSmall))
glutWireSphere(0.2, 15, 15); // 작은 원구
else if ((IsSphere) && (!IsSmall))
glutWireSphere(0.4, 15, 15); // 큰 원구
else if ((!IsSphere) && (IsSmall))
glutWireTorus(0.1, 0.3, 40, 20); // 작은 원환체
else glutWireTorus(0.2, 0.5, 40, 20); // 큰 원환체
glFlush();
}

void MyMainMenu (int entryID) {
if (entryID == 1)
exit(0);
glutPostRedisplay(); // 프로그램 종료
}

void MySubMenu_shape (int entryID) {
if (entryID == 1)
IsSphere = true; // 원구 그리기
else if (entryID == 2)
IsSphere = false; // 원환체 그리기
glutPostRedisplay();
}

void MySubMenu_size (int entryID) {
if (entryID == 1)
IsSmall = true; // 작은 크기로 그리기
else if (entryID == 2)
IsSmall = false; // 큰 크기로 그리기
glutPostRedisplay();
}

int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(300, 300);
glutInitWindowPosition(0, 0);
glutCreateWindow("Menu Callback");

glClearColor(0.0, 0.0, 0.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

//Change Shape 서브 메뉴의 콜백 함수 등록
GLint MySubMenuID_shape = glutCreateMenu(MySubMenu_shape);
glutAddMenuEntry("Draw Sphere", 1);
glutAddMenuEntry("Draw Torus", 2);

//Change Size 서브 메뉴의 콜백 함수 등록
GLint MySubMenuID_size = glutCreateMenu(MySubMenu_size);
glutAddMenuEntry("Small One", 1);
glutAddMenuEntry("Big One", 2);

GLint MyMainMenuID = glutCreateMenu(MyMainMenu);
glutAddSubMenu("Change Shape", MySubMenuID_shape);
glutAddSubMenu("Change Size", MySubMenuID_size);
glutAddMenuEntry("Exit", 1);

glutAttachMenu(GLUT_RIGHT_BUTTON);
glutDisplayFunc(MyDisplay);
glutMainLoop();

return 0;
}

'OpenGL' 카테고리의 다른 글

[OpenGL] 5. 선형보간  (0) 2019.07.19
[OpenGL] 미니 프로젝트  (0) 2019.07.17
[OpenGL] 3. 키보드 콜백  (0) 2019.07.10
[OpenGL] 2. 마우스 콜백  (0) 2019.07.05
[OpenGL] 1. 삼각형 그리기  (0) 2019.07.05

+ Recent posts