# Problem mit Würfelanimierung in LWJGL



## der Erzeuger (11. Apr 2015)

Hallo,

ich hab mir ne kleine Funktion geschrieben um mir nen 3dimensionalen Würfel zu animieren:

```
public static void Quadrat(float d, float e, float f, float b)
	{
	    glBegin(GL_QUADS);

	    //VORNE (wir schauen von vorne drauf, positive X achse nach rechts, positive Y achse nach oben, positive Z achse von uns weg)
	    glTexCoord2f(0, 0);
	    glVertex3f(-b+d, b+e, b+f); // LINKS OBEN
	    glTexCoord2f(1, 0);
	    glVertex3f(-b+d,-b+e, b+f); // LINKS UNTEN
	    glTexCoord2f(1, 1);
	    glVertex3f( b+d,-b+e, b+f); // RECHTS UNTEN
	    glTexCoord2f(0, 1);
	    glVertex3f( b+d, b+e, b+f); // RECHTS OBEN
	    // (Gegen den Uhrzeigersinn.)

	    //OBEN (wir schauen von oben drauf, positive X achse nach rechts, positive Y achse zu uns, positive Z achse nach oben)

	    glTexCoord2f(0, 0);
	    glVertex3f( b+d, b+e,-b+f); // RECHTS UNTEN
	    glTexCoord2f(1, 0);
	    glVertex3f(-b+d, b+e,-b+f); // LINKS UNTEN
	    glTexCoord2f(1, 1);
	    glVertex3f(-b+d, b+e, b+f); // LINKS OBEN
	    glTexCoord2f(0, 1);
	    glVertex3f( b+d, b+e, b+f); // RECHTS OBEN (der hat gefehlt)
	    // (Im Uhrzeigersinn.)

	    //LINKS (wir schauen von links drauf, positive X achse von uns weg, positive Y achse nach oben, positive Z achse nach links)

	    glTexCoord2f(0, 0);
	    glVertex3f( -b+d, b+e, b+f); // LINKS OBEN
	    glTexCoord2f(1, 0);
	    glVertex3f( -b+d, b+e,-b+f); // RECHTS OBEN
	    glTexCoord2f(1, 1);
	    glVertex3f( -b+d,-b+e,-b+f); // RECHTS UNTEN
	    glTexCoord2f(0, 1);
	    glVertex3f( -b+d,-b+e, b+f); // LINKS UNTEN
	    // (Im Uhrzeigersinn.)

	    //UNTEN (wir schauen von unten drauf, positive X achse nach rechts, positive Y achse von uns weg, positive Z achse nach unten)

	    glTexCoord2f(0, 0);
	    glVertex3f( b+d,-b+e, b+f); // RECHTS UNTEN
	    glTexCoord2f(1, 0);
	    glVertex3f( b+d,-b+e,-b+f); // RECHTS OBEN
	    glTexCoord2f(1, 1);
	    glVertex3f(-b+d,-b+e,-b+f); // LINKS OBEN
	    glTexCoord2f(0, 1);
	    glVertex3f(-b+d,-b+e, b+f); // LINKS UNTEN
	    // (Gegen den Uhrzeigersinn.)

	    //RECHTS (wir schauen von rechts drauf, positive X achse zu uns, positive Y achse nach oben, positive Z achse nach rechts)
	
	    glTexCoord2f(0, 0);
	    glVertex3f( b+d,-b+e, b+f); // RECHTS UNTEN
	    glTexCoord2f(1, 0);
	    glVertex3f( b+d,-b+e,-b+f); // LINKS UNTEN
	    glTexCoord2f(1, 1);
	    glVertex3f( b+d, b+e,-b+f); // LINKS OBEN
	    glTexCoord2f(0, 1);
	    glVertex3f( b+d, b+e, b+f); // RECHTS OBEN
	    // (Im Uhrzeigersinn.)

	    glEnd();
	}
```

Ja das was dabei raus kommt ist im Anhang verlinkt
Als OpenGL einstellungen hab ich folgende definiert;

```
glClear(GL_COLOR_BUFFER_BIT);
			glClear(GL_DEPTH_BUFFER_BIT);
			/* Set ortographic projection */
			
		    glEnable(GL_BLEND);
		    glEnable(GL_TEXTURE_2D);
			glShadeModel(GL_SMOOTH);
			glClearColor(0f, 0f, 0f, 0f);
			glClearDepth(1.0);
			glDepthFunc(GL_LEQUAL);
			glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
			glMatrixMode(GL_PROJECTION);
			glLoadIdentity();
			gluPerspective(90f, Display.getWidth()/Display.getHeight(), 0f, 100f);
```

Könnt ihr mir sagen wo mein Fehler liegt?
Danke!


----------



## Androbin (12. Apr 2015)

So wie ich das sehe, sollte es wieder gehen, wenn du die Methode Quadrat (nach Java-Conventions sind Methodennamen klein zu schreiben) in eine neue Matrix packst:

```
glPushMatrix();

/* ... */

glPopMatrix();
```


----------



## der Erzeuger (12. Apr 2015)

hab ich gemacht, hat sich nichts geändert


----------



## der Erzeuger (12. Apr 2015)

ja ich hab den fehler gefunden. Ich muss die //VORNE funktion ganz ans ende hängen dass sie alles üperlappend gemalt wird


----------



## der Erzeuger (12. Apr 2015)

Ok ich hab noch ne Frage: wie mach ich, dass immer die forderen Seiten (also die die man sieht) überlappend sind?


----------



## der Erzeuger (13. Apr 2015)

Sieht so aus (Bild im Anhang) wie mach ichs richtig??


----------



## Androbin (16. Apr 2015)

der Erzeuger hat gesagt.:


> Sieht so aus (Bild im Anhang) wie mach ich's richtig??


Kann es sein, dass du vergessen hast, nach jedem neuen Frame zu resetten?

```
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
```


----------



## der Erzeuger (19. Apr 2015)

hab ich gemacht, natürlich. ich glaube das Problem liegt daran, dass ja immer die Seite, die als letztes gezeichnet wird, vorne zu sehebn ist. Und dadurch dass ich ein (nicht funktionierendes => siehe andere Frage von mir) Umsehen und ein (funktionierendes) Laufen eingebunden habe und die Funktion ja bleibt. Mein Denkansatz wäre gewesen, in die Funktion, als Parameter, ein paar boolean Vars zu übermitteln um die Sichtposition und damit die Reihenfolge der Zeichnungen auszulesen. Aber vllt. fällt Ihnen da etwas besseres ein.


----------

