请问在OpenGL中如何放大或缩小图像并把指定坐标设置为原点?
我用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();
}
...全文
相关推荐
opengl.rar_opengl 图像放大_opengl 放大_opengl放大缩小
综上所述,OpenGL提供了多种方法来实现图像的放大和缩小。这涉及矩阵操作、着色器编程、纹理坐标调整等多个方面。理解并熟练掌握这些概念和技术,对于开发高性能的图形应用程序至关重要。
ShaderJoy —— 实现“放大镜/缩小镜”【GLSL】
本文参考自:http://www.renjihe.com/index.php/archives/776 放大效果: 缩小效果: 片元着色器代码: const float in_circle_radius = 96.; //从客户端传入的放大镜圆半径 const float in_zoom_times = 2.; ...
opengl旋转 变色 放大缩小
**OBJ文件的使用**: OBJ是一种通用的3D模型格式,包含了顶点、纹理坐标和面定义等信息。在OpenGL中,你可以使用库如`Assimp`或自定义代码来加载并渲染这些模型。
opengl.rar_opengl_opengl 点放大_放大 缩小_纹理填充
在本项目中,用户可以对绘制的网状图进行移动、翻转、缩小或放大。5. 纹理填充: 纹理填充是将图像应用到几何形状表面的过程,增强了图形的真实感。
OpenGL绘制八大行星纹理贴图
**纹理参数设置**:通过`glTexParameter`函数调整纹理参数,如过滤模式(线性过滤或最近点过滤),可以控制纹理在放大或缩小时的显示质量。5.


