opengl利用键盘回调函数实现二维图形的几何变换源代码
时间: 2023-06-30 19:11:49 浏览: 95
opengl几何变换
好的,以下是一个简单的OpenGL程序,它可以通过键盘回调函数实现二维图形的平移、旋转和缩放变换。这个程序使用了GLUT库,你需要先安装GLUT库才能运行它。
```c++
#include <GL/glut.h> // GLUT库
#include <stdio.h>
// 窗口大小
const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
// 二维图形的位置和大小
GLfloat x = -0.5f;
GLfloat y = -0.5f;
GLfloat size = 0.3f;
// 二维图形的旋转角度
GLfloat angle = 0.0f;
// 键盘回调函数
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
// 向左平移
case 'a':
::x -= 0.1f;
break;
// 向右平移
case 'd':
::x += 0.1f;
break;
// 向下平移
case 's':
::y -= 0.1f;
break;
// 向上平移
case 'w':
::y += 0.1f;
break;
// 逆时针旋转
case 'q':
::angle += 10.0f;
break;
// 顺时针旋转
case 'e':
::angle -= 10.0f;
break;
// 放大
case '+':
::size += 0.1f;
break;
// 缩小
case '-':
::size -= 0.1f;
break;
}
glutPostRedisplay();
}
// 显示回调函数
void display()
{
// 清除颜色缓冲区和深度缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 保存当前矩阵
glPushMatrix();
// 平移、旋转和缩放变换
glTranslatef(x, y, 0.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
glScalef(size, size, 1.0f);
// 绘制一个矩形
glBegin(GL_QUADS);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, 1.0f);
glVertex2f(1.0f, 1.0f);
glVertex2f(1.0f, 0.0f);
glEnd();
// 恢复之前保存的矩阵
glPopMatrix();
// 交换前后缓冲区
glutSwapBuffers();
}
// 初始化函数
void init()
{
// 设置清屏颜色为白色
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
}
int main(int argc, char** argv)
{
// 初始化GLUT库
glutInit(&argc, argv);
// 设置窗口大小和显示模式
glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
// 创建窗口
glutCreateWindow("OpenGL 2D Transform");
// 注册回调函数
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
// 初始化OpenGL
init();
// 进入主循环
glutMainLoop();
return 0;
}
```
这个程序使用了glTranslatef、glRotatef和glScalef函数来实现平移、旋转和缩放变换。键盘回调函数会在用户按下相应的按键时被调用,然后根据按键的不同来执行相应的变换操作。在显示回调函数中,我们先保存当前的矩阵,然后执行变换操作,并绘制一个矩形。最后,我们恢复之前保存的矩阵,并交换前后缓冲区,以显示出绘制的图形。
阅读全文