用OpenGL写一个可以通过键盘控制正方形平移旋转和缩放的小程序的代码
时间: 2024-03-17 12:45:22 浏览: 60
以下是用OpenGL写的可以通过键盘控制正方形平移旋转和缩放的小程序的代码:
```
#include <GL/glut.h>
// 定义正方形的四个顶点
float vertices[][3] = {
{-0.5, -0.5, 0.0},
{0.5, -0.5, 0.0},
{0.5, 0.5, 0.0},
{-0.5, 0.5, 0.0}
};
// 定义正方形的颜色
float colors[][3] = {
{1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
{0.0, 0.0, 1.0},
{1.0, 1.0, 0.0}
};
// 定义正方形的边
int edges[][2] = {
{0, 1},
{1, 2},
{2, 3},
{3, 0}
};
// 定义平移、旋转和缩放的变量
float tx = 0.0, ty = 0.0, tz = 0.0;
float rx = 0.0, ry = 0.0, rz = 0.0;
float sx = 1.0, sy = 1.0, sz = 1.0;
// 绘制正方形
void draw_square() {
glBegin(GL_QUADS);
for (int i = 0; i < 4; i++) {
glColor3fv(colors[i]);
glVertex3fv(vertices[i]);
}
glEnd();
glBegin(GL_LINES);
for (int i = 0; i < 4; i++) {
glColor3f(1.0, 1.0, 1.0);
glVertex3fv(vertices[edges[i][0]]);
glVertex3fv(vertices[edges[i][1]]);
}
glEnd();
}
// 绘制函数
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(tx, ty, tz);
glRotatef(rx, 1.0, 0.0, 0.0);
glRotatef(ry, 0.0, 1.0, 0.0);
glRotatef(rz, 0.0, 0.0, 1.0);
glScalef(sx, sy, sz);
draw_square();
glutSwapBuffers();
}
// 键盘输入处理函数
void keyboard(unsigned char key, int x, int y) {
switch (key) {
case 'q':
case 27: // ESC键
exit(0);
break;
case 'a':
tx -= 0.1;
break;
case 'd':
tx += 0.1;
break;
case 's':
ty -= 0.1;
break;
case 'w':
ty += 0.1;
break;
case 'z':
rz -= 5.0;
break;
case 'x':
rz += 5.0;
break;
case '+':
sx += 0.1;
sy += 0.1;
sz += 0.1;
break;
case '-':
sx -= 0.1;
sy -= 0.1;
sz -= 0.1;
break;
default:
break;
}
glutPostRedisplay();
}
// 初始化函数
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
}
// 主函数
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow("OpenGL");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
init();
glutMainLoop();
return 0;
}
```
通过按键盘上的“a”、“d”、“s”、“w”键可以控制正方形的平移,通过按“z”、“x”键可以控制正方形的旋转,通过按“+”、“-”键可以控制正方形的缩放。按“q”键或ESC键可以退出程序。