实验2 OpenGL交互
时间: 2023-08-02 08:15:02 浏览: 59
好的,实验2是关于OpenGL交互的。OpenGL交互指的是用户通过鼠标、键盘等输入设备与OpenGL程序进行交互,例如改变视角、选择物体等。在这个实验中,我们将学习如何使用GLUT库来实现简单的交互操作。
首先,我们需要安装GLUT库。在Linux系统上,可以使用以下命令进行安装:
```
sudo apt-get install freeglut3-dev
```
在Windows系统上,可以从官网下载可执行文件并安装。
安装完毕后,我们可以编写一个简单的OpenGL程序,其中包含一个立方体和一些基本的交互操作。下面是一个示例程序:
```c++
#include <GL/glut.h>
GLfloat angle = 0.0f; // 立方体旋转角度
void init() {
glClearColor(0.0, 0.0, 0.0, 1.0); // 设置清空颜色为黑色
glEnable(GL_DEPTH_TEST); // 启用深度测试
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -6.0f); // 将立方体向屏幕内移动6个单位
glRotatef(angle, 1.0f, 1.0f, 1.0f); // 绕x、y、z轴旋转
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f); // 设置颜色为红色
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f); // 设置颜色为绿色
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);
glColor3f(0.0f, 0.0f, 1.0f); // 设置颜色为蓝色
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glColor3f(1.0f, 1.0f, 0.0f); // 设置颜色为黄色
glVertex3f(1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glEnd();
glutSwapBuffers();
}
void specialKeys(int key, int x, int y) {
switch (key) {
case GLUT_KEY_LEFT:
angle -= 5.0f;
break;
case GLUT_KEY_RIGHT:
angle += 5.0f;
break;
}
glutPostRedisplay();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("OpenGL Interactions");
init();
glutDisplayFunc(display);
glutSpecialFunc(specialKeys);
glutMainLoop();
return 0;
}
```
该程序会在窗口中绘制一个立方体,并允许用户通过左右方向键来旋转它。
在程序中,我们首先定义了一个变量`angle`,表示立方体的旋转角度。在`init()`函数中,我们设置了清空颜色为黑色,并启用了深度测试。在`display()`函数中,我们首先清空了颜色缓冲区和深度缓冲区,然后设置了模型视图矩阵,将立方体向屏幕内移动6个单位,并绕x、y、z轴旋转。接着,我们使用`glBegin()`和`glEnd()`函数来绘制立方体的各个面,并设置了不同的颜色。在`specialKeys()`函数中,我们根据用户按下的按键来更新`angle`变量,并调用`glutPostRedisplay()`函数来触发窗口重新绘制。
最后,在`main()`函数中,我们初始化GLUT库,并创建一个窗口。我们将程序的初始化函数、绘制函数和特殊按键处理函数分别注册到GLUT库中,并进入主循环,等待用户的输入。
以上就是一个简单的OpenGL交互程序的实现方法。你可以根据具体需求进行修改和扩展,例如添加鼠标交互、选择物体等功能。