Files Classes Functions Hierarchy
00001 #include <GL/gl.h> 00002 #include <GL/glut.h> 00003 00004 #include <commandline.h> 00005 #include <cubegui.h> 00006 #include <gobj.h> 00007 #include <graphmisc.h> 00008 #include <menusystem.h> 00009 #include <zpr.h> 00010 00011 00012 00013 cubegui * cubegui::member = 0; 00014 00015 cubegui::cubegui() 00016 : menuhelp(true), display2D(true), display3D(true), cb(), 00017 cb2d(cb,1.0), cb3d(cb,1.0), cbperm(cb) 00018 { 00019 } 00020 00021 void cubegui::keyboard01(unsigned char k, int x, int y) 00022 { 00023 assert(member!=0); 00024 00025 switch (k) 00026 { 00027 case 27: exit(0); break; 00028 case 'S': member->cbperm.save(); break; 00029 case 'h': member->menuhelp = ! member->menuhelp; break; 00030 case '2': member->display2D = ! member->display2D; break; 00031 case '3': member->display3D = ! member->display3D; break; 00032 00033 case '0': member->cb.reset(); break; 00034 00035 case 'p': 00036 cout << member->cb << endl; 00037 break; 00038 00039 // Move Cursor 00040 case 'a': member->cb.cs.left(); break; 00041 case 's': member->cb.cs.right(); break; 00042 case 'w': member->cb.cs.up(); break; 00043 case 'z': member->cb.cs.down(); break; 00044 00045 // Rotate 00046 case 'd': member->cb.left(); break; 00047 case 'f': member->cb.right(); break; 00048 case 'r': member->cb.up(); break; 00049 case 'c': member->cb.down(); break; 00050 00051 // Rotate face 00052 case 'j': member->cb.faceleft(); break; 00053 case 'k': member->cb.faceright(); break; 00054 case 'i': member->cb.faceup(); break; 00055 case 'm': member->cb.facedown(); break; 00056 00057 default: 00058 return; 00059 } 00060 00061 glutPostRedisplay(); 00062 } 00063 00064 /* 00065 void setOrthographicProjection() 00066 { 00067 glMatrixMode(GL_PROJECTION); 00068 glPushMatrix(); 00069 glLoadIdentity(); 00070 00071 gluOrtho2D(-0.5, 639.5, 479.5, -1.0); 00072 00073 glMatrixMode(GL_MODELVIEW); 00074 glPushMatrix(); 00075 glLoadIdentity(); 00076 } 00077 00078 void resetPerspectiveProjection() 00079 { 00080 glPopMatrix(); 00081 00082 glMatrixMode(GL_PROJECTION); 00083 glPopMatrix(); 00084 glMatrixMode(GL_MODELVIEW); 00085 } 00086 */ 00087 00088 00089 00090 00091 void cubegui::display01() 00092 { 00093 assert(member!=0); 00094 00095 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 00096 00097 // if (member->display3D) 00098 // member->cb3d.draw(); 00099 00100 /* 00101 00102 setOrthographicProjection(); 00103 00104 glRasterPos2i(300,20); 00105 printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help"); 00106 00107 resetPerspectiveProjection(); 00108 */ 00109 00110 // glPushMatrix(); 00111 // glLoadIdentity(); 00112 00113 // if (member->display2D) 00114 // member->cb2d.draw(); 00115 00116 // glPopMatrix(); 00117 00118 assert(gobj::global!=0); 00119 00120 gobj::global->draw(); 00121 00122 glerrordisplay(); 00123 00124 glutSwapBuffers(); 00125 } 00126 00127 00128 void cubegui::prog01(int argc, char** argv) 00129 { 00130 commandline cmd(argc,argv); 00131 00132 int width=600; 00133 int height=800; 00134 00135 cmd.mapvar(width,"width"); 00136 cmd.mapvar(height,"height"); 00137 00138 glutInit(&argc,argv); 00139 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 00140 glutInitWindowSize(width,height); 00141 glutCreateWindow(""); 00142 glutDisplayFunc(display01); 00143 glutKeyboardFunc(keyboard01); 00144 00145 zpr zz; 00146 00147 OpenGLinitialisation(); 00148 00149 glEnable(GL_DEPTH_TEST); 00150 00151 glEnable(GL_CULL_FACE); 00152 glEnable(GL_NORMALIZE); 00153 00154 00155 glMatrixMode(GL_MODELVIEW); 00156 glLoadIdentity(); 00157 gluLookAt 00158 ( 00159 3.0,0.0,6.0, // Eye 00160 3.0,0.0,0.0, // Center 00161 0.0,1.0,0.0 // Up 00162 ); 00163 00164 member = this; 00165 00166 xGraphics.set(); 00167 00168 menusystem * menu = 00169 new menusystem(0,0,true,point2<GLint>(60,30),10); 00170 menu->fontcolor = point4<float>(218.0/255.0,165.0/255.0,32.0/255.0,0.75); 00171 00172 gobjpush( new gobjSwitch<bool &>(menu,menuhelp) ); 00173 00174 gobjpush( new gobjSwitch<bool &>(&cb3d,display3D,false) ); 00175 gobjpush( new gobjSwitch<bool &>(&cb2d,display2D,false) ); 00176 00177 menu->addfont12("Cube",2); 00178 00179 menu->addfont10("Cursor",1); 00180 menu->addfont10("a left",1); 00181 menu->addfont10("s right",1); 00182 menu->addfont10("w up",1); 00183 menu->addfont10("z down",2); 00184 00185 menu->addfont10("Move",1); 00186 menu->addfont10("d left",1); 00187 menu->addfont10("f right",1); 00188 menu->addfont10("r up",1); 00189 menu->addfont10("c down",2); 00190 00191 menu->addfont10("Face",1); 00192 menu->addfont10("j left",1); 00193 menu->addfont10("k right",1); 00194 menu->addfont10("i up",1); 00195 menu->addfont10("m down",2); 00196 00197 menu->addfont10("0 Reset",1); 00198 menu->addfont10("2 Toggle 2D display",1); 00199 menu->addfont10("3 Toggle 3D display",1); 00200 menu->addfont10("S Save",2); 00201 00202 menu->addfont10("h toggle this help menu",1); 00203 menu->addfont10("ESC quit"); 00204 00205 zz.update(); 00206 00207 // Never return. 00208 glutMainLoop(); 00209 } 00210 00211
1.5.8