我是OpenGL的新手。我遇到了一个问题。为什么我不能立即在OpenGL中放大和缩小效果,但必须首先调整窗口大小,然后我才能看到绘制的图像变小或变大。
我很抱歉,我不应该提供哪一部分程序来澄清这个问题。
我认为问题可能是由鼠标功能引起的?
void glutMouseWheel(int wheel_number, int direction, int x, int y)
{
if (direction == 1)
zoomFactor = 0.5*zoomFactor;
else
zoomFactor = 2* zoomFactor;
glutPostRedisplay();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-0.001*zoomFactor, 0.001*zoomFactor, -0.001*zoomFactor, 0.001*zoomFactor, -100, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
如您所见,我定义了一个双zoomFactor来调整正交音量以缩放图像。它应该没问题,但我不知道为什么我仍然遇到这个问题。
答案 0 :(得分:3)
现在您可以更改zoomFactor
您想要的所有内容,但它不会应用于OpenGL状态(通过resize()
中的代码),直到您调整窗口大小。
glutPostRedisplay()
末尾的glutMouseWheel()
不会 导致glutReshapeFunc()
回调运行。它只安排glutDisplayFunc()
电话。
将除glViewport()
来电之外的所有内容从reshape()
移至您的glutDisplayFunc()
回调:
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
}
void display()
{
// clear framebuffer
...
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-0.001*zoomFactor, 0.001*zoomFactor, -0.001*zoomFactor, 0.001*zoomFactor, -100, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// draw stuff
...
glutSwapBuffers();
}