LwJGL - Animation Stockt

AtlanTK

Mitglied
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)

Java:
			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);


Java:
		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
 
Also, dass muss schonmal so heißen:

Java:
 if (firstTexturePosition < -(t.getImageWidth())) {
                firstTexturePosition = 0;
            }
wird zu
Java:
 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
 
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
 
Zuletzt bearbeitet:
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.
 
Zuletzt bearbeitet:

Zurück
Oben