2016-03-07 5 views
7

Ich habe ein einfaches LWJGL-Fenster eingerichtet und ich versuche, ein Quadrat mit der Methode glBegin(GL_QUADS) zu zeichnen. Square square = new Square(25, 25, 25), so nenne ich meine Square-Klasse, um das Quadrat zu zeichnen ... aber es ist ein Rechteck. Wenn ich es anrufe, gebe ich alle 25 als Parameter ein. die ersten beiden sind die Startkoordinaten und die letzten 25 sind die Seitenlänge, wie unten zu sehen ist. Was mache ich falsch, um ein Rechteck zu erzeugen?Warum ist das nicht ein Quadrat? LWJGL

public Square(float x,float y,float sl) { 
    GL11.glColor3f(0.5F, 0.0F, 0.7F); 
    glBegin(GL11.GL_QUADS); 
     glVertex2f(x, y); 
     glVertex2f(x, y+sl); 
     glVertex2f(x+sl, y+sl); 
     glVertex2f(x+sl, y); 
    glEnd(); 
} 

Mein Ansichtsfenster Code

glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); // Resets any previous projection matrices 
    glOrtho(0, 640, 0, 480, 1, -1); 
    glMatrixMode(GL_MODELVIEW); 
+1

Können Sie zeigen Ihre Ansichtsfenster-Code? – zero298

+0

Ich habe den Code geschrieben, danke für die Zeit zu versuchen und zu helfen –

+0

Wie auch immer, sollten Sie nicht veraltete OpenGL verwenden – elect

Antwort

8

glOrtho(0, 640, 0, 480, 1, -1); Verwendung konstruiert ein nicht-Quadrat-Ansichtsfenster. Das bedeutet, dass die gerenderte Ausgabe sehr wahrscheinlich verzerrt wird, wenn Ihr Fenster nicht dieselbe Größe wie Ihr Ansichtsfenster hat (oder mindestens das gleiche Seitenverhältnis).

Betrachten Sie den folgenden Vergleich:

ortho comparison

Wenn Ihr Ansichtsfenster die gleiche Größe wie das Fenster ist, dann sollte es Platz bleiben. Ich benutze JOGL, aber in meiner Größenänderungsfunktion, ich verforme mein Ansichtsfenster, um die neue Größe meines Fensters zu sein.

Viewport as window size

glcanvas.addGLEventListener(new GLEventListener() { 
    @Override 
    public void reshape(GLAutoDrawable glautodrawable, int x, int y, int width, int height) { 
     GL2 gl = glautodrawable.getGL().getGL2(); 

     gl.glMatrixMode(GL2.GL_PROJECTION); 
     gl.glLoadIdentity(); // Resets any previous projection matrices 
     gl.glOrtho(0, width, 0, height, 1, -1); 
     gl.glMatrixMode(GL2.GL_MODELVIEW); 
    } 

    ... Other methods 

} 
+0

Vielen Dank! Ihre Erklärung ist sehr gut und ich konnte ein Quadrat anstelle eines Rechtecks ​​machen. –