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)
Meine Frage ist jetzt, ob ich einen Fehler in meiner Schleife, oder in der OpenGL initialisierung gemacht habe.
Gruß und Dank,
Luca aka Atlan
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