4,499
社区成员




//放大或缩小图像,x, y为鼠标点击时的坐标,由mouse()函数获得,sca为放大或缩小比例,>1为放大
void zoom(int x, int y, GLfloat sca)
{
glScalef(sca, sca, 1.0);
//尝试1
//glMatrixMode(GL_PROJECTION);
//glLoadIdentity();
//gluLookAt(x, y, 1, x, y, 0, 0, 1, 0);
//glMatrixMode(GL_MODELVIEW);
//glLoadIdentity();
//尝试2
//glTranslated(x, y, 0);
}
//已用glutMouseFunc()指定为鼠标消息处理函数
void mouse(int button, int state, int x, int y)
{
const GLfloat sca = 2.0;
switch (button)
{
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
{
zoom(x, y, sca); //调用放大缩小函数
}
glutPostRedisplay();
break;
default:
break;
}
return;
}
const int MaxX = 640; //横坐标大小
const int MaxY = 480; //纵坐标大小
//已用glutReshapeFunc()指定为重绘函数
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-MaxX/2, MaxX/2, -MaxY/2, MaxY/2); //设定原点为中央
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}