OpenGl (GLUT) Rotate-Animation

F

Furtano

Gast
Hi,

ich habe ein Spielfeld abgebildet und möchte es um 180° drehen.
Leider sieht man nicht, wie es sich langsam immer weiter dreht.
Sondern ich sehe nur den fertigen "Dreh".

PHP:
/**
@brief Rotates the Gamefield 180° with an turn animaion
*/
void flipGamefield180degree (){
		for (int i = 0; i < 180; i++){
			glRotatef(1, 0, 1, 0);
			glutPostRedisplay();
			Sleep(20);
		}
}

PHP:
void display(void)
{
	
	// Löscht den Bildschirm
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   // Zeichenfarbe setzen  
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             
         
   // _,_,_ wo steht die Kamera, _,_,_ wo hin, wo ist oben?
   gluLookAt (0.0, 0.0, 10, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);


   // Rotation X-Achse
   rotating(0);
   // Rotation Y-Achse
   rotating(1);
   // Rotation Z-Achse
   rotating(2);

   if (flip180degree){
	   flipGamefield180degree();
   }

   /*glRotatef(15,0,1,0);
   glRotatef(-15,1,0,0);
   */

   glTranslatef(-5.5, -6 ,0);
   glPushMatrix();
   drawGameField(false, 10);
   glPopMatrix();

   glPushMatrix();
   glTranslatef(11, 0 ,0);
   glPushMatrix();
   drawGameField(true, 10);
   glPopMatrix();
   glPopMatrix();

   //drawShipOnField(s1, feldSpieler);
   drawShipOnField(s1, feldSpieler);

   //glDisable(GL_LIGHTING);
   /*glColor3f(0, 0, 1); 
   glutSolidCube(1);
   glEnable(GL_LIGHTING);*/
  /* glTranslatef(5, 0, 0);
   drawGameField(true, 10);*/
   //glutSolidTeapot(1.0);
	

   //glRotatef(30,1.0,0.0,0.0);
   


   
 

   glFlush ();
}
 
Die glutPostRedisplay Funktion, die du innerhalb deiner display-Funktion aufrufst, sorgt nur dafür, dass die display-Funktion beim nächsten Durchlauf im Main-loop nochmal aufgerufen wird. So lange du aber in deiner display-Funktion bist, wird der Main-loop nicht nochmal durchlaufen.
Abgesehen davon mach es doch sowieso keinen Sinn, von innerhalb deiner display-Funktion diese nochmal aufzurufen (und immer wieder, 180 mal). Du müsstest von außerhalb 180 mal die Display-Funktion aufrufen und zwischen jedem Aufruf eine Variable verändern, über die dann deine display-Funktion weiß, wie weit die Rotation schon ist.
Außerdem gibt es soweit ich weiß ich glut eine Timerfunktion, ist wohl etwas eleganter als sleep.
 
Ich glaube, du solltest dich mal mit der Funktionsweise von OpenGL befassen.
Ein glutPostRedisplay() Aufruf ist hier gar nicht mal nötig.
Was meinst du, wofür es den Main-Loop gibt?
 

Ähnliche Themen

F
Antworten
3
Aufrufe
2.221
Zurück
Oben