opengl创建3d模型,并能实现简单交互的代码
时间: 2024-02-15 10:05:23 浏览: 26
这里给您提供一个使用OpenGL创建3D模型并实现简单交互的代码示例,仅供参考:
```c++
#include <GL/glut.h> // 引入 OpenGL 和 GLUT 库
float angle = 0.0f; // 模型旋转角度
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除颜色缓冲区和深度缓冲区
glMatrixMode(GL_MODELVIEW); // 进入模型视图模式
// 绘制立方体
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f); // 移动相机位置
glRotatef(angle, 0.0f, 1.0f, 0.0f); // 绕 Y 轴旋转模型
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);
glColor3f(1.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(0.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);
glVertex3f(1.0f, -1.0f, 1.0f);
glEnd();
glutSwapBuffers(); // 交换缓冲区,显示绘制结果
}
void idle() {
angle += 1.0f; // 更新旋转角度
glutPostRedisplay(); // 标记窗口需要重新绘制
}
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 设置清屏颜色为黑色
glEnable(GL_DEPTH_TEST); // 启用深度测试
}
void reshape(int width, int height) {
glViewport(0, 0, width, height); // 设置视口大小
glMatrixMode(GL_PROJECTION); // 进入投影模式
glLoadIdentity();
gluPerspective(60.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f); // 设置透视投影矩阵
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv); // 初始化 GLUT 库
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); // 设置显示模式
glutInitWindowSize(640, 480); // 设置窗口大小
glutCreateWindow("OpenGL 3D Model"); // 创建窗口并设置标题
glutDisplayFunc(display); // 设置绘制回调函数
glutIdleFunc(idle); // 设置空闲回调函数
glutReshapeFunc(reshape); // 设置窗口大小改变回调函数
init(); // 初始化 OpenGL
glutMainLoop(); // 进入主循环
return 0;
}
```
这段代码创建了一个立方体模型,并且通过空闲回调函数来实现模型的自动旋转。您可以使用鼠标和键盘输入事件来实现更多的交互操作,例如平移、缩放、选择等。