Graphics/OpenGL

OpenGL 기초 - GLUT : 팝업메뉴

MOLOKINI 2014. 5. 27. 14:57
팝업메뉴는 기능의 목록을 문자열 형태로 나타낼 수 있으니, 사용법을 외우지 않아도 쉽게 이해할 수 있다는 장점이 있다.
 
이미 예제를 통해 만들어본 적이 있다.
 
int glutCreateMenu(void (*func)(int value));
인수로 메뉴항목을 호출했을 때 호출될 콜백함수를 지정한다.
콜백함수는 선택될 메뉴 항목의 ID를 인수로 전달받는다.
 
void glutSetMenu(int menu);
int glutGetMenu(void);
새로 생성된 메뉴는 자동으로 현재 메뉴가 되므로 굳이 glutSetMenu를 호출하지 않아도 상관없다. 둘 이상의 메뉴를 생성해놓고 번갈아가면서 사용하고 싶다면 glutSetMenu가 필요하다.
 
void glutDestroyMenu(int menu);
메뉴를 삭제한다.
 
void glutAddMenuEntry(char *name, int value);
void glutAddSubMenu(char *name, int value);
메뉴항목 추가와 서브메뉴 항목을 추가한다.
 
void glutAttachMenu(int button);
void glutDetachMenu(int button);
메뉴를 마우스 버튼에 부착하거나 뗀다, 어떤 버튼을 누르냐에 따라 메뉴가 호출되는지를 정한다. 대체로 오른쪽 클릭이다. (GLUT_RIGHT_BUTTON)
 
void glutChangeToMenuEntry(int entry, char *name, int value);
메뉴항목의 값을 실행중에 변경한다.
순서값으로 변경대상을 지정하고, 새로운 캡션, ID를 지정한다. 순서값은 위쪽부터 1이다.
ID는 잘 안바꾸고, 캡션을 바꾸는 경우가 종종있다.
 
#include <gl/glut.h>
 
void DoDisplay();
void DoMenu(int value);
 
int main()
{
     glutCreateWindow("OpenGL");
 
     // 서브 메뉴 미리 준비
     GLint SubMenu = glutCreateMenu(DoMenu);
     glutAddMenuEntry("Red",4);
     glutAddMenuEntry("Green",5);
     glutAddMenuEntry("Blue",6);
 
     // 메인 메뉴 생성
     glutCreateMenu(DoMenu);
     glutAddMenuEntry("White",1);
     glutAddMenuEntry("Black",2);
     glutAddMenuEntry("Gray",3);
 
     // 서브 메뉴를 메인 메뉴에 붙인다.
     glutAddSubMenu("Triangle Color",SubMenu);
     glutAttachMenu(GLUT_RIGHT_BUTTON);
 
     glutDisplayFunc(DoDisplay);
     glColor3f(1.0, 0.0, 0.0);
     glutMainLoop();
     return 0;
}
 
void DoMenu(int value)  // 순서대로 1,2,3 메인팝업, 4,5,6 서브팝업
{
     switch(value) {
     case 1:
          glClearColor(1.0, 1.0, 1.0, 1.0);
          break;
     case 2:
          glClearColor(0.0, 0.0, 0.0, 1.0);
          break;
     case 3:
          glClearColor(0.5, 0.5, 0.5, 1.0);
          break;
     case 4:
          glColor3f(1.0, 0.0, 0.0);
          break;
     case 5:
          glColor3f(0.0, 1.0, 0.0);
          break;
     case 6:
          glColor3f(0.0, 0.0, 1.0);
          break;
     }
     glutPostRedisplay();
}
 
void DoDisplay()
{
     glClear(GL_COLOR_BUFFER_BIT);
 
     glBegin(GL_TRIANGLES);
     glVertex2f(0.0, 0.5);
     glVertex2f(-0.5, -0.5);
     glVertex2f(0.5, -0.5);
     glEnd();
     glFlush();
}

 

 

  

메인팝업메뉴와 서브팝업메뉴의 작동방법을 잘 봐두면 되겠다.
이상!

'Graphics > OpenGL' 카테고리의 다른 글

OpenGL 기초 - GLUT : Win32 예제  (0) 2014.05.27
OpenGL 기초 - GLUT : 애니메이션  (0) 2014.05.27
OpenGL 기초 - GLUT : 입력처리  (0) 2014.05.27
OpenGL 기초 - GLUT  (0) 2014.05.19
OpenGL 기초 - 안티앨리어싱  (0) 2014.05.17