//===========================================================================================// // glutmechV20.c (version 0.2.0.) // -------------- // begin : Mon. 12. November 10.15:00 GMT 2007 // copyright: (C) 2002/2007 by s.morf // email : stevenmorf@bluewin.ch // compile : // only opengl in c // compile as: cc glutmechV20.c -o glutMechV20 -I/usr/X11R6/include -L/usr/X11R6/lib -lglut -lGLU -lGL -lm // // only opengl in C++ // compile as: c++ glutmechV20.cpp -o glutmechV20 -I/usr/X11R6/include -L/usr/X11R6/lib -lglut -lGLU -lGL -lm // // run : ./glutMechV20 // // //**************************************************************************************************/ // THIS PROGRAMM IS UNDER THE GNU-LICENCE /**************************************************************************************************** This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. /*************************************************************************************************** References: 1) glutmech V1.1 author : Simon Parkinson-Bates. E-mail : sapb@yallara.cs.rmit.edu.au Copyright Simon Parkinson-Bates. "source if freely avaliable to anyone to copy as long as they acknowledge me in their work." 2) OpenGL SuperBible 4.Edition author: R.S.Wright Addison Wesley ----------------------------------------------------------------------------------------------------- * Funtional features * ------------------ * * online menu system avaliable by pressing right mouse button * with the menu, you can control every leg. * Keys: F1 to F4 * * with other keystrokes you can turn the plattform. * * with F11 and F12 moving the Plattorn in the Z-Direction For- backwards * * Program features * ---------------- * compile & run with Linux C-compiler & opengl * changeLog: 03.11. - develop the new glutmechV10.c ***************************************************************************************************/ #define GLUT #define GLUT_KEY #define GLUT_SPEC #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* Some files do not define M_PI... */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif // Rotation amounts static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; // plattform rotations um mittelPunkt static GLfloat pTurnX = 0.0f; // ganze Plattform TurnAchse MittelPunkt static GLfloat pTurnY = 0.0f; // ganze Plattform GierNick static GLfloat pTurnGierNick = 0.0f; // ganze Plattform Nick QuerAchse static GLfloat pTurnNick = 0.0f; // ganze Plattform Gier LaengsAchse static GLfloat pTurnGier = 0.0f; // ganze Plattform Forward(X-Dir) static GLfloat pBaseX = 0.6f; static GLfloat pMoveX = 0.0f; // ganze Plattform Forward(Z-Dir) static GLfloat pBaseZ = 0.2f; static GLfloat pMoveZ = 0.0f; // Legs Turns // Leg 1 Turns static GLfloat shoulder12 = 0.0f; static GLfloat knee13 = 0.0f; // Legs 2 Turns static GLfloat shoulder22 = 0.0f; static GLfloat knee23 = 0.0f; // Legs 3 Turns static GLfloat shoulder32 = 0.0f; static GLfloat knee33 = 0.0f; // Legs 4 Turns static GLfloat shoulder42 = 0.0f; static GLfloat knee43 = 0.0f; // Legs as Lines & spheres // FROM calcXY_cos_sin.txt // leg 1 V1 red GLfloat L_12urPosX = -0.6f; GLfloat L_12urPosY = 0.2f; GLfloat L_12urPosZ = 0.2f; // Legs as Lines & spheres // FROM calcXY_cos_sin.txt // leg 2 V2 magenta // coordinates: -0.6f,0.2f,-0.2f); GLfloat L_22urPosX = -0.6f; GLfloat L_22urPosY = 0.2f; GLfloat L_22urPosZ = -0.2f; // Legs as Lines & spheres // FROM calcXY_cos_sin.txt // leg 3 V3 rightSide backwards -> green // coordinates: glVertex3f(0.6f,0.2f,0.2f); // V3 = right background corner GLfloat L_32urPosX = 0.6f; GLfloat L_32urPosY = 0.2f; GLfloat L_32urPosZ = 0.2f; // Legs as Lines & spheres // FROM calcXY_cos_sin.txt // leg 4 V4 leftSide backwards - hellblau // coordinates: glVertex3f(-0.6f,0.2f,-0.2f); // V4 = left background corner GLfloat L_42urPosX = 0.6f; GLfloat L_42urPosY = 0.2f; GLfloat L_42urPosZ = -0.2f; // New Stuff for all Legs gemeinsame Laenge GLfloat legTeil_1 = 0.6f; // radius GLfloat legTeil_2 = 0.8f; GLfloat L_12endPosX; GLfloat L_12endPosY; GLfloat L_12endPosZ; GLfloat AlphaL_12; // - gem.mathebook GLfloat radian = 0.017453; GLfloat radAlphaL_12; // leg 2 V1 red GLfloat L_13PosX; GLfloat L_13PosY; GLfloat L_13PosZ; GLfloat L_13endPosX; GLfloat L_13endPosY; GLfloat L_13endPosZ; GLfloat AlphaL_13; GLfloat radAlphaL_13; // Leg 2 GLfloat L_22endPosX; GLfloat L_22endPosY; GLfloat L_22endPosZ; GLfloat AlphaL_22; GLfloat radAlphaL_22; // leg 2 V21 magenta GLfloat L_23PosX; GLfloat L_23PosY; GLfloat L_23PosZ; GLfloat L_23endPosX; GLfloat L_23endPosY; GLfloat L_23endPosZ; GLfloat AlphaL_23; GLfloat radAlphaL_23; // LEG 3 V3 GLfloat L_32endPosX; GLfloat L_32endPosY; GLfloat L_32endPosZ; GLfloat AlphaL_32; GLfloat radAlphaL_32; // leg 3 V31 green GLfloat L_33PosX; GLfloat L_33PosY; GLfloat L_33PosZ; GLfloat L_33endPosX; GLfloat L_33endPosY; GLfloat L_33endPosZ; GLfloat AlphaL_33; GLfloat radAlphaL_33; // LEG 4 V4 GLfloat L_42endPosX; GLfloat L_42endPosY; GLfloat L_42endPosZ; GLfloat AlphaL_42; GLfloat radAlphaL_42; // leg 4 V41 cyan (helles blau) GLfloat L_43PosX; GLfloat L_43PosY; GLfloat L_43PosZ; GLfloat L_43endPosX; GLfloat L_43endPosY; GLfloat L_43endPosZ; GLfloat AlphaL_43; GLfloat radAlphaL_43; // new stuff for GLUT_Menue and GLUT_MenueProcessing GLboolean boolLeg1 = 0; // No. 0 red GLboolean boolLeg2 = 0; // No. 1 magenta GLboolean boolLeg3 = 0; // No. 2 green GLboolean boolLeg4 = 0; // No. 3 cyan GLboolean boolLeg12 = 0; // No. 4 GLboolean boolLeg34 = 0; // No. 5 GLboolean boolAllLegs = 0; // No. 6 // for Animations: GLboolean boolLiftUp = 0; // No.7 GLboolean boolLieDown = 0; // No.8 GLboolean boolWalking = 0; ////////////////////////////////////////////////////////////////////////////////////////////// // Change viewing volume and viewport. Called when window is resized void ChangeSize(int w, int h) { GLfloat fAspect; // Prevent a divide by zero if(h == 0) h = 1; // Set Viewport to window dimensions glViewport(0, 0, w, h); fAspect = (GLfloat)w/(GLfloat)h; // Reset coordinate system glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Produce the perspective projection // gluPerspective(60.0f, fAspect, 1.0, 400.0); gluPerspective(35.0f, fAspect, 1.0, 50.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f,-0.4f,0.0f); } /////////////////////////////////////////////////////////////////////////////////////////////// // This function does any needed initialization on the rendering // context. Here it sets up and initializes the lighting for // the scene. void SetupRC() { // Light values and coordinates GLfloat whiteLight[] = { 0.45f, 0.45f, 0.45f, 1.0f }; GLfloat sourceLight[] = { 0.25f, 0.25f, 0.25f, 1.0f }; GLfloat lightPos[] = { -50.f, 25.0f, 250.0f, 0.0f }; glEnable(GL_DEPTH_TEST); // Hidden surface removal glFrontFace(GL_CCW); // Counter clock-wise polygons face out glEnable(GL_CULL_FACE); // Do not calculate inside of jet // Enable lighting glDisable(GL_LIGHTING); // KEIN LICHTUNTERSCHIED VERDUNKELT SICH NICH // glEnable(GL_LIGHTING); // verdunkelt die Scene // Setup and enable light 0 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,whiteLight); glLightfv(GL_LIGHT0,GL_AMBIENT,sourceLight); glLightfv(GL_LIGHT0,GL_DIFFUSE,sourceLight); glLightfv(GL_LIGHT0,GL_POSITION,lightPos); glEnable(GL_LIGHT0); // Enable color tracking glEnable(GL_COLOR_MATERIAL); // Set Material properties to follow glColor values glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); // White background glClearColor(1.0f,1.0f,1.0f,1.0f); // white --> black (0.0f, 0.0f, 0.0f, 1.0f ); } ///////////////////////////////////////////////////////////////////////////////////////////7 // new DrawGround form motionBlur.cpp chapter 6 // Draw the ground as a series of triangle strips. The // shading model and colors are set such that we end up // with a black and white checkerboard pattern. void DrawGround(void) { GLfloat fExtent = 20.0f; GLfloat fStep = 0.5f; GLfloat y = 0.0f; GLfloat fColor; GLfloat iStrip, iRun; GLint iBounce = 0; glShadeModel(GL_FLAT); for(iStrip = -fExtent; iStrip <= fExtent; iStrip += fStep) { glBegin(GL_TRIANGLE_STRIP); for(iRun = fExtent; iRun >= -fExtent; iRun -= fStep) { if((iBounce %2) == 0) fColor = 1.0f; else fColor = 0.0f; glColor4f(fColor, fColor, fColor, 0.5f); glVertex3f(iStrip, y, iRun); glVertex3f(iStrip + fStep, y, iRun); iBounce++; } glEnd(); } glShadeModel(GL_SMOOTH); } //////////////////////////////////////////////////////////////////////////////////////////////// void DrawPlattformLegs() { // positiionierung platform with - glTranslatef(-0.60f, 0.2f, -4.5f); // pBaseX == 0.60f ursprung // then Movements into X-Direction with F11/F12 pMoveX == 0.1f; // glTranslatef(pBaseX,0.2f,-4.5f); glTranslatef(pBaseX,0.2f,-4.5f); glTranslatef(0.60f,0.2f,pBaseZ); // with pTurnY = Turn um Achse MittelPunkt glRotatef(pTurnY, 0.0f, 1.0f, 0.0f); // with pTurnGierNick // special Turns over Gier and Nick glRotatef(pTurnGierNick,1.0f,1.0f,1.0f); // with pTurnNick -> GLUT_KEY_PAGE_UP/DOWN glRotatef(pTurnNick,0.0f,0.0f,1.0f); // with pTurnGier -> GLUT_KEY_HOME / GLUT_KEY_END glRotatef(pTurnGier,1.0f,0.0f,0.0f); glColor3f(0.75f, 0.75f, 0.75f); // light grey // here plattform front glBegin(GL_QUADS); glVertex3f(-0.6f,0.2f,0.2f); // V1 = left foreground corner glVertex3f(0.6f,0.2f,0.2f); // V2 = right foreground corner glVertex3f(0.6f,0.2f,-0.2f); // V3 = right background corner glVertex3f(-0.6f,0.2f,-0.2f); // V4 = left background corner glEnd(); glColor3f(0.60f, 0.40f, 0.12f); // brown // here plattform back glFrontFace(GL_CW); glBegin(GL_QUADS); glVertex3f(-0.6f,0.2f,0.2f); // V1 = left foreground corner glVertex3f(0.6f,0.2f,0.2f); // V2 = right foreground corner glVertex3f(0.6f,0.2f,-0.2f); // V3 = right background corner glVertex3f(-0.6f,0.2f,-0.2f); // V4 = left background corner glEnd(); glFrontFace(GL_CCW); // shoulder1 swing V1 = right foreground corner glColor3f(1.0f, 0.0f, 0.0f); // red glPushMatrix(); glTranslatef(-0.6f,0.2f,0.2f); glutSolidSphere(0.05f, 10, 9); glPopMatrix(); // shoulder swing V2 = left foreground corner glColor3f(1.0f, 0.0f, 1.0f); // magnenta (dunkles blauRot) glPushMatrix(); glTranslatef(-0.6f,0.2f,-0.2f); glutSolidSphere(0.05f, 10, 9); glPopMatrix(); // shoulder1 swing V3 = right background corner glColor3f(0.0f, 1.0f, 0.0f); // green glPushMatrix(); glTranslatef(0.6f,0.2f,0.2f); glutSolidSphere(0.05f, 10, 9); glPopMatrix(); // shoulder1 swing V4 = left background corner glColor3f(0.0f, 1.0f, 1.0f); // cyan (helles blau) glPushMatrix(); glTranslatef(0.6f,0.2f,-0.2f); glutSolidSphere(0.05f, 10, 9); glPopMatrix(); ///////////////////////////////////////////////////////////////////////// // legs as lines // set LineSize verry thick glLineWidth(9.0f); // DrawLeg12 shoulder12 glColor3f(1.0f,0.0f,0.0f); // red glBegin(GL_LINES); // on Plattform V1 glVertex3f(L_12urPosX,L_12urPosY,L_12urPosZ); //-0.6f,0.20f,0.2f); // ursprung x1,y1,z1 // calc new EndPoint Leg1 radAlphaL_12 = shoulder12 * radian; // Calc new endPos after change Up/Down old: L_12Len L_12endPosX = legTeil_1 * cos(radAlphaL_12) + L_12urPosX; L_12endPosY = legTeil_1 * sin(radAlphaL_12) + L_12urPosY; // new EndPoint Leg1 glVertex3f(L_12endPosX,L_12endPosY,0.2f); // DrawLeg13 knee glVertex3f(L_12endPosX,L_12endPosY,0.22f); // ursprung endPosLeg1x1,y1,z1 // calc new EndPoint Leg1 radAlphaL_13 = knee13 * radian; // Calc new endPos after change Up/Down old L_13Len L_13endPosX = legTeil_2 * cos(radAlphaL_13) + L_12endPosX; L_13endPosY = legTeil_2 * sin(radAlphaL_13) + L_12endPosY; // new EndPoint Leg1 glVertex3f(L_13endPosX,L_13endPosY,L_12urPosZ); // 0.2f); glEnd(); glPushMatrix(); // draw JointAxis for Knee3 glTranslatef(L_12endPosX,L_12endPosY,L_12urPosZ); // 0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); // draw Foot Leg1 glPushMatrix(); // draw Foot Leg 1 glTranslatef(L_13endPosX,L_13endPosY,L_12urPosZ); // 0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); /////////////////////////////////////////////// // shoulder V2 = left foreground corner glColor3f(1.0f, 0.0f, 1.0f); // magnenta (dunkles blauRot) glBegin(GL_LINES); // on Plattform V2 glVertex3f(L_22urPosX,L_22urPosY,L_22urPosZ); //-0.6f,0.20f,-0.2f); // ursprung x1,y1,z1 // calc new EndPoint Leg2 radAlphaL_22 = shoulder22 * radian; // Calc new endPos after change Up/Down old L_22Len L_22endPosX = legTeil_1 * cos(radAlphaL_22) + L_22urPosX; L_22endPosY = legTeil_1 * sin(radAlphaL_22) + L_22urPosY; // new EndPoint Leg2 glVertex3f(L_22endPosX,L_22endPosY,L_22urPosZ); // -0.2f); ///// DrawLeg23 knee glVertex3f(L_22endPosX,L_22endPosY,L_22urPosZ); // -0.2f); // ursprung endPosLeg2 x1,y1,z1 // calc new EndPoint Leg1 radAlphaL_23 = knee23 * radian; // Calc new endPos after change Up/Down old L_23Len L_23endPosX = legTeil_2 * cos(radAlphaL_23) + L_22endPosX; L_23endPosY = legTeil_2 * sin(radAlphaL_23) + L_22endPosY; // new EndPoint Leg2 glVertex3f(L_23endPosX,L_23endPosY,L_22urPosZ); // -0.2f); glEnd(); glPushMatrix(); // draw JointAxis for Knee3 glTranslatef(L_22endPosX,L_22endPosY,L_22urPosZ); // -0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); // draw Foot Leg2 glPushMatrix(); // draw Foot Leg 2 glTranslatef(L_23endPosX,L_23endPosY,L_22urPosZ); // -0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); /////////////////////////////////////////////// // shoulder V3 = right background corner glColor3f(0.0f, 1.0f, 0.0f); // green glBegin(GL_LINES); //on Plattform V3 glVertex3f(L_32urPosX,L_32urPosY,L_32urPosZ); // ursprung x1,y1,z1 // calc new EndPoint Leg3 radAlphaL_32 = shoulder32 * radian; // Calc new endPos after change Up/Down old L_32Len L_32endPosX = legTeil_1 * cos(radAlphaL_32) + L_32urPosX; L_32endPosY = legTeil_1 * sin(radAlphaL_32) + L_32urPosY; // new EndPoint Leg3 glVertex3f(L_32endPosX,L_32endPosY,L_32urPosZ); // 0.2f); ///// DrawLeg33 knee glVertex3f(L_32endPosX,L_32endPosY,L_32urPosZ); // 0.2f); // ursprung endPosLeg3 x1,y1,z1 // calc new EndPoint Leg3 radAlphaL_33 = knee33 * radian; // Calc new endPos after change Up/Down old L_33Len L_33endPosX = legTeil_2 * cos(radAlphaL_33) + L_32endPosX; L_33endPosY = legTeil_2 * sin(radAlphaL_33) + L_32endPosY; // new EndPoint Leg3 glVertex3f(L_33endPosX,L_33endPosY,L_32urPosZ); // 0.2f); glEnd(); glPushMatrix(); // draw JointAxis for Knee3 glTranslatef(L_32endPosX,L_32endPosY,L_32urPosZ); // 0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); // draw Foot Leg3 glPushMatrix(); // draw Foot Leg 3 glTranslatef(L_33endPosX,L_33endPosY,L_32urPosZ); // 0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); /////////////////////////////////////////////// // shoulder V4 = left background corner glColor3f(0.0f, 1.0f, 1.0f); // cyan (helles blau) glBegin(GL_LINES); // on Plattform V4 glVertex3f(L_42urPosX,L_42urPosY,L_42urPosZ); // ursprung x1,y1,z1 // calc new EndPoint Leg4 radAlphaL_42 = shoulder42 * radian; // Calc new endPos after change Up/Down old L_42Len L_42endPosX = legTeil_1 * cos(radAlphaL_42) + L_42urPosX; L_42endPosY = legTeil_1 * sin(radAlphaL_42) + L_42urPosY; // new EndPoint Leg4 glVertex3f(L_42endPosX,L_42endPosY,L_42urPosZ); // -0.2f); ///// DrawLeg43 knee glVertex3f(L_42endPosX,L_42endPosY,L_42urPosZ); // -0.2f); // ursprung endPosLeg4 x1,y1,z1 // calc new EndPoint Leg4 radAlphaL_43 = knee43 * radian; // Calc new endPos after change Up/Down old L_43Len L_43endPosX = legTeil_2 * cos(radAlphaL_43) + L_42endPosX; L_43endPosY = legTeil_2 * sin(radAlphaL_43) + L_42endPosY; // new EndPoint Leg4 glVertex3f(L_43endPosX,L_43endPosY,L_42urPosZ); // -0.2f); glEnd(); glPushMatrix(); // draw JointAxis for Knee3 glTranslatef(L_42endPosX,L_42endPosY,L_42urPosZ); // -0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); // draw Foot Leg4 glPushMatrix(); // draw Foot Leg 4 glTranslatef(L_43endPosX,L_43endPosY,L_42urPosZ); // -0.2f); glutSolidSphere(0.05,10,9); glPopMatrix(); /////////////////////////////////////////////// // new stuff glPopMatrix(); if(pTurnY > 360.0f) pTurnY = 0.0f; } //////////////////////////////////////////////////////////////////////////////////////////////// // Called to draw scene void RenderScene(void) { // Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glMatrixMode(GL_MODELVIEW); //glLoadIdentity(); glPushMatrix(); DrawGround(); // new stuff as function DrawPlattformLegs(); // Buffer swap glutSwapBuffers(); } ////////////////////////////////////////////////////////////////////////////////////// // new special Keys & GLUT_keys as per glutmech.c // and normal_and_glutKeysFunctions1.txt #ifdef GLUT #ifdef GLUT_KEY /* ARGSUSED1 */ void keyboard(unsigned char key, int x, int y) { int i = 0; switch (key) { // start Leg 3/4 control functions // Leg 3 case '1': { shoulder32 -= 5.0f; printf("Shoulder32: %f\n",shoulder32); i++; } break; case '2': { shoulder32 += 5.0f; printf("Shoulder32: %f\n",shoulder32); i++; } break; case '3': { knee33 -= 5.0f; printf("Knee33: %f\n",knee33); i++; } break; case '4': { knee33 += 5.0f; printf("Knee33: %f\n",knee33); i++; } break; // Leg 4 Turns case '5': { shoulder42 -= 5.0f; printf("Shoulder42: %f\n",shoulder42); i++; } break; case '6': { shoulder42 += 5.0f; printf("Shoulder42: %f\n",shoulder42); i++; } break; case '7': { knee43 -= 5.0f; printf("Knee43: %f\n",knee43); i++; } break; case '8': { knee43 += 5.0f; printf("Knee43: %f\n",knee43); i++; } break; } shoulder32 = (GLfloat)((const int)shoulder32 % 360); knee33 = (GLfloat)((const int)knee33 % 360); shoulder42 = (GLfloat)((const int)shoulder42 % 360); knee43 = (GLfloat)((const int)knee43 % 360); if (i) glutPostRedisplay(); } #endif /////////////////////////////////////////////// // new Stuff // GLUT_KEY_F1 == Shoulder_X2 all ForeWards // GLUT_KEY_F2 == Shoulder_X2 all Backwards // GLUT_KEY_F3 == Knee_X3 all Forewards // GLUT_KEY_F4 == Knee_X3 all Backwards #ifdef GLUT_SPEC /* ARGSUSED1 */ // Respond to GLUT_Spezial-keys // and with F1 - F4 LegMovements with MenueStruct //and right/left Click void special(int key, int x, int y) { int i = 0; switch (key) { case GLUT_KEY_UP: { pTurnGierNick -= 5.0f; i++; } break; case GLUT_KEY_DOWN: { pTurnGierNick += 5.0f; i++; printf("GlutKeyDown: pTurnGierNick: %f\n",pTurnGierNick); } break; case GLUT_KEY_LEFT: { pTurnY -= 5.0f; i++; } break; case GLUT_KEY_RIGHT: { pTurnY += 5.0f; i++; printf("GlutKeyRight: pTurnY: %f\n",pTurnY); } break; case GLUT_KEY_PAGE_UP: { pTurnNick -= 5.0f; i++; } break; case GLUT_KEY_PAGE_DOWN: { pTurnNick += 5.0f; i++; } break; case GLUT_KEY_HOME: { pTurnGier -= 5.0f; printf("P_TurnGier (min): %f\n",pTurnGier); i++; } break; case GLUT_KEY_END: { pTurnGier += 5.0f; printf("P_TurnGier (max): %f\n",pTurnGier); i++; } break; // Movements BackWards X_Direction case GLUT_KEY_F11: { pMoveX = 0.2f; pBaseX = pBaseX + pMoveX; pMoveZ = 0.1f; pBaseZ = pBaseZ + pMoveZ; printf("F11: P_MoveX: %f, P_MoveZ: %f\n",pBaseX,pBaseZ); i++; } break; // Movements BackWards X_Direction case GLUT_KEY_F12: { pMoveX = 0.2f; pBaseX = pBaseX - pMoveX; pMoveZ = 0.1f; pBaseZ = pBaseZ - pMoveZ; printf("F12: P_MoveX: %f, P_MoveZ: %f\n",pBaseX,pBaseZ); i++; } break; // New Stuff with MenueStruct case GLUT_KEY_F1: // == Shoulder_X2 all ForeWards { if((boolLeg1) || (boolLeg12) || (boolAllLegs)) { shoulder12 += 5.0f; printf("Shoulder12: %f\n",shoulder12); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { shoulder22 += 5.0f; printf("Shoulder22: %f\n",shoulder22); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { shoulder32 += 5.0f; printf("Shoulder32: %f\n",shoulder32); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { shoulder42 += 5.0f; printf("Shoulder42: %f\n",shoulder42); } i++; } break; case GLUT_KEY_F2: // == Shoulder_X2 all Backwards { if((boolLeg1) || (boolLeg12) || (boolAllLegs)) { shoulder12 -= 5.0f; printf("Shoulder12: %f\n",shoulder12); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { shoulder22 -= 5.0f; printf("Shoulder22: %f\n",shoulder22); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { shoulder32 -= 5.0f; printf("Shoulder32: %f\n",shoulder32); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { shoulder42 -= 5.0f; printf("Shoulder42: %f\n",shoulder42); } i++; } break; case GLUT_KEY_F3: // == Knee_X3 all ForeWards { if((boolLeg1) || (boolLeg12) || (boolAllLegs)) { knee13 += 5.0f; printf("Knee13: %f\n",knee13); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { knee23 += 5.0f; printf("Knee23: %f\n",knee23); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { knee33 += 5.0f; printf("Knee33: %f\n",knee33); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { knee43 += 5.0f; printf("Knee43: %f\n",knee43); } i++; } break; case GLUT_KEY_F4: // == Knee_X3 all Backwards { if((boolLeg1) || (boolLeg12) || (boolAllLegs)) { knee13 -= 5.0f; printf("Knee13: %f\n",knee13); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { knee23 -= 5.0f; printf("Knee23: %f\n",knee23); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { knee33 -= 5.0f; printf("Knee33: %f\n",knee33); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { knee43 -= 5.0f; printf("Knee43: %f\n",knee43); } i++; } break; } xRot = (GLfloat)((const int)xRot % 360); pTurnGierNick = (GLfloat)((const int)pTurnGierNick % 360); pTurnNick = (GLfloat)((const int)pTurnNick % 360); pTurnY = (GLfloat)((const int)pTurnY % 360); pTurnGier = (GLfloat)((const int)pTurnGier % 360); shoulder12 = (GLfloat)((const int)shoulder12 % 360); knee13 = (GLfloat)((const int)knee13 % 360); if (i) glutPostRedisplay(); } #endif #endif ///////////////////////////////////////////////////////////////////////////////////// void AnimationsLiftUp() { if(boolLiftUp) { // here code for LiftUp printf("Function: In Animations: LiftUp\n"); } } void AnimationsLieDown() { if(boolLieDown) { // here Code for LieDown printf("Function: In Animations: LieDown\n"); } } void AnimationsWalking() { if(boolWalking) { // here Code for Walking printf("Function: In Animations: Walking\n"); } } ///////////////////////////////////////////////////////////////////////////////////// // vorlaeufiges ProcessMenue for LegControl void ProcessMenu(int value) { /* GLboolean boolLeg1 = 0; // No. 0 red GLboolean boolLeg2 = 0; // No. 1 magenta GLboolean boolLeg3 = 0; // No. 2 green GLboolean boolLeg4 = 0; // No. 3 cyan GLboolean boolLeg12 = 0; // No. 4 GLboolean boolLeg34 = 0; // No. 5 GLboolean boolAllLegs = 0; // No. 6 */ int glut_menu[4]; switch(value) { case 0: { boolLeg1 = 1; boolLeg2 = 0; boolLeg3 = 0; boolLeg4 = 0; boolLeg12 = 0; boolLeg34 = 0; boolAllLegs = 0; printf("Move Leg1 Red\n"); } break; case 1: { boolLeg1 = 0; boolLeg2 = 1; boolLeg3 = 0; boolLeg4 = 0; boolLeg12 = 0; boolLeg34 = 0; boolAllLegs = 0; printf("Move Leg2 Magenta\n"); } break; case 2: { boolLeg1 = 0; boolLeg2 = 0; boolLeg3 = 1; boolLeg4 = 0; boolLeg12 = 0; boolLeg34 = 0; boolAllLegs = 0; printf("Move Leg3 Green\n"); } break; case 3: { boolLeg1 = 0; boolLeg2 = 0; boolLeg3 = 0; boolLeg4 = 1; boolLeg12 = 0; boolLeg34 = 0; boolAllLegs = 0; printf("Move Leg4 Cyan\n"); } break; case 4: { boolLeg1 = 0; boolLeg2 = 0; boolLeg3 = 0; boolLeg4 = 0; boolLeg12 = 1; boolLeg34 = 0; boolAllLegs = 0; printf("Move Leg_1 and Leg_2\n"); } break; case 5: { boolLeg1 = 0; boolLeg2 = 0; boolLeg3 = 0; boolLeg4 = 0; boolLeg12 = 0; boolLeg34 = 1; boolAllLegs = 0; printf("Move Leg_3 and Leg_4\n"); } break; case 6: { boolLeg1 = 0; boolLeg2 = 0; boolLeg3 = 0; boolLeg4 = 0; boolLeg12 = 0; boolLeg34 = 0; boolAllLegs = 1; printf("ALL Legs moving\n"); } break; case 7: { // for Animations: boolLiftUp = 1; // No.7 boolLieDown = 0; // No.8 boolWalking = 0; AnimationsLiftUp(); } break; case 8: { // for Animations: boolLiftUp = 0; // No.7 boolLieDown = 1; // No.8 boolWalking = 0; AnimationsLieDown(); } break; case 9: { // for Animations: boolLiftUp = 0; // No.7 boolLieDown = 0; // No.8 boolWalking = 1; AnimationsWalking(); } break; default: { boolLeg1 = 0; boolLeg2 = 0; boolLeg3 = 0; boolLeg4 = 0; boolLeg12 = 0; boolLeg34 = 0; boolAllLegs = 0; // for Animations: boolLiftUp = 0; // No.7 boolLieDown = 0; // No.8 boolWalking = 0; } break; } // Trigger Redraw glutPostRedisplay(); } ////////////////////////////////////////////////////////////////////////////////////// // drawPlattform Initialitions void InitDrawPlattform() { // old stuff: plattform guckt von hinten rechts nach vorne links //pTurnY = 50.0f; //pTurnGierNick = 7.5f; // new stuff: plattform guckt mitte nach vorne rechts pBaseX = -0.6f; pBaseZ = -0.4f; pTurnY = 125.0f; pTurnGier = -10.0f; // All Legs Initialitions (all Legs hochgezogen // - values: shoulder12 = 90.0f; knee13 = -90.0f; shoulder22 = 90.0f; knee23 = -90.0f; shoulder32 = 90.0f; knee33 = -90.0f; shoulder42 = 90.0f; knee43 = -90.0f; } ////////////////////////////////////////////////////////////////////////////////////// int main(int argc, char *argv[]) { #ifdef GLUT // start of glut windowing and control functions glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(800, 600); glutCreateWindow("glutMechV20"); glutReshapeFunc(ChangeSize); #ifdef GLUT_KEY glutKeyboardFunc(keyboard); #endif #ifdef GLUT_SPEC glutSpecialFunc(special); #endif glutDisplayFunc(RenderScene); //////////////////////////// // Add menu entries to change filter glutCreateMenu(ProcessMenu); glutAddMenuEntry("MoveLeg1 Red",0); glutAddMenuEntry("MoveLeg2 Magenta",1); glutAddMenuEntry("MoveLeg3 Green",2); glutAddMenuEntry("MoveLeg4 Cyan", 3); glutAddMenuEntry("MoveLeg1+2", 4); glutAddMenuEntry("MoveLeg3+4", 5); glutAddMenuEntry("MoveAllLegs", 6); glutAddMenuEntry("Animations: LiftUp",7); glutAddMenuEntry("Animations: LieDown",8); glutAddMenuEntry("Animations: Walking",9); // here animationsButtons glutAttachMenu(GLUT_RIGHT_BUTTON); //////////////////////////// SetupRC(); InitDrawPlattform(); glutMainLoop(); #endif return 0; } /***************************************************************************************************/