OpenGl glRotated - Problem



  • Hallo hoffe jemand kann mir bei meinem Problem weiterhelfen.

    Ich habe ein Projekt das Opengl und glfw nutzt.
    Eins meiner erstellten Objekte drehe ich mit glRotated wie zu erwarten funktioniert meine Kollisionserkennung nun nicht mehr an der neuen Stelle wo das Objekt angezeigt wird sondern an der alten Position. Und genau dabei liegt mein Problem mir ist im Moment nicht klar wie ich meine Punkte genauso wie das Objekt rotieren kann. Bietet OpenGl oder auch glfw eine Funktion dafür ?

    Hier der code wie wir das Objekt drehen

    [code]
    // Zeichnen des Würfels
    void Cube::DrawCube() {
    
       glPushMatrix();
        glTranslatef(posX, posY, posZ);
          glRotated(rotX, 1, 0, 0);
          glRotated(rotY, 0, 1, 0);// Rotation um die Y Achse
          glRotated(rotZ, 0 ,0 ,1);
          glBegin(GL_QUADS);
          //ground
          glNormal3f(0.0, 0.0, cubeSize);
    
          glVertex3f(-cubeSize+posX, 0, cubeSize+posZ);
          glVertex3f(-cubeSize+posX, 0, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, 0, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, 0, cubeSize+posZ);
    
          //Bande left
    
          glNormal3f(-cubeSize, 0.0, 0.0);
    
          glVertex3f(-cubeSize+posX, cubeSize, -cubeSize+posZ);
          glVertex3f(-cubeSize+posX, cubeSize, cubeSize+posZ);
          glVertex3f(-cubeSize+posX, 0, cubeSize+posZ);
          glVertex3f(-cubeSize+posX, 0, -cubeSize+posZ);
    
          //Bande right
          glNormal3f(0.0, 0.0, -cubeSize);
    
          glVertex3f(cubeSize+posX, 0, cubeSize+posZ);
          glVertex3f(cubeSize+posX, 0, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, cubeSize, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, cubeSize, cubeSize+posZ);
    
          //Bande front
          glNormal3f(-cubeSize, 0.0, 0.0);
    
          glVertex3f(-cubeSize+posX, cubeSize, cubeSize+posZ);
          glVertex3f(-cubeSize+posX, 0, cubeSize+posZ);
          glVertex3f(cubeSize+posX, 0, cubeSize+posZ);
          glVertex3f(cubeSize+posX, cubeSize, cubeSize+posZ);
    
          //Bande back
          glNormal3f(-cubeSize, 0.0, 0.0);
    
          glVertex3f(-cubeSize+posX, cubeSize, -cubeSize+posZ);
          glVertex3f(-cubeSize+posX, 0, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, 0, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, cubeSize, -cubeSize+posZ);
    
          //top
          glNormal3f(0.0, 0.0, -cubeSize);
    
          glVertex3f(-cubeSize+posX, cubeSize, cubeSize+posZ);
          glVertex3f(-cubeSize+posX, cubeSize, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, cubeSize, -cubeSize+posZ);
          glVertex3f(cubeSize+posX, cubeSize, cubeSize+posZ);
          glEnd();
    
        glPopMatrix();
    
    }
    

    Schon mal viele Dank für eventuelle Ansätze



  • Spiellogik ist nicht die Aufgabe von OpenGL. Ich würde an deiner Stelle manuell die Transformation CPU-seitig durchführen und die Resultate für Kollisionen verwenden. Anschliessend könntest du sogar die Matrizen auf die Grafikkarte laden.

    Hat aber nichts mit C++ zu tun -> Spiele-/Grafikprogrammierung



  • Nexus schrieb:

    Spiellogik ist nicht die Aufgabe von OpenGL. Ich würde an deiner Stelle manuell die Transformation CPU-seitig durchführen und die Resultate für Kollisionen verwenden. Anschliessend könntest du sogar die Matrizen auf die Grafikkarte laden.

    Hat aber nichts mit C++ zu tun -> Spiele-/Grafikprogrammierung

    Was genau meinst du mit der manuellen Transformation? Ich war am überlegen die Werte mit einer Rotationsmatrix zu multiplizieren nur leider weiß ich im Moment nicht wie ich eine Rotationsmatrix bekomme die quasi die gleichen Ergebnisse liefert wie glrotated.



  • Dann solltest du dich in Lineare Algebra einlesen, gewisse mathematische Kenntnisse sind in der Spieleentwicklung notwendig.

    Du kannst natürlich eine der vielen Matrixbibliotheken für C++ benutzen, z.B. glm, Eigen, ...


Anmelden zum Antworten