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