请问在OpenGL中如何放大或缩小图像并把指定坐标设置为原点?

zwdnet 2009-02-09 09:24:33
我用OpenGL写分形程序,想增加一个功能,即鼠标左键单击图像某一点,图像即按照一定的比例放大,并且在放大后的图形显示里其坐标原点就是我鼠标单击的那一点(就是说我鼠标单击的那一点的图像在放大后的成为新图像的原点),但是我写的结果是可以放大了,但是单击几次后图形就移出屏幕了,我试了好几种方法,要么无效,要么根本就不出画面。请大家帮忙看看有没有什么好办法?谢谢!程序片段如下:

//放大或缩小图像,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();
}
...全文
1121 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
iipumpkin 2012-03-02
  • 打赏
  • 举报
回复
OH MY GOD 我刚好需要和你相反的功能。。。不想让它固定在中心原点
zyl_bulbul 2011-06-06
  • 打赏
  • 举报
回复
先把图形移至原点,缩放之后,在移回去?

4,499

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧