2016-03-07 25 views
7

Ho una finestra di configurazione LWJGL di base e sto provando a disegnare un quadrato usando il metodo glBegin(GL_QUADS). Square square = new Square(25, 25, 25), è il modo in cui sto chiamando la mia classe Square per disegnare il quadrato ... ma è un rettangolo. Quando lo chiamo, passo tutti i 25 come parametri. le prime due sono le coordinate iniziali e l'ultima 25 è la lunghezza laterale, come visto sotto. Cosa sto facendo male per produrre un rettangolo?Perché non è un quadrato? 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(); 
} 

Il mio codice della vista

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

Potete mostrare il codice di finestra? – zero298

+0

ho postato il codice, grazie per aver dedicato del tempo per provare e aiutare –

+0

In ogni caso, non dovresti usare OpenGL deprecato – elect

risposta

8

Utilizzando glOrtho(0, 640, 0, 480, 1, -1); costruisce una viewport non quadrati. Ciò significa che l'output renderizzato sarà più che probabile che sarà distorto se la tua finestra non ha le stesse dimensioni del tuo viewport (o almeno lo stesso aspect ratio).

Si consideri il seguente paragone:

ortho comparison

Se la finestra è la stessa dimensione come la vostra finestra, allora dovrebbe rimanere quadrato. Sto usando JOGL, ma nella mia funzione di ridimensionamento, ho rimodellato la mia finestra per essere la nuova dimensione della mia finestra.

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

Grazie! La tua spiegazione è molto buona e sono riuscito a creare un quadrato anziché un rettangolo. –