# LwJGL - Animation Stockt



## AtlanTK (8. Okt 2013)

Hi,
ich habe eine simple Durchlaufanimation für Nebel in LwJGL geschrieben, die ohne jede Probleme laufen sollte. Die Textur wird so oft hintereinander geprinted, bis das Ende des Displays erreicht ist.

Stattdessen werden ca. alle 10 Sekunden für etwa 40 Pixel keine Grafiken dargestellt.




Der Fehler ist mit dem gegebenen Code problemlos reproduzierbar.
(Das im Bild zu sehende Flippen der Textur bei jedem zweiten printen habe ich aus Übersichtlichkeits-Gründen entfernt)



Spoiler: OpenGL Initialisierung





```
Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));

			Display.setVSyncEnabled(true);

			Display.setTitle(windowTitle);

			Display.create();

			
			glDisable(GL_DEPTH_TEST);
			
			glEnable(GL_TEXTURE_2D);
			glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

			glEnable(GL_BLEND);
			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

			glViewport(0, 0, Display.getWidth(), Display.getHeight());
			glMatrixMode(GL_MODELVIEW);

			glMatrixMode(GL_PROJECTION);
			glLoadIdentity();
			glOrtho(0, Display.getWidth(), Display.getHeight(), 0, -1, 1);
			glMatrixMode(GL_MODELVIEW);
```







Spoiler: Draw-Schleife





```
Texture t = null;
		try {
			t = (TextureLoader.getTexture("png",
					ResourceLoader.getResourceAsStream("D:\\fog.png")));
		} catch (IOException e) {}

			
		double firstTexturePosition = 0;
		double pixelsPerMilliSec = 0.4d;
		
		long deltaTime = 0;
		long cycleStartTime = System.currentTimeMillis();
		
		while (Display.isCloseRequested() == false) {
			
			deltaTime = System.currentTimeMillis() - cycleStartTime;
			cycleStartTime = System.currentTimeMillis();
			

			double pixelMovement = (deltaTime * pixelsPerMilliSec);


			firstTexturePosition -= pixelMovement;
			if (firstTexturePosition < -(t.getImageWidth())) {
				firstTexturePosition = 0;
			}

				glClear(GL_COLOR_BUFFER_BIT);
				
				t.bind();

				double tmpPos = firstTexturePosition;

				while (tmpPos < WIDTH) {

					glBegin(GL_QUADS);
						glTexCoord2f(0, 0);
						glVertex2d(tmpPos, 0);
						glTexCoord2f(1, 0);
						glVertex2d(tmpPos + t.getImageWidth(), 0);
						glTexCoord2f(1, 1);
						glVertex2d(tmpPos + t.getImageWidth(), t.getImageHeight());
						glTexCoord2f(0, 1);
						glVertex2d(tmpPos, t.getImageHeight());
					glEnd();

					tmpPos += t.getImageWidth();
				}

			Display.update();
			Display.sync(60);

		}
```




Meine Frage ist jetzt, ob ich einen Fehler in meiner Schleife, oder in der OpenGL initialisierung gemacht habe.
Gruß und Dank,
Luca aka Atlan


----------



## AtlanTK (29. Okt 2013)

push


----------



## BuddaKaeks (4. Nov 2013)

Also, dass muss schonmal so heißen:


```
if (firstTexturePosition < -(t.getImageWidth())) {
                firstTexturePosition = 0;
            }
```
wird zu

```
if (firstTexturePosition < -(t.getImageWidth())) {
                firstTexturePosition += t.getImageWidth();
            }
```

Dann verwende System.nanoTime(); , da System.currentTimeMillis(); auf 20 ms oder so ungemnau ist, dass heißt, wenn deine draw methode 15 ms benötigt, kann es sein, dass deltTime zu 0 wird. (ist ungünstig).

Sonst gib mal ein KSKB


----------



## BuddaKaeks (4. Nov 2013)

sonst  och eine idee: deine textur hat auf einer seite einen schwarzen rand? (fehler beim laden etc.)


----------



## AtlanTK (4. Nov 2013)

Hi und danke.
Werde beides probieren.

//EDIT
Sie sollte eigentlich keinen Rand haben.

//EDIT2
Lade hoch. Entschuldige bitte den Quellcode, ich habe es so einfach wie möglich zusammenprogrammiert. Ist eigentlich aus einem größerem Projekt


----------



## AtlanTK (4. Nov 2013)

So. Hier der Code, eine jar und das Bild. Das Bild muss auf eine D:\ Partition gelegt werden.
Download lwjgl.zip from Sendspace.com - send big files the easy way

//EDIT
Zum Thema falsch laden habe ich hier schon eine Topic auf ^^
Ich dachte aber, dass sein ein anderes Problem: http://www.java-forum.org/spiele-mu...ng/155083-lwjgl-vergroessert-bild-falsch.html

//EDIT2
Die jar funktioniert leider nicht. Lwjgl lib Probleme zu denen ich grade keinen Nerv hab sie zu lösen ^^
Der Quellcode sollte aber so kompilierbar sein.


----------

