2012-03-27 13 views
2

Die Ausgabe meines Schriftprogramms ist verzerrt. Ich bin mir ziemlich sicher, dass das Problem mit x und y zu tun hat, und wie printLetter() sie benutzt. Es wird möglicherweise mit mehreren Zahlen für x und y verwirrt? Bitte lassen Sie mich wissen, wenn Sie zusätzlichen Code benötigen. 'findCoords' wird von innerhalb der Gameloop aufgerufen.Mein ursprüngliches Java Font-Programm - Bei Verwendung verschiedener Buchstaben verzerrt?

Zusätzliche Hintergrundinfo:

Es nutzt LWJGL und seine OpenGL. Die und +0.25 in printLetter() ist, wie groß jede Kachel im Hauptbild ist (das Hauptbild, das jeden der Buchstaben enthält, ist 78 * 24, und jeder Buchstabe ist 6 * 6.), proportional zu 1 und xcoords [] und ycoords [] Arrays von doubles: xcoords [] enthält 0/13, 1/13, 2/13, 3/13 usw. und ycoords [] enthält 0/4, 1/4, 2/4, 3/4 , für glTexCoord muss im Verhältnis zu 1 sein. Hier ist ein Bild des Bildes, das es die Texturkoordinaten nimmt.

public void findCoords(String chars){ 
    int numChars = chars.length(); 
    for(int z = 0; z < numChars; z++){ 

     char ch = chars.charAt(z); 
     int x; 
     int y; 

     switch(ch){ 
    //LETTERS 
     case 'A': x= 0; y= 0; break; case 'N': x= 0; y= 1; break; 
     case 'B': x= 1; y= 0; break; case 'O': x= 1; y= 1; break; 
     case 'C': x= 2; y= 0; break; case 'P': x= 2; y= 1; break; 
     case 'D': x= 3; y= 0; break; case 'Q': x= 3; y= 1; break; 
     case 'E': x= 4; y= 0; break; case 'R': x= 4; y= 1; break; 
     case 'F': x= 5; y= 0; break; case 'S': x= 5; y= 1; break; 
     case 'G': x= 6; y= 0; break; case 'T': x= 6; y= 1; break; 
     case 'H': x= 7; y= 0; break; case 'U': x= 7; y= 1; break; 
     case 'I': x= 8; y= 0; break; case 'V': x= 8; y= 1; break; 
     case 'J': x= 9; y= 0; break; case 'W': x= 9; y= 1; break; 
     case 'K': x= 10; y= 0; break; case 'X': x= 10; y= 1; break; 
     case 'L': x= 11; y= 0; break; case 'Y': x= 11; y= 1; break; 
     case 'M': x= 12; y= 0; break; case 'Z': x= 12; y= 1; break; 
    //NUMBERS 
     case '0': x= 0; y= 2; break; case '5': x= 5; y= 2; break; 
     case '1': x= 1; y= 2; break; case '6': x= 6; y= 2; break; 
     case '2': x= 2; y= 2; break; case '7': x= 7; y= 2; break; 
     case '3': x= 3; y= 2; break; case '8': x= 8; y= 2; break; 
     case '4': x= 4; y= 2; break; case '9': x= 9; y= 2; break; 
    //PUNCTUATION 
     case '.': x= 10; y= 2; break; case '!': x= 12; y= 2; break; 
     case ',': x= 11; y= 2; break; 

     case '?': x= 0; y= 3; break; case '"': x= 2; y= 3; break; 
     case ':': x= 1; y= 3; break; case ' ': x= 3; y= 3; break; 

     default: x= 0; y= 3; 
      } 

      int offs = scale*z; 
      printLetter(x, y, offs); 

     } 
    } 

.

void printLetter(int x, int y, int offs){ 
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture); 
    GL11.glBegin(GL11.GL_QUADS); 

    GL11.glVertex2f(0+offs, scale); 
    GL11.glTexCoord2d(xcoords[x]+0.0769, ycoords[y]+0.25); 

    GL11.glVertex2f(scale+offs, scale); 
    GL11.glTexCoord2d(xcoords[x]+0.0769, ycoords[y]); 

    GL11.glVertex2f(scale+offs, 0); 
    GL11.glTexCoord2d(xcoords[x], ycoords[y]); 

    GL11.glVertex2f(0+offs, 0); 
    GL11.glTexCoord2d(xcoords[x], ycoords[y]+0.25); 

    GL11.glEnd(); 
    GL11.glFlush(); 
} 

Wenn chars ein einzelner Buchstabe wiederholt wird, wie "AAAAA" oder "BBBBBB", dann gibt es keine Probleme IWHT das Bild. http://i.imgur.com/MFs5A.png. Wenn es jedoch mehrere Buchstaben in chars wie "AAABBB" oder "ABABAB" gibt, werden die Buchstaben schief. Das folgende Bild ist, wie die Ausgabe aussieht, wenn chars ist

"AAABBB" 

enter image description here


Vor nannten die Fälle sich die Druckverfahren mit zum Beispiel

case 'A': printLetter(xcoord[0], ycoord[0], z) 

ich es geändert wie es jetzt ist, vielleicht das Programm nicht so durcheinander zu bringen. Hoffentlich, auch wenn es das Problem nicht behebt, machte es das ein wenig einfacher zu beheben?

Das Problem kann sein, weil verschiedene Buchstaben unterschiedliche Koordinaten haben und das ist der Weg verpfuscht printLetter() funktioniert? Es ist nicht in den Fällen, weil ich getestet habe machen zwei Buchstaben (A und F) haben die gleiche x und y, und machte chars "AFAFAF", und es gab keine Probleme.

Es scheint auch, je weiter die Buchstaben auseinander sind, desto mehr vermasselt erscheinen sie. Vergleichen Sie diese "AAAZZZ" auf die oben "AAABBB":

enter image description here

Antwort

2
GL11.glVertex2f(0+offs, scale); 
GL11.glTexCoord2d(xcoords[x]+0.0769, ycoords[y]+0.25); 

GL11.glVertex2f(scale+offs, scale); 
GL11.glTexCoord2d(xcoords[x]+0.0769, ycoords[y]); 

GL11.glVertex2f(scale+offs, 0); 
GL11.glTexCoord2d(xcoords[x], ycoords[y]); 

GL11.glVertex2f(0+offs, 0); 
GL11.glTexCoord2d(xcoords[x], ycoords[y]+0.25); 

Diese Anrufe nach hinten sind. Sie sollten glTexCoord vor glVertex anrufen, nicht nach. glVertex Aufruf beendet den Scheitelpunkt und sendet ihn zum Zeichnen, so dass jeder Texkoord mit dem nächsten Scheitelpunkt statt dem gewünschten Knoten verknüpft wird.

+0

Ich werde das versuchen, wenn ich zurückkomme. Ist das eine Lösung für das Problem oder nur ein Fehler, den ich gemacht habe? – GlassZee

+1

@GlassZee Ich bin sicher, dass dies Ihr Problem verursacht, das Ergebnis sieht genau so aus, wie ich es angesichts des Fehlers erwarten würde. – Tim

+0

Es hat funktioniert! :] und als Beweis ... http://i.imgur.com/TJLWI.png – GlassZee

Verwandte Themen