1、利用glut.h函数库,组合三维场景,包含茶壶、球体、立方体、甜甜圈等几何体; 2、添加环境光属性; 3、添加ChangeSize函数,控制窗体变化时几何体外形形变。
时间: 2023-10-20 22:18:32 浏览: 172
以下是一个简单的示例代码,实现了利用glut.h函数库组合三维场景,包含茶壶、球体、立方体、甜甜圈等几何体,并且添加了环境光属性和ChangeSize函数,可以控制窗体变化时几何体外形形变。
```
#include <GL/glut.h>
GLfloat angle = 0.0f;
GLfloat scale = 1.0f;
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
}
void reshape(int w, int h) {
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 0.1, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -6.0f);
glRotatef(angle, 0.0f, 1.0f, 0.0f);
glScalef(scale, scale, scale);
// 绘制茶壶
glColor3f(0.5f, 0.5f, 0.5f);
glutSolidTeapot(1.0);
// 绘制球体
glColor3f(1.0f, 0.0f, 0.0f);
glTranslatef(2.0f, 0.0f, 0.0f);
glutSolidSphere(1.0, 20, 20);
// 绘制立方体
glColor3f(0.0f, 1.0f, 0.0f);
glTranslatef(-4.0f, 0.0f, 0.0f);
glutSolidCube(2.0);
// 绘制甜甜圈
glColor3f(0.0f, 0.0f, 1.0f);
glTranslatef(2.0f, 0.0f, 0.0f);
glutSolidTorus(0.3, 1.0, 20, 20);
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y) {
switch (key) {
case 'a':
angle -= 5.0f;
break;
case 'd':
angle += 5.0f;
break;
case 'w':
scale += 0.1f;
break;
case 's':
scale -= 0.1f;
break;
case 27:
exit(0);
break;
default:
break;
}
glutPostRedisplay();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("3D Scene");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
```
其中,init函数用于初始化OpenGL环境,包括设置背景颜色、启用深度测试、启用光照、启用光源等。reshape函数用于处理窗体变化时的事件,重新计算投影矩阵和模型视图矩阵。display函数用于绘制场景中的几何体,包括茶壶、球体、立方体和甜甜圈,还对每个几何体进行了平移、旋转和缩放变换。keyboard函数用于处理键盘事件,可以通过按键控制几何体的旋转和缩放。
阅读全文