1、利用glut.h函数库,组合三维场景,包含茶壶、球体、立方体、甜甜圈等几何体; 2、添加环境光属性; 3、添加ChangeSize函数,控制窗体变化时几何体外形形变。
时间: 2023-10-20 16:10:48 浏览: 121
这是一个比较具体的编程问题,以下是一个简单的实现代码,仅供参考:
```
#include <GL/glut.h>
// 定义几何体
GLUquadricObj *teaPot = NULL;
GLUquadricObj *sphere = NULL;
GLUquadricObj *cube = NULL;
GLUquadricObj *torus = NULL;
// 定义窗体大小变化时的回调函数
void ChangeSize(GLsizei width, GLsizei height)
{
GLfloat aspectRatio;
if (height == 0)
height = 1;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
aspectRatio = (GLfloat)width / (GLfloat)height;
gluPerspective(45.0f, aspectRatio, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
// 初始化场景
void SetupRC()
{
GLfloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8f, 1.0f };
GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat lightPos[] = { -50.0f, 50.0f, 100.0f, 1.0f };
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
glEnable(GL_DEPTH_TEST);
teaPot = gluNewQuadric();
sphere = gluNewQuadric();
cube = gluNewQuadric();
torus = gluNewQuadric();
}
// 渲染场景
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
glPushMatrix();
glTranslatef(-2.0f, 0.0f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f);
gluSphere(sphere, 1.0f, 50, 50);
glPopMatrix();
glPushMatrix();
glTranslatef(2.0f, 0.0f, 0.0f);
glColor3f(1.0f, 0.0f, 0.0f);
gluCylinder(teaPot, 1.0f, 0.0f, 2.0f, 50, 50);
glPopMatrix();
glPushMatrix();
glTranslatef(0.0f, -2.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f);
gluCube(cube, 2.0f);
glPopMatrix();
glPushMatrix();
glTranslatef(0.0f, 2.0f, 0.0f);
glColor3f(1.0f, 1.0f, 0.0f);
gluDisk(torus, 1.0f, 2.0f, 50, 50);
glPopMatrix();
glutSwapBuffers();
}
// 主函数
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Three-Dimensional Scene");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
SetupRC();
glutMainLoop();
return 0;
}
```
以上代码使用了glut.h函数库,绘制了几个常见的几何体,并添加了环境光属性和窗体大小变化时的回调函数。可以根据需要进行修改和优化。