我正在为jpegs实现一个平移/缩放查看器。我一次显示一个图像映射到纹理,然后按键,在图像之间交换。
我的问题是虽然图像确实发生了变化,但四边形的大小固定为加载的第一张图像的宽度和高度,并且不会更新。以下是绘制四边形等的代码:
请注意,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();
}
答案 0 :(得分:1)
您对gluOrtho2D()
的来电告诉OpenGL输出的宽度和高度始终为ROI_HEID单位的ROI_WIDTH。所以你的四边形总是会覆盖整个输出区域。您应该将gluOrtho2D()
中的宽度和高度设置为输出区域的像素宽度和高度(您的窗口,视图或屏幕,具体取决于您的设置方式)。