#include <cstdlib>
#include <cstdio>
#include <gl/glut.h>
#pragma comment( linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
GLint static colorKey = 0.0;
void myInit()
{
glClearColor( 1.0, 1.0, 1.0, 0.0 );
glColor3f( 1.0, 0.0, 1.0 );
}
void display( )
{
glClear( GL_COLOR_BUFFER_BIT );
glRectf( -0.5, -0.5, 0.5, 0.5 );
glFlush();
}
//颜色子菜单处理函数
void colorMenu( int id )
{
colorKey += 0.3;
glutGetMenu();
switch ( id )
{
case 1: //更改背景颜色
if ( colorKey < 1.0 )
{
glClearColor( colorKey, 1.0, 0.0, 0.0 );
}
else
{
colorKey = 0.0;
glClearColor( colorKey, 0.0, 0.2, 0.0 );
}
glutPostRedisplay();
break;
case 2: //更改矩形颜色
if ( colorKey < 1.0 )
{
glColor3f( colorKey, 0.0, 0.0 );
}
else
{
colorKey = 0.0;
glColor3f( colorKey, 0.0, 0.0 );
}
glutPostRedisplay();
break;
default:
printf( "\a\a" );
break;
}
}
//旋转子菜单处理函数
void spinMenu( int id )
{
glutGetMenu();
switch ( id )
{
case 1:
glRotatef( 60., 0.0, 0.0, 1.0 );
glutPostRedisplay();
break;
case 2:
glRotatef( -80, 0.0, 0.0, 1.0 );
glutPostRedisplay();
break;
default:
printf( "\a\a" );
break;
}
}
//主菜单处理函数
void mainMenu( int id )
{
glutGetMenu();
switch ( id )
{
case 1: //退出键
exit( 0 );
default:
printf( "\a\a" );
break;
}
}
GLint subMenu1, subMenu2, manMenu;
int main( int argc, char ** argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE );
glutInitWindowPosition( 200, 200 );
glutInitWindowSize( 600, 600 );
glutCreateWindow( argv[0] );
//建立颜色子菜单
subMenu1 = glutCreateMenu( colorMenu );
glutAddMenuEntry( "Background Color", 1 );
glutAddMenuEntry( "Square Color", 2 );
glutAttachMenu( GLUT_RIGHT_BUTTON );
//建立旋转子菜单
subMenu2 = glutCreateMenu( spinMenu );
glutAddMenuEntry( "CLW", 1 );
glutAddMenuEntry( "CCW", 2 );
glutAttachMenu( GLUT_RIGHT_BUTTON );
//建立主菜单
manMenu = glutCreateMenu( mainMenu );
glutAddMenuEntry( "Exit", 1 );
glutAddSubMenu( "Change Color", subMenu1 );
glutAddSubMenu( "Spin Square", subMenu2 );
glutAttachMenu( GLUT_RIGHT_BUTTON );
glutDisplayFunc( display );
myInit();
glutMainLoop();
return 1;
}
//
//#include <GL/glut.h>
//#include <stdio.h>
//int menu,subMenu1,subMenu2;
//
///*在蓝色的背景上绘制一个白色的正方形*/
//void myDraw(void)
//{
// glClearColor(0.0, 0.0, 1.0, 0.0);
// glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
// glColor3f(1.0,1.0,1.0);
// glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);
// glBegin(GL_POLYGON);
// glVertex2f(-0.5,-0.5);
// glVertex2f(-0.5,0.5);
// glVertex2f(0.5,0.5);
// glVertex2f(0.5,-0.5);
// glEnd();
// glutSwapBuffers();
//}
//
///*写出当前是哪个菜单*/
//void GetCurrentMenu(void)
//{
// int nMenu;
// nMenu = glutGetMenu();
// if(nMenu == menu)
// printf("The current menu is Main Menu.\n");
// if(nMenu == subMenu1)
// printf("The current menu is SubMenu1.\n");
// if(nMenu == subMenu2)
// printf("The current menu is SubMenu2.\n");
//}
//
///*子菜单1*/
//void SubMenuFunc1(int data)
//{
// GetCurrentMenu();
// switch(data)
// {
// case 1:
// printf("SubMenu1's item 1 is triggered.\n");
// break;
// case 2:
// printf("SubMenu1's item 2 is triggered.\n");
// break;
// case 3:
// printf("SubMenu1's item 3 is triggered.\n");
// break;
// }
//}
//
///*子菜单2*/
//void SubMenuFunc2(int data)
//{
// GetCurrentMenu();
// switch(data)
// {
// case 1:
// printf("SubMenu2's item 1 is triggered.\n");
// break;
// case 2:
// printf("SubMenu2's item 2 is triggered.\n");
// break;
// case 3:
// printf("SubMenu2's item 3 is triggered.\n");
// break;
// }
//}
//
///*主菜单*/
//void MenuFunc(int data)
//{
// GetCurrentMenu();
// switch(data)
// {
// case 1:
// printf("MainMenu's item 1 is triggered.\n");
// break;
// case 2:
// printf("MainMenu's item 2 is triggered.\n");
// break;
// case 3:
// printf("MainMenu's item 3 is triggered.\n");
// break;
// }
//}
//
//int main(int argc,char ** argv)
//{
// glutInit(&argc,argv);
// glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
// glutInitWindowSize(500,400);
// glutInitWindowPosition(100,100);
//
// /*创建窗口*/
// glutCreateWindow(" MENU");
//
// glutDisplayFunc(myDraw);
//
// /*创建子菜单1并加入菜单条目*/
// subMenu1 = glutCreateMenu(SubMenuFunc1);
// glutAddMenuEntry("SubMenu1's item1",1);
// glutAddMenuEntry("SubMenu1's item2",2);
// glutAddMenuEntry("SubMenu1's item3",3);
// glutAttachMenu(GLUT_RIGHT_BUTTON);
//
// /*创建子菜单2并加入菜单条目*/
// subMenu2 = glutCreateMenu(SubMenuFunc2);
// glutAddMenuEntry("SubMenu2's item1",1);
// glutAddMenuEntry("SubMenu2's item2",2);
// glutAddMenuEntry("SubMenu2's item3",3);
// glutAttachMenu(GLUT_RIGHT_BUTTON);
//
// /*创建主菜单并加入菜单条目及子菜单*/
// menu = glutCreateMenu(MenuFunc);
// glutAddMenuEntry("Item1",1);
// glutAddMenuEntry("Item2",2);
// glutAddMenuEntry("Item3",3);
// glutAddSubMenu("SubMenu 1",subMenu1);
// glutAddSubMenu("SubMenu 2",subMenu2);
// glutAttachMenu(GLUT_RIGHT_BUTTON);
// glutMainLoop();//进入GLUT事件处理循环
//
// return 0;
//}