# GL4Java Animation erstellen



## Gast (23. Feb 2008)

Hallo zusammen, 

ich fange gerade an mit GL4Java zu arbeiten und habe angefangen Polygone zu zeichnen.
Nun möchte ich ein Dreieck animieren und weiss nicht recht wie ich das anstellen soll.

Ich denke ich muss die Funktion display() entsprechend verändern, um mein Dreieck rotieren zu lassen.


Die Funktion sieht sol aus:


```
public void display(){
//	 überprüft ob der OpenGL-Kontext initialisiert ist
	 if(glj.gljMakeCurrent()==false) { return; }
//	 löschen des Color Buffer
	 gl.glClear(GL_COLOR_BUFFER_BIT);
//	 zurück setzten der Szene in ihren ursprünglichen Zustand
	 //gl.glLoadIdentity();

//	Skalierung des Dreiecks um 2 Einheiten in X Richtung und 2 
//	Einheiten in Y Richtung
 	gl.glScalef(1, 1, 1);
 	
//  Verschiebung des Dreiecks nach rechts um 2 Einheiten
 	 gl.glTranslatef(1.0f,0.0f,0.0f);
 	 
 	 float x = 0.000000000000000000001f; 
 	 
 	 while(true){
 	 
 	 //neuanzeige erzwingen
     //gl.glFlush();
 	 
// 	 Drehung des Dreiecks um die X-Achse um 25°
 	 gl.glRotatef(25.0f + x,0.0f,1.0f,0.0f);
 	 
 	 

 	 
// 	 erstellen einer gerichteten Lichtquelle
 	 gl.glEnable(GL_LIGHTING);
 	 float ambient[] = {0.8f, 0.8f, 0.8f, 0.0f};
 	 float richtung[] = {0.0f, 0.0f, 1.0f, 0.0f};
 	 gl.glLightfv(GL_LIGHT0, GL_AMBIENT_AND_DIFFUSE, ambient);
 	 gl.glLightfv(GL_LIGHT0, GL_POSITION, richtung);
 	 gl.glEnable(GL_LIGHT0);

 	 
 
//	 Hier Zeichenbefehle -----------------------------------
//	 Auswahl der OpenGL - Primitive
  	 gl.glBegin(GL_TRIANGLES);
//	 Zeichenfrabe auswählen
  	 gl.glColor3f(2.0f, 1.0f, 1.0f);
//	 Zeichnen des Dreiecks 
  	 gl.glVertex3f( 0.0f, 1.0f,-5.0f);
  	 gl.glVertex3f( 1.0f,-1.0f,-5.0f);
  	 gl.glVertex3f(-1.0f,-1.0f,-5.0f);
//	 Beenden der OpenGL - Primitiven Eingabe
     gl.glEnd();

//	 Umschalten des doublebuffers
	 glj.gljSwap();
//	 gibt den OpenGL-Kontext wieder frei
	 glj.gljFree();
	 
 	 }
  }//end of display
```

Ich habe hier eine Endlosschleife eingebaut, die den Rotatonswinkel des Dreiecks verändert.
Leider rotiert da nicht viel. 

Vielleicht kann mir hier jemand den nötigen Anstoß geben, damit ich es verstehe.

Danke.

Grüße


----------



## Beni (23. Feb 2008)

Ich kennen GL4Java nicht, aber bei OpenGL musst du normalerweise dafür sorgen, dass display vom System für jedes neue Frame aufgerufen wird (es wird da vermutlich irgendwo eine Methode "redisplay", "redraw", oder so ähnlich geben).

siehe auch


----------



## Guest (23. Feb 2008)

Moin,

hab es raus:

Das sollte man in der Methode Display rauslassen:

//zurück setzten der Szene in ihren ursprünglichen Zustand
gl.glLoadIdentity();

Dann hab ich im Konstruktor diese Methode eingebaut:

    //Frames per Second festlegen
setAnimateFps(maxFramerate);

Dadurch sage ich also , dass ich maxFramerate Bilder pro Sekunde ausgeben möchte und schon
läuft die Show.

Geht bestimmt auch anders viel besser, aber fürs Erste bin ich zufrieden.

Für Animimationen muss man einfach von der Klasse GLAnimCanvas  ableiten....


----------

