Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why isn't this a square? LWJGL

Tags:

java

lwjgl

I have a basic LWJGL window set up and I am trying to draw a square using the glBegin(GL_QUADS) method. Square square = new Square(25, 25, 25), is the way I am calling my Square class to draw the square... but it is a rectangle. When I call it I pass in all 25's as the parameters. the first two are the starting coordinates and the last 25 is the side length, as seen below. What am I doing wrong to produce a rectangle?

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();
}

My Viewport code

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); // Resets any previous projection matrices
    glOrtho(0, 640, 0, 480, 1, -1);
    glMatrixMode(GL_MODELVIEW);
like image 887
Alarmed Dino Avatar asked Mar 07 '16 22:03

Alarmed Dino


1 Answers

Using glOrtho(0, 640, 0, 480, 1, -1); constructs a non-square viewport. That means that the rendered output is more than likely going to be skewed if your window is not the same size as your viewport (or at least the same aspect ratio).

Consider the following comparison:

ortho comparison

If your viewport is the same size as your window, then it should remain square. I'm using JOGL, but in my resize function, I reshape my viewport to be the new size of my window.

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

}
like image 165
zero298 Avatar answered Nov 14 '22 22:11

zero298