메뉴 콜백을 이용해보았다. 프로그램을 실행시켰을 때 바로 나오는 기본 화면은 작은 원구의 모습이다.
오른쪽 마우스를 클릭하면 메인 메뉴가 나오는데, 여기서 오브젝트의 모양과 크기를 변경할 수 있다. 변경하고 싶은 사항이 있으면 메뉴의 항목에 마우스를 두면 세부사항에 대한 서브 메뉴가 나타난다.
#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 |