2016-09-13 1 views
0

So mache ich ein 3D-Spiel und ich arbeite gerade an 2D auf 3D, aber es gibt nur ein Problem, bevor ich damit fertig bin und das ist: Ich kann keine 2D-Quads zeichnen, nachdem ich einen Text gezeichnet habe? Hier ist der Renderer Code:Kann man nach dem Zeichnen von Text keine Quads zeichnen?

changeto2D(); 
    for (Face2D face : tds){ 
     face.initializeEdges(); 
     GL11.glBegin(GL11.GL_QUADS); 
     GL11.glColor4f(face.c.red, face.c.green, face.c.blue, (float) Math.sin(Math.toRadians(face.transparency))); 
     for (Location l : face.edges){ 
      GL11.glVertex2f(l.x, l.y); 
     } 
     GL11.glEnd(); 
    } 
    for (Text t : texts){ 
     t.draw(); 
    } 
    fps++; 
    for (GUI gui : openGUIs){ 
     gui.draw(); 
    } 
    for (GUI gui : removing){ 
     if (openGUIs.contains(gui)) openGUIs.remove(gui); 
    } 
    removing.clear(); 

Dies ist der Code für changeTo2D();:

public void changeto2D() { 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, Display.getWidth(), Display.getHeight(), 0, 1, -1); 
    glMatrixMode(GL_MODELVIEW); 
    GL11.glViewport(0, 0, Display.getDisplayMode().getWidth(), Display.getDisplayMode().getHeight()); 
} 

Und einen Text zu zeichnen:

public Text(Location loc, String text, float size, Color color){ 
    try { 
     InputStream inputStream = ResourceLoader.getResourceAsStream("res\\AGENCYR.TTF"); 

     Font awtFont2 = Font.createFont(Font.TRUETYPE_FONT, inputStream); 
     awtFont2 = awtFont2.deriveFont(size); 
     font = new TrueTypeFont(awtFont2, false); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    c = new org.newdawn.slick.Color(color.red, color.green, color.blue); 
    this.loc = loc; 
    this.text = text; 
    this.size = size; 
} 
public void draw(){ 
    font.drawString(loc.x, loc.y, text, c); 
    if (td != null){ 
     td.draw(); 
    } 
} 

Und jetzt hier ist, was mein Problem ist: Ich möchte eine GUI machen, die ein Quad enthält, aber es wird nicht zeichnen, auch wenn die anderen Quads vollkommen in Ordnung sind. Ich habe auch versucht, den Code für alle Quads nach dem Zeichnen von Text ihnen die Quads überhaupt nicht zu zeichnen.

+0

Zeigen Sie den Rest der Methoden wie die GUI Einsen und vor allem alle Zeichnungen –

+0

Sie sollten nicht [veraltet OpenGL] (https://www.opengl.org/wiki/Legacy_OpenGL) verwenden – elect

+0

Kannst du nicht * überall zeichnen * oder nur auf (gut, hinter) der Position, wo Sie Text gezeichnet haben? Wenn dies der Fall ist, verwirren die transparenten Rechtecke des Textes den z-Puffer. Versuchen Sie, vor dem Zeichnen von Text z-Puffer zu deaktivieren - und aktivieren Sie anschließend. – usr2564301

Antwort

1

Ich reparierte es, machte mich selbst eine andere Rendering-Technik. Alle Quads zuerst und die Texte am Ende zeichnen.