Hallo,
ich hab ein für mich unerklärliches Problem beim Zeichnen von Quads mit Texturen. Ich komm leider auch mit Google nicht weiter, da ich nicht weiß wonach ich hier suchen sollte. Mein Post ist etwas lang geworden, obwohl ich versucht habe nur das wesentliche zusammenzusfassen.
Mein Ziel:
Ich möchte mithilfe einer Font-Textur Text auf den Bildschirm ausgeben. Die Textur sieht so aus:
Eine Funktion liefert mir ein Rechteck bestehend aus floats (x1, y1, x2, y2), das den Koordinaten des jeweiligen Buchstaben entspricht (z.B. getRect(0) = {0.0f, 0.0f, 0.2f, 0.08333f} für das 'A').
Diesen Texturausschnitt zeichne ich jetzt mit einem Quad auf den Bildschirm.
Wenn ich ein 'A' zeichne:
funktioniert das wunderbar. Hier ist ein Screenshot meines Fensters und unten mein Code.
Wenn ich ein 'B' zeichne:
Auch für das 'B' klappt es problemlos.
Mein Problem:
Auch wenn ich mehrere 'A' oder mehrere 'B' oder jeden beliebigen anderen Buchstaben mehrmals irgendwohin auf den Bildschirm zeichne, klappt alles einwandfrei. Das Problem tritt jetzt auf, sobald ich zwei verschiedene Buchstaben zeichnen will. Ich verwende dabei exakt den gleichen Code wie oben, nur beide Aufrufe kombiniert in einem Methodenaufruf.
Das Ergebnis ist jetzt auf einmal:
Ich verwende dabei die gleichen Koordinaten für die Textur wie oben (wo es geklappt hat).
Kann sich das vielleicht jemand erklären und mir einen Tipp geben, was ich falsch mache?
Vielen herzlichen Dank für eure Hilfe und eure Zeit!
Gruß und schönen Sonntag,
Xoric
ich hab ein für mich unerklärliches Problem beim Zeichnen von Quads mit Texturen. Ich komm leider auch mit Google nicht weiter, da ich nicht weiß wonach ich hier suchen sollte. Mein Post ist etwas lang geworden, obwohl ich versucht habe nur das wesentliche zusammenzusfassen.
Mein Ziel:
Ich möchte mithilfe einer Font-Textur Text auf den Bildschirm ausgeben. Die Textur sieht so aus:
Eine Funktion liefert mir ein Rechteck bestehend aus floats (x1, y1, x2, y2), das den Koordinaten des jeweiligen Buchstaben entspricht (z.B. getRect(0) = {0.0f, 0.0f, 0.2f, 0.08333f} für das 'A').
Diesen Texturausschnitt zeichne ich jetzt mit einem Quad auf den Bildschirm.
Wenn ich ein 'A' zeichne:
funktioniert das wunderbar. Hier ist ein Screenshot meines Fensters und unten mein Code.
Java:
public void init(GLAutoDrawable drawable)
{
// enable textures
GL2 gl = drawable.getGL().getGL2();
gl.glEnable(GL.GL_TEXTURE_2D);
// Orthographic projection mode for 2D (Resolution 640x480)
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0, 640, 480, 0, 0, 1);
}
public void display(GLAutoDrawable drawable)
{
GL2 gl = drawable.getGL().getGL2();
fontTexture().bind();
// Zeichne ein 'A'
FloatRect posA = new FloatRect(100.0f, 100.0f, 150.0f, 150.0f); // Position für das Quad auf dem Fenster (x1, y1, x2, y2)
FloatRect texA = new FloatRect(0.0f, 0.0f, 0.2f, 0.08333f); // Texturkoordinaten für das 'A'
gl.glBegin(GL2.GL_QUADS);
{
gl.glVertex3f(posA.x1, posA.y1, 0.0f);
gl.glTexCoord2f(texA.x2, texA.y1);
gl.glVertex3f(posA.x2, posA.y1, 0.0f);
gl.glTexCoord2f(texA.x2, texA.y2);
gl.glVertex3f(posA.x2, posA.y2, 0.0f);
gl.glTexCoord2f(texA.x1, texA.y2);
gl.glVertex3f(posA.x1, posA.y2, 0.0f);
gl.glTexCoord2f(texA.x1, texA.y1);
}
gl.glEnd();
}
Wenn ich ein 'B' zeichne:
Auch für das 'B' klappt es problemlos.
Java:
public void display(GLAutoDrawable drawable)
{
GL2 gl = drawable.getGL().getGL2();
fontTexture().bind();
// Zeichne ein 'B'
FloatRect posB = new FloatRect(200.0f, 100.0f, 250.0f, 150.0f); // Position für das Quad auf dem Fenster
FloatRect texB = new FloatRect(0.2f, 0.0f, 0.4f, 0.08333f); // Texturkoordinaten für das 'B'
gl.glBegin(GL2.GL_QUADS);
{
gl.glVertex3f(posB.x1, posB.y1, 0.0f);
gl.glTexCoord2f(texB.x2, texB.y1);
gl.glVertex3f(posB.x2, posB.y1, 0.0f);
gl.glTexCoord2f(texB.x2, texB.y2);
gl.glVertex3f(posB.x2, posB.y2, 0.0f);
gl.glTexCoord2f(texB.x1, texB.y2);
gl.glVertex3f(posB.x1, posB.y2, 0.0f);
gl.glTexCoord2f(texB.x1, texB.y1);
}
gl.glEnd();
}
Mein Problem:
Auch wenn ich mehrere 'A' oder mehrere 'B' oder jeden beliebigen anderen Buchstaben mehrmals irgendwohin auf den Bildschirm zeichne, klappt alles einwandfrei. Das Problem tritt jetzt auf, sobald ich zwei verschiedene Buchstaben zeichnen will. Ich verwende dabei exakt den gleichen Code wie oben, nur beide Aufrufe kombiniert in einem Methodenaufruf.
Java:
public void display(GLAutoDrawable drawable)
{
GL2 gl = drawable.getGL().getGL2();
fontTexture().bind();
// Zeichne zuerst ein 'A'
FloatRect posA = new FloatRect(100.0f, 100.0f, 150.0f, 150.0f); // Position für das Quad auf dem Fenster
FloatRect texA = new FloatRect(0.0f, 0.0f, 0.2f, 0.08333f); // Texturkoordinaten für das 'A'
gl.glBegin(GL2.GL_QUADS);
{
gl.glVertex3f(posA.x1, posA.y1, 0.0f);
gl.glTexCoord2f(texA.x2, texA.y1);
gl.glVertex3f(posA.x2, posA.y1, 0.0f);
gl.glTexCoord2f(texA.x2, texA.y2);
gl.glVertex3f(posA.x2, posA.y2, 0.0f);
gl.glTexCoord2f(texA.x1, texA.y2);
gl.glVertex3f(posA.x1, posA.y2, 0.0f);
gl.glTexCoord2f(texA.x1, texA.y1);
}
gl.glEnd();
// Zeichne ein 'B'
FloatRect posB = new FloatRect(200.0f, 100.0f, 250.0f, 150.0f); // Position für das Quad auf dem Fenster
FloatRect texB = new FloatRect(0.2f, 0.0f, 0.4f, 0.08333f); // Texturkoordinaten für das 'B'
gl.glBegin(GL2.GL_QUADS);
{
gl.glVertex3f(posB.x1, posB.y1, 0.0f);
gl.glTexCoord2f(texB.x2, texB.y1);
gl.glVertex3f(posB.x2, posB.y1, 0.0f);
gl.glTexCoord2f(texB.x2, texB.y2);
gl.glVertex3f(posB.x2, posB.y2, 0.0f);
gl.glTexCoord2f(texB.x1, texB.y2);
gl.glVertex3f(posB.x1, posB.y2, 0.0f);
gl.glTexCoord2f(texB.x1, texB.y1);
}
gl.glEnd();
}
Das Ergebnis ist jetzt auf einmal:
Ich verwende dabei die gleichen Koordinaten für die Textur wie oben (wo es geklappt hat).
Kann sich das vielleicht jemand erklären und mir einen Tipp geben, was ich falsch mache?
Vielen herzlichen Dank für eure Hilfe und eure Zeit!
Gruß und schönen Sonntag,
Xoric
Zuletzt bearbeitet: