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

zwdnet zwdnet 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用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();
}
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
zwdnet
机器视觉 4,514 成员 15,347 内容