OpenGL изменяет размеры текстуры / Quad - PullRequest
0 голосов
/ 16 марта 2012

Я реализую просмотрщик панорамирования / масштабирования для JPEG.Я показываю одно изображение за раз, сопоставленное с текстурой, а затем при нажатии клавиши переключаюсь между изображениями.

Моя проблема в том, что, хотя изображение меняется, размер четырехугольника фиксируется по ширине и высоте.первого изображения загружено и не обновляется.Вот код для рисования четырехугольника и т.д.:

обратите внимание, что ROI_WIDTH и ROI_HEIGHT являются глобальными переменными, которые обновляются успешно каждый раз при загрузке нового изображения, однако это не отражается в выводе:

void orthogonalStart (void) {
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(0, ROI_WIDTH, 0, ROI_HEIGHT);
    glScalef(1, -1, 1);
    glTranslatef(0, -ROI_HEIGHT, 0);
    glMatrixMode(GL_MODELVIEW);
}

void orthogonalEnd (void) {
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
}


void display (void) {
    glClearColor (1.0,1.0,1.0,0.0);
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    orthogonalStart();

    glEnable( GL_TEXTURE_2D );
    glEnable( GL_DEPTH_TEST );
    glDepthFunc(GL_LESS);

    glBindTexture( GL_TEXTURE_2D, texture );
    glRotatef(180.0, 250.0f, 250.0f, 0.0f);

    glBegin(GL_QUADS);
    glTexCoord2i(0,0); glVertex2f(0, 0);
    glTexCoord2i(1,0); glVertex2f(0, ROI_WIDTH);
    glTexCoord2i(1,1); glVertex2f(ROI_HEIGHT, ROI_WIDTH);
    glTexCoord2i(0,1); glVertex2f(ROI_HEIGHT, 0);
    glEnd();


    orthogonalEnd();
    zoomFac();
    glViewport (xView, yView, (GLsizei)(winx*zoomFactor), (GLsizei)(winy*zoomFactor));
    glutSwapBuffers();
}

1 Ответ

1 голос
/ 16 марта 2012

Ваш вызов gluOrtho2D() говорит OpenGL, что ширина и высота вашего вывода всегда равны ROI_WIDTH единицам ROI_HEIGHT.Таким образом, ваш квад всегда будет охватывать всю область вывода.Вам, вероятно, следует установить ширину и высоту в gluOrtho2D() равными ширине и высоте пикселя вашей области вывода (вашего окна, или представления, или экрана, в зависимости от того, как вы их настроили).

...