Gelenke Verbinden



  • Hallo,

    ich soll einen Roboter programmieren, der ein einige Gelenke hat, ich habe das Programm soweit fertig :

    #include <Gl/glut.h>
    
    GLfloat legX =  0.0;
    GLfloat legY = -0.3;
    
    // Der Boden
    void initGround(void)
    {
        glPushMatrix();
        glTranslatef(0.0,-2,1.0);
        glScalef(2.0,0.5,0.2);
        glColor3f(0.65,0.34,1.0);
        glutWireCube(1.0);
        glPopMatrix();
    }
    
    // Zeichnet das 1te Gelenk
    void zeichneGrundgestell(void)
    {
        glPushMatrix();
        glTranslatef(0.0,-1.3,0.0);
        glScalef(1.0,8.5,1.0); // Breite nach rechts und links und innen
        glColor3f(0.0,0.0,1.0);
        glutWireCube(0.2);
        glPopMatrix();
    }
    
    // Zeichnet das Karussell des Roboters
    void zeichneKarussell(void)
    {
        // Position festlegen
        glTranslatef(0.0,-0.2,0.0);
        glRotatef(legX,0.0,1.0,0.0);
        glTranslatef(1.0,-0.2,0.0);
        glPushMatrix();
        glScalef(2.0,0.2,0.2);
        glColor3f(0.0,1.0,0.0);
        glutWireCube(1.0);
        glPopMatrix();
    }
    
    void zeichneSchwinge(void)
    {
        glTranslatef(0.60,0.0,0.0);
        glRotatef(legY,0.0,0.0,1.0);
        glTranslatef(0.60,0.0,0.0);
        glPushMatrix();
        glScalef(0.5,0.2,0.2);
        glColor3f(1.0,0.0,0.0);
        glutWireCube(1.0);
        glPopMatrix();
    }
    
    void display(void)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glPushMatrix();
    
        initGround();
        zeichneGrundgestell();
        zeichneKarussell();
        zeichneSchwinge();
        glPopMatrix();
        glFlush();
    }
    
    void reshape(int w,int h)
    {
        glViewport(0,0,(GLsizei) w, (GLsizei) h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(65.0,(GLfloat) w/ (GLfloat) h, 1.0,20.0);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glTranslatef(0.0,0.0,-5.0);
    }
    
    void keyboard(unsigned char key, int x, int y)
    {
        switch(key)
        {
            case 'd' :
               legX = legX + 2;
               break;
            case 'a' :
               legX = legX - 2;
               break;
            case 'w' :
               legY = legY + 2;
               break;
            case 's' :
               legY = legY - 2;
               break;
            default:
               break;
        }
        glutPostRedisplay();
    }
    
    int main(int argc,char *argv[])
    {
        glutInit(&argc,argv);
        glutInitWindowSize(650,500);
        glutCreateWindow("OpenGL : Roboter ");
        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
        glutKeyboardFunc(keyboard);
        glutMainLoop();
        return 0;
    }
    

    Das Problem ist, das rote Gelenk, es soll beim rauf und runter bewegen mit dem grünen Verbunden bleiben, also nicht sich nicht trennen vom grünen, habe aber keine Idee, wie ich das machen könnte.

    Einer eine Idee 😕



  • Was funzt denn jetzt genau nicht? Dreht sich das rote Gelenk (die "Schwinge") nicht mit, wenn das grüne (das "Karussel") sich dreht? oder bleibt die Verbindungsstelle, wenn du die Schwinge schwingen lässt nicht fest?

    zu 1: Dreh die Verbindungsstelle mit!
    zu 2: Dreh um die Verbindungsstelle!

    Und was ist jetzt das Problem daran?

    PS: Du glaubst doch nicht, dass sich einer den gesamten Quellcode durchliest?!



  • Also, das rote Gelenk ( "Schwinge" ) bewegt sich mit, das klappt alles wunderbar. Ich kann das das rote Gelenk rauf und runter bewegen, es bleibt aber nicht mit dem grünen Gelenk verbunden, dass ist das Problem.

    PS: Du glaubst doch nicht, dass sich einer den gesamten Quellcode durchliest?!

    Ne, aber in eine vernünftige Frage, sollte man den Quellcode mitschicken, es gibt Leute die starten das Programm auch mal, dann ist die Frage vielleicht klarer, lesen muss man es nicht 😃



  • also hab das zwar noch nie gemacht und grad war mein einstand^^

    aber ich würd sagen versuchs mal so:

    void zeichneSchwinge(void)
    {
        glTranslatef(0.9,0.0,0.0);
        glRotatef(legY,0.0,0.0,1.0);
        glTranslatef(0.3,0.0,0.0);
        glPushMatrix();
        glScalef(0.6,0.2,0.2);
        glColor3f(1.0,0.0,0.0);
        glutWireCube(1.0);
        glPopMatrix();
    }
    

    das macht spaß!!! 😃



  • Das Funktioniert, könntest du mir noch sagen was ich falsch bzw. du besser gemacht hast !



  • na den drehungs radius verkleinert und das rote shape etwas weiter rein geholt damit er mit dem grünen shape immer zusammen hängt.


Anmelden zum Antworten