//===========================================================================================// // glutmechV25.c // ------------- // begin : Tue. 21. November 09.00:00 GMT 2007 // // compile : // only opengl in c // compile as: cc glutmechV25.c -o glutMechV25 -I/usr/X121R6/include -L/usr/X121R6/lib -lglut -lGLU -lGL -lm // // only opengl in C++ // compile as: c++ glutmechV25.cpp -o glutmechV25 -I/usr/X121R6/include -L/usr/X121R6/lib -lglut -lGLU -lGL -lm // // run : ./glutmechV25 // // /*************************************************************************************************** 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 ************************************************************************************************** // Using Keys: // keys: // - F1 - F4 : online menu system avaliable by pressing right mouse button on the glutWindowMove and Turns with the 4 Legs // - F11 / F12 : Move Forwards / Backwards // - PageUp/Down : Nick Plattform (um QuerAchse) // - End/Home : Gier Plattfrom (um LaengsAchse) // - Arrows: // - left/right: Turn Plattform left/right // - up/down : Gier/Nick Plattform // // - Numbers : <1,2> : Stence Plattform UP/Down in Y-directions // - Numbers : <3,4,5,6,7,8> => notUsed // // /*************************************************************************************************** Notes: changeLog: 03.11. - develop the new glutmechV10.c 21.11. - changes new version V25.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 Stence Up/Down static GLfloat pStenceY = 0.0f; static GLfloat pBaseY = 0.2f; // 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; GLboolean boolLiftUP_12 = 0; GLboolean boolLiftUP_34_forward = 0; GLboolean boolLiftUP_34_backward = 0; GLboolean boolLiftUP_AllLegs = 0; GLboolean boolLieDown = 0; GLboolean boolWalking = 0; // new Stuff for StandUp (3D_StandUpSim1.txt & darwinsSim12.c) // Variables: // old stuff from darwinsSim12.c // variable for rampOn // LEG 1 GLfloat X12; // shoulder12 GLfloat X13; // knee13 GLfloat X22; // shoulder22 GLfloat X23; // knee23 GLfloat Xf12; // endwert (position) rampUp shouler12 Leg1 GLfloat Xf13; // endwert (position) rampUp knee13 Leg1 GLfloat Xf22; // endwert shoulder22 Leg2 GLfloat Xf23; // endwert knee23 Leg2 GLfloat Xff; // endwert (position) rampDown GLfloat weight12; GLfloat weight13; // variable for rampOn // LEG 34 GLfloat X32; // shoulder32 GLfloat X33; // knee33 GLfloat X42; // shoulder42 GLfloat X43; // knee43 GLfloat Xf32; // endwert (position) rampUp shouler32 Leg3 GLfloat Xf33; // endwert (position) rampUp knee33 Leg3 GLfloat Xf42; // endwert shoulder42 Leg4 GLfloat Xf43; // endwert knee43 Leg4 GLfloat Xff2; // endwert (position) rampDown for Leg34 // weights for Leg 3+4 GLfloat weight32; // leg 3 GLfloat weight33; GLfloat weight42; // leg 4 GLfloat weight43; int ii; // variable for triangleCalc GLfloat a_bone1; GLfloat b_bone1; GLfloat a_bone2; GLfloat b_bone2; GLfloat c_distance11; GLfloat c_distance12; GLfloat c_distance21; GLfloat c_distance22; GLfloat bBoneGamma1; GLfloat bBoneGamma2; GLfloat cosBgamma1; GLfloat cosBgamma2; GLfloat radGamma1; GLfloat radGamma2; GLfloat radianGrad1; GLfloat radianGrad2; GLfloat radian; // new stuff for darwinsSim // leg1 a_bone1 GLfloat alpha11; GLfloat radAlpha11; // new stuff Leg 34 GLfloat alpha21; GLfloat radAlpha21; int step; // for triangle calc GLfloat bBoneGammaStep1; GLfloat bBoneGammaStep2; GLfloat R1,R2; GLboolean boolAnimations; GLboolean boolAniStandUp; GLboolean boolAniLieDown; GLboolean boolAniWalking; GLboolean bool_Leg1OnFloor = 0; GLboolean bool_Leg3OnFloor = 0; // Stence & Nick Variables: int stence12Count = 7; int stence34Count = 10; int icount; GLfloat stenceUpTurnNick_Fact = 0.428f; ////////////////////////////////////////////////////////////////////////////////////////////// // 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); } //////////////////////////////////////////////////////////////////////////////////////////////// // new stuff for Animations(); // new function for StandUp and LieDown all Legs void Ani_StandUp_4Legs() { printf("in AniStandUp_4Legs\n"); rampStandUp(); // standUp Leg12 rampStandUp34(); // standUp Leg34 } // into DrawPlattformLegs(); void Animations() { boolAnimations = 1; printf("In Animations before BOOL\n"); // STANDUP if(boolLiftUp) { // StandUp Leg 1+2 if(boolLiftUP_12) // = 1; { boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; // here code for LiftUp printf("Function: In Animations: LiftUp Leg 1+2\n"); while(1) // endLess-Loop abbruch durch c_distance2 { rampStandUp(); if((c_distance12 >= 0.936475) || (L_13endPosY <= -0.384983) || (bool_Leg1OnFloor == 1)) { printf("C_Distance on 0.92885 and ON Floor\n"); boolLiftUp = 0; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; /////////////////////// for(icount = 1;icount <=stence12Count;icount++) { shoulder12 += 1.0f; shoulder22 += 1.0f; pTurnNick = pTurnNick - stenceUpTurnNick_Fact; printf("ForLoop:Shoulder12: %f, shoulder22: %f, PTurnNick: %f\n",shoulder12,shoulder22,pTurnNick); } printf("EndValue Stence: Shoulder12: %f, shoulder22: %f, PTurnNick: %f\n",shoulder12,shoulder22,pTurnNick); //////////////////////////////// break; } // end if c-distance } // end while } // end StandUp Leg12 // New Stuff Leg 34 StandUp // NEW EINBAU STANDUP LEG 3+4 FORWARDS if(boolLiftUP_34_forward) { printf("BoolLiftUP_34_forward: %d\n",boolLiftUP_34_forward); boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; // here code for LiftUp printf("Function: In Animations: LiftUp Leg 3+4 Forwards\n"); while(1) // endLess-Loop abbruch durch c_distance2 { rampStandUp34(); // old c_distance12 >= 0.936475 // new c_distance22 >= 0.928800 // L_33endPosY <= 319151 // new L_33endPosY = -0.231109 // new L_43endPosY = -0.321616 if((c_distance22 >= 0.869100) || (L_33endPosY <= -0.231109) || (bool_Leg3OnFloor == 1)) { printf("C_Distance_Leg22 on: %f and ON Floor\n",c_distance22); boolLiftUp = 0; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; /////////////////////// stence34Count = 10; for(icount = 1;icount <=stence34Count;icount++) { shoulder32 += 0.8f; shoulder42 += 0.8f; pTurnNick = pTurnNick + stenceUpTurnNick_Fact; printf("ForLoop:Shoulder32: %f, shoulder42: %f, PTurnNick: %f\n",shoulder32,shoulder42,pTurnNick); } printf("EndValue Stence: Shoulder32: %f, shoulder42: %f, PTurnNick: %f\n",shoulder32,shoulder42,pTurnNick); //////////////////////////////// break; } // end if c-distance } // end while } // end StandUp Leg34 FORWARDS // NEW EINBAU STANDUP LEG 3+4 BACKWARDS // StandUp Leg 3+4 if(boolLiftUP_34_backward) { boolLiftUP_AllLegs = 0; // here code for LiftUp printf("Function: In Animations: LiftUp Leg 3+4 Backwards\n"); // here BACKWARDS-Vars weight32 = 30.0f; weight33 = 120.0f; X32 = 90.0f; // anfangsWert shoulder32 X33 = -90.0f; // knee33 Xf32 = 31.005f; // endwert Shoulder32 Xf33 = -74.005f; // endwert Knee33 // leg 4 weight42 = 30.0f; weight43 = 120.0f; X42 = 90.0f; // anfangsWert shoulder42 X43 = -90.0f; // knee43 Xf42 = 27.0f; // endwert Shoulder42 Xf43 = -71.0f; // endwert Knee43 while(1) // endLess-Loop abbruch durch c_distance22 { rampStandUp34(); if((c_distance22 >= 0.907130) || (L_33endPosY <= -0.273496) || (bool_Leg3OnFloor == 1)) { printf("C_Distance_Leg22 on: %f and ON Floor\n",c_distance22); boolLiftUp = 0; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; /////////////////////// for(icount = 1;icount <=stence34Count;icount++) { shoulder32 += 0.125f; shoulder42 += 0.25f; pTurnNick = pTurnNick + stenceUpTurnNick_Fact; printf("ForLoop:Shoulder32: %f, shoulder42: %f, PTurnNick: %f\n",shoulder32,shoulder42,pTurnNick); } printf("EndValue Stence: Shoulder32: %f, shoulder42: %f, PTurnNick: %f\n",shoulder32,shoulder42,pTurnNick); //////////////////////////////// break; } // end if c-distance22 } // end while } // end StandUp Leg34 Backwards // new animations // New Stuff Leg All Legs StandUp with Move +Y if(boolLiftUP_AllLegs) { printf("BoolLiftUP_AllLegs: %d\n",boolLiftUP_AllLegs); boolLiftUP_AllLegs = 0; // here code for LiftUp printf("Function: In Animations: LiftUp All Legs\n"); // StandUp Leg 1+2 - zuweisung // values for 1.StandUp Leg1 // into InitDrawPlattform() weight12 = 30.0f; weight13 = 120.0f; // = leg1 a_bone = turnstep1 -> je groesser desto weicher X12 = 90.0f; // = shoulder12 X13 = -90.0f; // = -knee13 Xf12 = 157.0f; // endPos rampUp for shoulder12 Xf13 = -83.0f; // endPos rampUp for knee13 X22 = 90.0f; // shoulder22 X23 = -90.0f; // knee23 Xf22 = 154.0f; // endwert Xf23 = -79.0f; // endwert // StandUp Leg 3+4 Forwards // - zuweisung // leg 3 - here forwards weight32 = 30.0f; weight33 = 120.0f; X32 = 90.0f; // anfangsWert shoulder32 X33 = -90.0f; // knee33 Xf32 = 142.005f; // endwert Shoulder32 Xf33 = -94.005f; // endwert Knee33 // leg 4 weight42 = 30.0f; weight43 = 120.0f; X42 = 90.0f; // anfangsWert shoulder42 X43 = -90.0f; // knee43 Xf42 = 150.0f; // endwert Shoulder42 Xf43 = -81.0f; // endwert Knee43 while(1) // endLess-Loop abbruch durch c_distance2 { Ani_StandUp_4Legs(); // new Abbruch // leg12 leg34 if(((c_distance12 >= 0.936475) && (c_distance22 >= 0.869100)) || (L_33endPosY <= -0.231109) || (bool_Leg1OnFloor == 1) || (bool_Leg3OnFloor == 1)) { printf("C_Distance_Leg12 on: %f, C_Distance_Leg34 on: %f and ON Floor\n",c_distance12,c_distance22); boolLiftUp = 0; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; /////////////////////// pStenceY = 0.01f; stence34Count = 8; for(icount = 1;icount <=stence34Count;icount++) { shoulder12 += 0.25f; shoulder22 += 0.25f; shoulder32 += 0.8f; shoulder42 += 0.8f; pBaseY = pBaseY + pStenceY; printf("Stence Up: P_BaseY: %f, P_StenceY: %f\n",pBaseY,pStenceY); printf("Stence Up: Shoulder12: %f, shoulder22: %f\n",shoulder12,shoulder22); printf("Stence Up: Shoulder32: %f, shoulder42: %f\n",shoulder32,shoulder42); } printf("StandUp All Legs Done\n"); //////////////////////////////// break; } // end if c-distance } // end while } // end StandUp All Leg } // end STAND UP // LIEDOWN if(boolLieDown) { // here Code for LieDown printf("Function: In Animations: LieDown\n"); boolLieDown = 0; // the hard-way not so correct but useful shoulder12 = 90.0f; knee13 = -90.0f; shoulder22 = 90.0f; knee23 = -90.0f; shoulder32 = 90.0f; knee33 = -90.0f; shoulder42 = 90.0f; knee43 = -90.0f; boolLiftUp = 0; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; /////////////////////// pStenceY = 0.01f; stence34Count = 8; for(icount = 1;icount <=stence34Count;icount++) { // no additional legMoves // only moveDown pBaseY = pBaseY - pStenceY; printf("LieDown: P_BaseY: %f, P_StenceY: %f\n",pBaseY,pStenceY); } printf("LieDown All Legs Done\n"); ///////////////////////////// } // end LieDown All Legs // WALKING if(boolWalking) { // here Code for Walking printf("Function: In Animations: Walking\n"); } } /////////////////////////////////////////////////////////////////////////////////////////////// // new stuff void DrawPlattformLegs() { Animations(); //glTranslatef(0.60f,0.2f,-4.5f); // old stuff glTranslatef(pBaseX,0.2f,-4.5f); glTranslatef(0.60f,0.2f,pBaseZ); // with pStenceY and pBaseY heben und Senken Plattform in Y-Directions glTranslatef(0.0f,pBaseY,0.0f); // 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); // here Yellow-Sphere als mittelpunkt // -> grundlage void gltDrawUnitAxes(void) glColor3f(1.0f,1.0f,0.0f); glPushMatrix(); glTranslatef(0.0f,0.2f,0.0f); glutSolidSphere(0.06f,10,9); glPopMatrix(); // 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 X12,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 endPosLeg1X12,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 with collision-Detections with ground // draw Foot Leg 1 with fore- and backTurns glTranslatef(L_13endPosX,L_13endPosY,L_12urPosZ); // 0.2f); printf("+++++L_13EndPosY: %f\n",L_13endPosY); if(shoulder12 < 30.0) // turn leg nach hinten { if(L_13endPosY <= -0.384983) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions } } if(shoulder12 > 150.0) { if(L_13endPosY <= -0.346400) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions bool_Leg1OnFloor = 1; } } glutSolidSphere(0.05,10,9); glPopMatrix(); /////////////////////////////////////////////// // shoulder V2 = left foreground corner glColor3f(1.0f, 0.0f, 1.0f); // magenta (dunkles blauRot) glBegin(GL_LINES); // on Plattform V2 glVertex3f(L_22urPosX,L_22urPosY,L_22urPosZ); //-0.6f,0.20f,-0.2f); // ursprung X12,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 X12,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 Leg 2 with collision-Detections with ground // draw Foot Leg 2 glPushMatrix(); glTranslatef(L_23endPosX,L_23endPosY,L_22urPosZ); printf("+++++L_23EndPosY: %f\n",L_23endPosY); if(shoulder22 < 40.0) // turn leg nach hinten { if(L_23endPosY <= -0.255853) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions } } if(shoulder22 > 145.0) { if(L_23endPosY <= -0.299977) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions } } 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 X12,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 X12,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 Leg 3 with collision-Detections with ground // draw Foot Leg 3 glPushMatrix(); glTranslatef(L_33endPosX,L_33endPosY,L_32urPosZ); printf("+++++L_33EndPosY: %f\n",L_33endPosY); if(shoulder32 < 40.0) // turn leg nach hinten { if(L_33endPosY <= -0.255853) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions bool_Leg3OnFloor = 1; } } if(shoulder32 > 135.0) { if(L_33endPosY <= -0.214309) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions } } 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 X12,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 X12,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 with collision-Detections with ground // draw Foot Leg 4 glTranslatef(L_43endPosX,L_43endPosY,L_42urPosZ); printf("+++++L_43EndPosY: %f\n",L_43endPosY); if(shoulder42 < 40.0) // turn leg nach hinten { if(L_43endPosY <= -0.273221) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions } } if(shoulder42 > 140.0) { if(L_43endPosY <= -0.318293) { glColor3f(1.0f, 1.0f, 0.0f); // yellow Collision-Attentions } } 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) { // heben (stence) Plattformstart Leg 3/4 control functions case '1': { pStenceY = 0.01f; pBaseY = pBaseY + pStenceY; printf("Add <1> : P_BaseY: %f, P_StenceY: %f\n",pBaseY,pStenceY); i++; } break; case '2': { pStenceY = 0.01f; pBaseY = pBaseY - pStenceY; printf("Sub <2> : P_BaseY: %f, P_StenceY: %f\n",pBaseY,pStenceY); i++; } break; case '3': { // knee33 -= 1.0f; printf("<3> notUsing\n"); i++; } break; case '4': { // knee33 += 1.0f; printf("<4> notUsing\n"); i++; } break; // Leg 4 Turns case '5': { // shoulder42 -= 1.0f; printf("<5> notUsing\n"); i++; } break; case '6': { // shoulder42 += 1.0f; printf("<6> notUsing\n"); i++; } break; case '7': { // knee43 -= 1.0f; printf("<7> notUsing\n"); i++; } break; case '8': { // knee43 += 1.0f; printf("<8> notUsing\n"); 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 /////////////////////////////////////////////// #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 -= 1.0f; printf("Sub GlutKeyDown: pTurnGierNick: %f\n",pTurnGierNick); i++; } break; case GLUT_KEY_DOWN: { pTurnGierNick += 1.0f; i++; printf("Add GlutKeyDown: pTurnGierNick: %f\n",pTurnGierNick); } break; case GLUT_KEY_LEFT: { pTurnY -= 1.0f; printf("Sub GlutKeyLeft: pTurnY: %f\n",pTurnY); i++; } break; case GLUT_KEY_RIGHT: { pTurnY += 1.0f; printf("Add GlutKeyRight: pTurnY: %f\n",pTurnY); i++; } break; case GLUT_KEY_PAGE_UP: { pTurnNick -= 1.0f; printf("Sub Plattform Nick (pTurnNick): %f\n",pTurnNick); i++; } break; case GLUT_KEY_PAGE_DOWN: { pTurnNick += 1.0f; printf("Add Plattform Nick (pTurnNick): %f\n",pTurnNick); i++; } break; case GLUT_KEY_HOME: { pTurnGier -= 1.0f; printf("Sub PlattformTurnGier: %f\n",pTurnGier); i++; } break; case GLUT_KEY_END: { pTurnGier += 1.0f; printf("Add PlattformTurnGier: %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("Add 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("Sub 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 += 1.0f; printf("Add Shoulder12: %f\n",shoulder12); // tests for c_distance2 Leg1 bBoneGammaStep1 = shoulder12; triangleCalc(); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { shoulder22 += 1.0f; printf("Add Shoulder22: %f\n",shoulder22); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { shoulder32 += 1.0f; printf("Add Shoulder32: %f\n",shoulder32); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { shoulder42 += 1.0f; printf("Add Shoulder42: %f\n",shoulder42); } i++; } break; case GLUT_KEY_F2: // == Shoulder_X2 all Backwards { if((boolLeg1) || (boolLeg12) || (boolAllLegs)) { shoulder12 -= 1.0f; printf("Sub Shoulder12: %f\n",shoulder12); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { shoulder22 -= 1.0f; printf("Sub Shoulder22: %f\n",shoulder22); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { shoulder32 -= 1.0f; printf("Sub Shoulder32: %f\n",shoulder32); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { shoulder42 -= 1.0f; printf("Sub Shoulder42: %f\n",shoulder42); } i++; } break; case GLUT_KEY_F3: // == Knee_X3 all ForeWards { if((boolLeg1) || (boolLeg12) || (boolAllLegs)) { knee13 += 1.0f; printf("Add Knee13: %f\n",knee13); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { knee23 += 1.0f; printf("Add Knee23: %f\n",knee23); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { knee33 += 1.0f; printf("Add Knee33: %f\n",knee33); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { knee43 += 1.0f; printf("Add Knee43: %f\n",knee43); } i++; } break; case GLUT_KEY_F4: // == Knee_X3 all Backwards { if((boolLeg1) || (boolLeg12) || (boolAllLegs)) { knee13 -= 1.0f; printf("Sub Knee13: %f\n",knee13); } if((boolLeg2) || (boolLeg12) || (boolAllLegs)) { knee23 -= 1.0f; printf("Sub Knee23: %f\n",knee23); } if((boolLeg3) || (boolLeg34) || (boolAllLegs)) { knee33 -= 1.0f; printf("Sub Knee33: %f\n",knee33); } if((boolLeg4) || (boolLeg34) || (boolAllLegs)) { knee43 -= 1.0f; printf("Sub 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 ///////////////////////////////////////////////////////////////////////////////////// // new square for leg34 square34(GLfloat x) { GLfloat X32; X32 = x*x; // printf("X32: %f\n",X32); return X32; } triangleCalc34() { printf("\n"); printf("TriangleCalc 34\n"); legTeil_1 = 0.6f; // radius old: a_bone1 = 100; legTeil_2 = 0.8f; // b_bone1 = 240; a_bone2 = legTeil_1; b_bone2 = legTeil_2; // new stuff // b_boneGammaStep2 = drehwinkel von knee13; bBoneGamma2 = bBoneGammaStep2; if(bBoneGamma2 <= 0.0) { bBoneGamma2 = bBoneGamma2 * (-1.0); } // printf("B_Bone_Gamma2: %f °\n",bBoneGamma2); radian = 0.017453; radianGrad2 = bBoneGamma2 * radian; radGamma2 = radianGrad2; // printf("RadGamma2: %lf\n",radGamma2); cosBgamma2 = cos(radGamma2); // printf("Cos2: %lf\n",bBoneGamma2); // printf("Cos2: %lf\n",cosBgamma2); c_distance21 = square34(a_bone2)+square34(b_bone2) - 2*a_bone2*b_bone2 * cos(radGamma2); printf("C_Distance21: %f\n",c_distance21); if(c_distance21 < 0.0) { c_distance21 = c_distance21 * (-1.0f); printf("Was negative C_Distance21: %f\n",c_distance21); } c_distance22 = sqrt(c_distance21); printf("C_Distance22 : %f\n",c_distance22); printf("\n"); } // new stuff for leg34 standUp forward new_legMoves34() { printf("New_LegMoves_34\n"); alpha21 = shoulder32; printf("Alpha21: %f\n",alpha21); bBoneGammaStep2 = shoulder32; // - umrechnung in bogenmass radAlpha21 = alpha21 * radian; printf("RadAlpha21: %lf\n",radAlpha21); // new stuff triangleCalc34(); } rampStandUp34() { step++; printf("Step34: %d\n",step); // Leg 3 green X32 = ((X32 * (weight32-1)+Xf32) / weight32); shoulder32 = (int)X32; // Leg3 shoulder32 X33 = ((X33 * (weight33-1)+Xf33) / weight33); knee33 = (int)X33; // Leg3 knee33 printf("RampingLeg 34 : X32 = %f, X33 = %f, step: %d\n",X32,X33,step); // Leg 4 cyan (helles blau) X42 = ((X42 * (weight42-1)+Xf42) / weight42); shoulder42 = (int)X42; // Leg4 shoulder42 X43 = ((X43 * (weight43-1)+Xf43) / weight43); knee43 = (int)X43; // Leg4 knee43 printf("Ramping: X42 = %f, X43 = %f, step: %d\n",X42,X43,step); printf("UEBERGABE: Leg 3: Shoulder32: %f, Knee33: %f\n",shoulder32,knee33); printf("UEBERGABE: Leg 4: Shoulder42: %f, Knee43: %f\n",shoulder42,knee43); new_legMoves34(); // zuordnungen for LieDown // standX32 = X32; // standX42 = X43; } ///////////////////////////////////////////////////////////////////////////////////// // new Stuff for StandUp Leg 1+2 from darwinsSim12.c square(GLfloat x) { GLfloat X12; X12 = x*x; // printf("X12: %f\n",X12); return X12; } triangleCalc() { printf("\n"); printf("TriangleCalc\n"); legTeil_1 = 0.6f; // radius old: a_bone1 = 100; legTeil_2 = 0.8f; // b_bone1 = 240; a_bone1 = legTeil_1; b_bone1 = legTeil_2; // new stuff // b_boneGammaStep1 = drehwinkel von knee13; bBoneGamma1 = bBoneGammaStep1; // 270.0 - alpha1; if(bBoneGamma1 <= 0.0) { bBoneGamma1 = bBoneGamma1 * (-1.0); } //printf("B_Bone_Gamma1: %f °\n",bBoneGamma1); radian = 0.017453; radianGrad1 = bBoneGamma1 * radian; radGamma1 = radianGrad1; // printf("RadGamma1: %lf\n",radGamma1); cosBgamma1 = cos(radGamma1); //printf("Cos1: %lf\n",bBoneGamma1); //printf("Cos1: %lf\n",cosBgamma1); c_distance11 = square(a_bone1)+square(b_bone1) - 2*a_bone1*b_bone1 * cos(radGamma1); // 0.3420201433; //printf("C_Distance1: %f\n",c_distance1); c_distance12 = sqrt(c_distance11); printf("C_Distance12 : %f\n",c_distance12); printf("\n"); } new_legMoves() { printf("New_LegMoves\n"); alpha11 = shoulder12; // old: alpha1 = 270.0 + turnstep1; printf("Alpha11: %f\n",alpha11); bBoneGammaStep1 = shoulder12; // - umrechnung in bogenmass radAlpha11 = alpha11 * radian; // - radianGrad = bBoneGamma * radian; // printf("RadAlpha11: %lf\n",radAlpha11); // new stuff triangleCalc(); } rampStandUp() { step++; printf("Step: %d\n",step); // Leg 1 red X12 = ((X12 * (weight12-1)+Xf12) / weight12); shoulder12 = (int)X12; // Leg1 shoulder12 X13 = ((X13 * (weight13-1)+Xf13) / weight13); knee13 = (int)X13; // Leg1 knee13 printf("Ramping: X12 = %f, X13 = %f, step: %d\n",X12,X13,step); // Leg 2 magenta (dunkles blauRot) X22 = ((X22 * (weight12-1)+Xf22) / weight12); shoulder22 = (int)X22; // Leg2 shoulder22 X23 = ((X23 * (weight13-1)+Xf23) / weight13); knee23 = (int)X23; // Leg2 knee23 printf("Ramping: X22 = %f, X23 = %f, step: %d\n",X22,X23,step); printf("UEBERGABE: Leg 1: Shoulder12: %f, Knee13: %f\n",shoulder12,knee13); printf("UEBERGABE: Leg 2: Shoulder22: %f, Knee23: %f\n",shoulder22,knee23); new_legMoves(); // zuordnungen for LieDown // standX12 = X12; // = X12 // standX2 = X13; // = X13 } ///////////////////////////////////////////////////////////////////////////////////// // vorlaeufiges ProcessMenue for LegControl void ProcessMenu(int value) { 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; 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(); } ////////////////////////////////////////////////////////////////////////////////////// // new menu-select -> zu griff auf standUp void menu_select(int mode) { switch (mode) { case 7: { printf("+++StandUp - Leg 1 + 2\n"); // for Animations: from V23 boolLiftUp = 1; boolLiftUP_12 = 1; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; boolLieDown = 0; boolWalking = 0; Animations(); } break; case 8: { printf("StandUp - Leg 3+4 Up-Forwards\n"); // for Animations: from V23 boolLiftUp = 1; boolLiftUP_12 = 0; boolLiftUP_34_forward = 1; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 0; boolLieDown = 0; boolWalking = 0; Animations(); } break; case 9: { printf("StandUp - Leg 3+4 Up-Backwards\n"); // for Animations: from V23 boolLiftUp = 1; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 1; boolLiftUP_AllLegs = 0; boolLieDown = 0; boolWalking = 0; Animations(); } break; case 10: { printf("StandUp All Legs\n"); // for Animations: from V24 boolLiftUp = 1; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 1; boolLieDown = 0; boolWalking = 0; Animations(); } break; case 11: { printf("xxxxxxxxxx 1 LieDown - All Legs\n"); boolLiftUp = 0; boolLiftUP_12 = 0; boolLiftUP_34_forward = 0; boolLiftUP_34_backward = 0; boolLiftUP_AllLegs = 1; boolLieDown = 1; boolWalking = 0; Animations(); } break; case 12: { printf("Walking Leg 1+2\n"); } break; case 13: { printf("Walking Leg 3+4\n"); } break; case 14: { printf("Walking All Legs\n"); } break; case 15: { printf("Walking-Directions: Forwards\n"); } break; case 16: { printf("Walking-Directions: LeftTurn-Walk\n"); } break; case 17: { printf("Walking-Directions: RightTurn-Walk\n"); } break; default: { boolLeg1 = 0; boolLeg2 = 0; boolLeg3 = 0; boolLeg4 = 0; boolLeg12 = 0; boolLeg34 = 0; boolAllLegs = 0; // for Animations: boolLiftUp = 0; // No.7-9 boolLieDown = 0; // No.10 boolWalking = 0; // No.11-16 } break; } // new stuff // Trigger Redraw glutPostRedisplay(); } //////////////////////////////////////////// /* // new MenueStuff void menu_select(int mode) { switch (mode) { #ifdef ANIMATION case 1: glutIdleFunc(animation); break; #endif case 2: glutIdleFunc(NULL); break; case 3: //Toggle(); //glutPostRedisplay(); break; case 4: exit(EXIT_SUCCESS); } } */ //////////////////////////////////////////////////////////////// /* ARGSUSED */ void null_select(int mode) { } void glutMenu(void) { int glut_menu[6]; // standUp-menue Leg 3+4 forward/backward glut_menu[6] = glutCreateMenu(menu_select); glutAddMenuEntry("Leg 3+4 Up-Forward",8); glutAddMenuEntry("Leg 3+4 Up-Backward",9); // standUP menue glut_menu[1] = glutCreateMenu(menu_select); glutAddMenuEntry("Leg 1 + 2",7); glutAddSubMenu("Leg 3 + 4",glut_menu[6]); glutAddMenuEntry("All Legs",10); // lieDown menue glut_menu[2] = glutCreateMenu(menu_select); glutAddMenuEntry("All Legs",11); // walking Directions menue glut_menu[5] = glutCreateMenu(menu_select); glutAddMenuEntry("Forwards",15); glutAddMenuEntry("LeftSide Walk",16); glutAddMenuEntry("RightSide Walk",17); // Walking subMenue Legs-Walk glut_menu[4] = glutCreateMenu(menu_select); glutAddMenuEntry("Walk Leg1+2", 12); glutAddMenuEntry("Walk Leg3+4", 13); glutAddMenuEntry("Walk AllLegs",14); // Walking menue glut_menu[3] = glutCreateMenu(NULL); glutAddSubMenu("Legs-Walking",glut_menu[4]); glutAddSubMenu("Direction-Walking",glut_menu[5]); // animation menue glut_menu[0] = glutCreateMenu(NULL); glutAddSubMenu("StandUp",glut_menu[1]); glutAddSubMenu("LieDown",glut_menu[2]); glutAddSubMenu("Walking",glut_menu[3]); //////////////////////////// // Add menu entries to change filter // new stuff with SubMenues // in charge for animations glutCreateMenu(menu_select); // in charge for LegMovements glutCreateMenu(ProcessMenu); // movements 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); // in charge for all subMenues at Animations glutAddSubMenu("Animations: ",glut_menu[0]); // here animationsButtons left/right MouseButton glutAttachMenu(GLUT_LEFT_BUTTON); glutAttachMenu(GLUT_RIGHT_BUTTON); //////////////////////////// } ////////////////////////////////////////////////////////////////////////////////////// // 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; // stence Y pBaseY = 0.050f; 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; // values for 1.StandUp Leg1 // into InitDrawPlattform() weight12 = 30.0f; weight13 = 120.0f; // = leg1 a_bone = turnstep1 -> je groesser desto weicher X12 = 90.0f; // = shoulder12 X13 = -90.0f; // = -knee13 Xf12 = 157.0f; // endPos rampUp for shoulder12 Xf13 = -83.0f; // endPos rampUp for knee13 X22 = 90.0f; // shoulder22 X23 = -90.0f; // knee23 Xf22 = 154.0f; // endwert Xf23 = -79.0f; // endwert // new Values StandUP Leg 34 // fuer Forward and Backward gleiche Variable benutzen // zuweisung fuer backward into Animations -> Leg3+4 backwards // leg 3 // here forwards weight32 = 30.0f; weight33 = 120.0f; X32 = 90.0f; // anfangsWert shoulder32 X33 = -90.0f; // knee33 Xf32 = 142.005f; // endwert Shoulder32 Xf33 = -94.005f; // endwert Knee33 // leg 4 weight42 = 30.0f; weight43 = 120.0f; X42 = 90.0f; // anfangsWert shoulder42 X43 = -90.0f; // knee43 Xf42 = 150.0f; // endwert Shoulder42 Xf43 = -81.0f; // endwert Knee43 } ////////////////////////////////////////////////////////////////////////////////////// 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("glutMechV25"); glutReshapeFunc(ChangeSize); #ifdef GLUT_KEY glutKeyboardFunc(keyboard); #endif #ifdef GLUT_SPEC glutSpecialFunc(special); #endif glutDisplayFunc(RenderScene); SetupRC(); // InitDrawPlattform InitDrawPlattform(); // new MenuesStuff glutMenu(); glutMainLoop(); #endif return 0; } /***************************************************************************************************/