OpenGL 2D изменение размера

Мое происхождение не в верхнем левом углу, когда я изменяю размер окна. И 2d-координаты не в координатах пикселей:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
rnd::initDraw();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, mainPanelx, mainPanely, 0.0, -1.0, 10.0);
glMatrixMode(GL_MODELVIEW);
//glPushMatrix();        ----Not sure if I need this
glLoadIdentity();
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glClear(GL_DEPTH_BUFFER_BIT);

glBegin(GL_QUADS);
    glColor3f(1.0f, 0.0f, 0.0);
    glVertex2f(0.0, 0.0);
    glVertex2f(10.0, 0.0);
    glVertex2f(10.0, 10.0);
    glVertex2f(0.0, 10.0);
glEnd();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glutSwapBuffers();

Функция изменения размера:

void resize(int width, int height)
{
if (height == 0) height = 1;

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

/* note we divide our width by our height to get the aspect ratio */
gluPerspective(45.0, width / height, 1.0, 400.0);
glMatrixMode(GL_MODELVIEW);
mainPanelx = width;
mainPanely = height;
std::cout<<mainPanelx<<", "<<mainPanely<<"\n";
}

Как мне получить исходную константу в верхнем левом углу моего окна и как получить 2d-координаты в пиксельных координатах?


person float    schedule 04.11.2013    source источник
comment
Какой у Вас вопрос?   -  person Nobody moving away from SE    schedule 04.11.2013
comment
Ваша функция изменения размера, вероятно, должна вызывать glViewport(0, 0, width, height).   -  person Nobody moving away from SE    schedule 04.11.2013


Ответы (1)


Вы забыли вызвать glViewport в своей функции изменения размера.

Это означает, что OpenGL по-прежнему будет отображать окно просмотра старого размера.

person Nobody moving away from SE    schedule 04.11.2013