2016-03-07 2 views
7

У меня есть базовое окно LWJGL, и я пытаюсь рисовать квадрат с помощью метода glBegin(GL_QUADS). Square square = new Square(25, 25, 25), так я называю свой квадратный класс рисованием квадрата ... но это прямоугольник. Когда я называю это, я передаю все 25 в качестве параметров. первые два являются начальными координатами, а последние 25 являются длиной стороны, как показано ниже. Что я делаю неправильно, чтобы создать прямоугольник?Почему это не квадрат? 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(); 
} 

Моего Viewport код

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

Можете ли вы показать код видовых? – zero298

+0

Я отправил код, спасибо, что нашел время, чтобы попытаться помочь –

+0

В любом случае, вы не должны использовать устаревший OpenGL – elect

ответ

8

Использование glOrtho(0, 640, 0, 480, 1, -1); строит неквадратное окно просмотра. Это означает, что обработанный вывод более чем вероятно будет искажен, если ваше окно не того же размера, что и ваш видовой экран (или, по крайней мере, одинаковое соотношение сторон).

Рассмотрим следующее сравнение:

ortho comparison

Если видовой экран имеет такой же размер, как окна, то она должна оставаться площадь. Я использую JOGL, но в моей функции изменения размера я изменяю свое окно просмотра как новый размер моего окна.

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

Спасибо! Ваше объяснение очень хорошее, и я смог сделать квадрат вместо прямоугольника. –

Смежные вопросы