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, ...