用OpenGL写一个可以通过键盘控制三角形平移旋转和缩放的小程序的代码
时间: 2024-03-17 14:45:13 浏览: 152
以下是用OpenGL实现键盘控制三角形平移、旋转和缩放的简单程序。你可以将此代码放入一个C++文件中并编译运行。
```c++
#include <GL/glut.h>
#include <iostream>
using namespace std;
// 三角形的顶点坐标
GLfloat vertices[][3] = { { -1.0,-1.0,-1.0 },{ 1.0,-1.0,-1.0 },
{ 1.0,1.0,-1.0 },{ -1.0,1.0,-1.0 },{ -1.0,-1.0,1.0 },
{ 1.0,-1.0,1.0 },{ 1.0,1.0,1.0 },{ -1.0,1.0,1.0 } };
// 三角形的边界顶点索引
GLfloat edges[][2] = { { 0,1 },{ 1,2 },{ 2,3 },{ 3,0 },
{ 4,5 },{ 5,6 },{ 6,7 },{ 7,4 },{ 0,4 },{ 1,5 },{ 2,6 },{ 3,7 } };
// 三角形的颜色
GLfloat 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 },{ 1.0,0.0,1.0 },{ 0.0,1.0,1.0 } };
// 三角形的缩放比例
GLfloat scale = 1.0;
// 三角形的平移量
GLfloat transX = 0.0, transY = 0.0, transZ = -5.0;
// 三角形的旋转角度
GLfloat rotX = 0.0, rotY = 0.0, rotZ = 0.0;
// 执行绘制操作
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// 平移
glTranslatef(transX, transY, transZ);
// 旋转
glRotatef(rotX, 1.0, 0.0, 0.0);
glRotatef(rotY, 0.0, 1.0, 0.0);
glRotatef(rotZ, 0.0, 0.0, 1.0);
// 缩放
glScalef(scale, scale, scale);
// 绘制三角形
for (int i = 0; i < 12; i++) {
glBegin(GL_LINES);
glColor3fv(colors[i / 2]);
glVertex3fv(vertices[edges[i][0]]);
glVertex3fv(vertices[edges[i][1]]);
glEnd();
}
glFlush();
glutSwapBuffers();
}
// 执行键盘操作
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
// 放大
case 'w':
scale += 0.1;
break;
// 缩小
case 's':
scale -= 0.1;
break;
// 上移
case 'i':
transY += 0.1;
break;
// 下移
case 'k':
transY -= 0.1;
break;
// 左移
case 'j':
transX -= 0.1;
break;
// 右移
case 'l':
transX += 0.1;
break;
// 绕X轴顺时针旋转
case 'x':
rotX += 10.0;
break;
// 绕X轴逆时针旋转
case 'X':
rotX -= 10.0;
break;
// 绕Y轴顺时针旋转
case 'y':
rotY += 10.0;
break;
// 绕Y轴逆时针旋转
case 'Y':
rotY -= 10.0;
break;
// 绕Z轴顺时针旋转
case 'z':
rotZ += 10.0;
break;
// 绕Z轴逆时针旋转
case 'Z':
rotZ -= 10.0;
break;
// 默认
default:
break;
}
glutPostRedisplay();
}
// 初始化OpenGL
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);
glutInitWindowPosition(100, 100);
glutCreateWindow("Triangle Transformation");
init();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
```
该程序使用OpenGL绘制了一个三角形,并且可以通过键盘控制其平移、旋转和缩放。你可以通过按下“w”键和“s”键来放大和缩小三角形,按下“i”、“k”、“j”和“l”键来控制三角形在水平和垂直方向上的平移,按下“x”、“X”、“y”、“Y”、“z”和“Z”键来控制三角形的旋转。
阅读全文