OpenGL - Rotation zweier Objekt
-
Hallo zusammen,
habe folgendes Problem:
Ich habe zwei Objekt die ich sperat behandeln will, also unabhängig voneinander verschieben.
meine display methode sieht folgendermassen aus:void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); //Matrix wird geladen setUserView(); ply->draw(); //zeichnet ein Polyeder glPushMatrix(); drawSphere(-1.0,1.0,0.0); //zeichnet einen Kreis der sich am Ort (-1.0, 1.0, 0.0) befindet glPopMatrix(); glutSwapBuffers(); }void setUserView() { glLoadIdentity(); glTranslatef(-current_pos[0], current_pos[1], -current_pos[2]); glRotatef(angle2, 1.0, 0.0, 0.0); glRotatef(angle, 0.0, 1.0, 0.0); }void drawSphere(float x, float y,float z){ glColor3f(1.0f, 1.0f, 0.0f); glRotatef(spini,1.0,0.0,0.0); glTranslatef(x,y,z); glutSolidSphere(0.3, 40, 30); glLoadIdentity(); }allerdings dreht sich der kreis (die Kugel) mit dem Polyeder mit.
Ich verstehe die Kombination aus LoadIdentity und Push/PopMatrix nicht wirklich.Hat jemand einen Lösungsvorschlag.
Danke und Gruss
-
naja, du benutzt push und popmatrix, verstehst du derren gebrauch??
push dubliziert die matrix,damit wird aber die aktuelle nicht geloescht oder auf die einheitsm. gesetzt.
den poly auch mit push und pop einschliessen oder glloadId aufrufen.
Ps: ah lese grad du verstehts nicht wirklich: Also glLoadid setzt die aktuelle matrix auf die einheitsmatrix. push schiebt dir eine kopie der aktuellen matrix auf den stack, mit pop kopiert man dann die oberste auf dem stack gepeicherte matrix ueber die aktuelle und veringert den stack um diese matrix.
d.h mit push speichert man den aktuellen Stand aus rotationen,translations und scales. dann kann man weitere sachen machen ... wenn man pop aufruft springt man quasi auf den vorherigen Stand von trans,rots und scales wieder zurueck. glloadID springt wieder ganz zuerueck zum unverdrehten ursprung.
Hoffe, ich konnte weiter verwirren.