欢迎登录

【课程设计】OpenGL的3D场景模型

:2019-03-27    :2839 次   :21885 字   

【题目】

opengl 3D环境开发

【内容】

 

绘制一个简单的三维场景,可以是室内:卧室,办公室,教室,也可以是室外:运动场,公园等,加上光照效果,透视投影,不能过于简单

可以加动画,加上鼠标和键盘交互

 

  1. 一、题目:

 

Opengl大作业

  1. 二、程序分析:


1、实现三维场景,可以游览以及可以看到模型物体的不同状态。

2、三维场景有不同的模型组合,有房子,有地球,有月球。

3、可以看到物体的自由移动,汽车在公路上自由移动。

4、可以模拟真实的光照效果,具有阴影体现,可以呈现地球的白天黑夜。

5、模拟粒子系统的,下雪效果。

7、物体旋转,地球自转和月球绕着地球转

8、房子有真实效果的模型和细节。

 

  1. 三、程序树形建模

image.png


  1. 四、程序函数解析

image.png

  1. 五、程序结构分层

image.png



  1. 六、程序代码详细


void display(void)
{
	
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除颜色缓冲以及深度缓
	glEnable(GL_TEXTURE_2D);
	gluQuadricTexture(g_text, GLU_TRUE);              //建立纹理坐标 
	gluQuadricDrawStyle(g_text, GLU_FILL);            //用面填充
	glPushMatrix();//2
	glRotatef((GLfloat)direction, 0.0, 0.0, 1.0);
	glTranslated(Ox, Oy,Oz);
	glPushMatrix();//3



	glPushMatrix();//4
	//太阳灯
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
	GLfloat light1_ambient[] = { 1,1,1,1.0 };// 材料的环境光颜色
	GLfloat light1_diffuse[] = { 1,1,1,1.0 };
	GLfloat light1_specular[] = { 1,1,1,1.0 };//材料的镜面反射光颜色
	GLfloat light1_position[] = { Ox,Oy,Oz, 1.0 };//位置
	GLfloat spot_direction[] = { 20,0,0 };
	glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction);
	glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 90.0);//高光指数
	glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
	glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
	glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
	glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
	glEnable(GL_LIGHT1);
	glPopMatrix();//4

	glPushMatrix();//5
	glRotatef(spin, 0.0, 0.0, 1.0);
	glBindTexture(GL_TEXTURE_2D, texName[4]);
	gluSphere(g_text, 60, 3600, 3600);//地球
		//------------月亮-------------
	glPushMatrix();//6
	glRotatef((GLfloat)direction, 0.0, 0.0, 1.0);
	glTranslated(-100, 0, 0.0);
	glBindTexture(GL_TEXTURE_2D, texName[5]);
	gluSphere(g_text, 6, 200, 200);
	glPopMatrix();//6
	glPopMatrix();//5
	
	//光照压栈
	glPushMatrix();//7
	lightinit(Ox, Oy);
	glPopMatrix();//7

	glPopMatrix();//4

	//--------------------------汽车压栈
	//前
	glPushMatrix();//1
	if (cargo1==1) {
		car1 -=0.05;
	}
	else {
		car1 += 0.05;
	}
	if (car1 <= -37) {
		cargo1 = 0;
	}
	if (car1 >= 37) {
		cargo1 = 1;
	}
	glTranslated(car1, 37, 2);
	glRotated(90.0, 90.0, 0.0, 1.0);
	glScalef(0.1, 0.1, 0.1);
	drawcar();
	glPopMatrix();//1

	//右
	glPushMatrix();//1
	if (cargo2 == 1) {
		car2 -= 0.05;
	}
	else {
		car2 += 0.05;
	}
	if (car2 <= -37) {
		cargo2 = 0;
	}
	if (car2 >= 37) {
		cargo2 = 1;
	}
	glTranslated(37, car2, 2);
	glRotated(90.0, 0.0, 0.0, 1.0);
	glRotated(90.0, 90.0, 0.0, 1.0);
	glScalef(0.1, 0.1, 0.1);
	drawcar();
	glPopMatrix();//1

	//左
	glPushMatrix();//1
	if (carback1 == 1) {
		car3 -= 0.05;
	}
	else {
		car3 += 0.05;
	}
	if (car3 <= -37) {
		carback1 = 0;
	}
	if (car3 >= 37) {
		carback1 = 1;
	}
	glTranslated(-37, car3, 2);
	glRotated(90.0, 0.0, 0.0, 1.0);
	glRotated(90.0, 90.0, 0.0, 1.0);
	glScalef(0.1, 0.1, 0.1);
	drawcar();
	glPopMatrix();//1

	//后
	glPushMatrix();
	glTranslated(0,-75, 0);
	glPushMatrix();//1
	if (carback2 == 1) {
		car4 -= 0.05;
	}
	else {
		car4 += 0.05;
	}
	if (car4 <= -37) {
		carback2 = 0;
	}
	if (car4 >= 37) {
		carback2 = 1;
	}
	glTranslated(car4, 37, 2);
	glRotated(90.0, 90.0, 0.0, 1.0);
	glScalef(0.1, 0.1, 0.1);
	drawcar();
	glPopMatrix();//1
	glPopMatrix();


	//外面
	glBindTexture(GL_TEXTURE_2D, texName[16]);
	Up_down(20.0, 20.0, -40.0, 40.0, -40.0, 40.0, -0.001);
	//地板
	glBindTexture(GL_TEXTURE_2D, texName[0]);
	Up_down(10.0, 10.0, -20.0, 20.0, -20.0, 20.0, 0.0);

	glBindTexture(GL_TEXTURE_2D, texName[20]);
	Up_down(10.0, 1.0, -40.0, 40.0, -40.0, -35, 0.0);
	Up_down(10.0, 1.0, -40.0, 40.0, 35, 40, 0.0);
	glPushMatrix();
	glRotated(90.0, 0.0, 0.0, 1.0);
	Up_down(10.0, 1.0, -40.0, 40.0, -40.0, -35, 0.0);
	glPopMatrix();
	glPushMatrix();
	glRotated(-90.0, 0.0, 0.0, 1.0);
	Up_down(10.0, 1.0, -40.0, 40.0, -40.0, -35, 0.0);
	glPopMatrix();

	//--------------室外墙----------------
	glBindTexture(GL_TEXTURE_2D, texName[1]);
	//左边墙
	Left_right(3.0, 1.0, -20.0,-20.0,20.0,0.0,10.0);
	//右边墙
	Left_right(3.0, 1.0, 20.0, -20.0, 20.0, 0.0, 10.0);
	//后边墙
	Before_back(3.0, 1.0, -20.0, 20.0, -20.0, 0.0, 10.0);
	//前边墙
	Before_back(3.0, 1.0, -20.0, 20.0, 20.0, 0.0, 10.0);

	//--------------屋顶----------------
	glBindTexture(GL_TEXTURE_2D, texName[2]);
	Up_down(4.0, 4.0, -20.0,20.0,-20.0,20.0,10.0);

	//门
	glBindTexture(GL_TEXTURE_2D, texName[11]);
	Before_back(1.0, 1.0, -18.0, -15.0, 19.99, 0.0, 5.0);//大厅
	Before_back(1.0, 1.0, -18.0, -15.0, 20.01, 0.0, 5.0);//

	glBindTexture(GL_TEXTURE_2D, texName[11]);
	Before_back(1.0, 1.0, -8.0, -5.5, 4.99, 0.0, 5.0);//卫生间
	Before_back(1.0, 1.0, -8.0, -5.5, 5.01, 0.0, 5.0);//卫生间
	//---------------------------------------------------------------------大厅--------------------------------------------------
	//--------------电视墙----------------

	glBindTexture(GL_TEXTURE_2D, texName[8]);
	Left_right(1.0, 1.0, 19.9, 0.0, -20.0, 0.0, 10.0);

	//--------------电视----------------

	glBindTexture(GL_TEXTURE_2D, texName[6]);
	Left_right(1.0, 1.0, 19.8, -6.0, -14.0, 3.0, 7.0);

	//--------------电视柜子----------------
	
	glBindTexture(GL_TEXTURE_2D, texName[7]);
	//前面
	Left_right(1.0, 1.0, 18.0, -6.0, -14.0, 0.0, 2.3);
	//四周
	glBindTexture(GL_TEXTURE_2D, texName[9]);
	//左边
	Before_back(1.0, 1.0, 18.0, 20.0,-6.0, 0.0, 2.3);
	//右边
	Before_back(1.0, 1.0, 18.0, 20.0, -14.0, 0.0, 2.3);
	//上面
	Up_down(1.0, 1.0, 18.0, 20.0, -6.0, -14.0, 2.3);

	//沙发组合-------------------------------------
	glBindTexture(GL_TEXTURE_2D, texName[19]);
	Left_right(1.0, 1.0, 5.0, -7.0, -12.0, 0.0, 3.0);
	Left_right(1.0, 1.0, 7.0, -7.0, -12.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.5, 7.0, -7.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.0, 5.5, -7.0, 0.0, 3);
	Before_back(1.0, 1.0, 5.5, 7.0, -12.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.0, 5.5, -12.0, 0.0, 3);
	glBindTexture(GL_TEXTURE_2D, texName[18]);
	Up_down(1.0, 1.0, 5.0,7.0, -7.0, -12.0, 1.5);
	Left_right(1.0, 1.0, 5.5, -7.0, -12.0,1.5, 3.0);

	glPushMatrix();
	glRotatef(90, 0.0, 0.0, 1.0);
	glTranslated(-20,0, 0.0);
	glBindTexture(GL_TEXTURE_2D, texName[19]);
	Left_right(1.0, 1.0, 5.0, -7.0, -12.0, 0.0, 3.0);
	Left_right(1.0, 1.0, 7.0, -7.0, -12.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.5, 7.0, -7.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.0, 5.5, -7.0, 0.0, 3);
	Before_back(1.0, 1.0, 5.5, 7.0, -12.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.0, 5.5, -12.0, 0.0, 3);
	glBindTexture(GL_TEXTURE_2D, texName[18]);
	Up_down(1.0, 1.0, 5.0, 7.0, -7.0, -12.0, 1.5);
	Left_right(1.0, 1.0, 5.5, -7.0, -12.0, 1.5, 3.0);
	glPopMatrix();

	glPushMatrix();
	glRotatef(-90, 0.0, 0.0, 1.0);
	glTranslated(-1, 19, 0.0);
	glBindTexture(GL_TEXTURE_2D, texName[19]);
	Left_right(1.0, 1.0, 5.0, -7.0, -12.0, 0.0, 3.0);
	Left_right(1.0, 1.0, 7.0, -7.0, -12.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.5, 7.0, -7.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.0, 5.5, -7.0, 0.0, 3);
	Before_back(1.0, 1.0, 5.5, 7.0, -12.0, 0.0, 1.5);
	Before_back(1.0, 1.0, 5.0, 5.5, -12.0, 0.0, 3);
	glBindTexture(GL_TEXTURE_2D, texName[18]);
	Up_down(1.0, 1.0, 5.0, 7.0, -7.0, -12.0, 1.5);
	Left_right(1.0, 1.0, 5.5, -7.0, -12.0, 1.5, 3.0);
	glPopMatrix();


	//--------------门口柜子----------------

	glBindTexture(GL_TEXTURE_2D, texName[7]);
	//前面
	Left_right(2.0, 1.0, -12.0,20.0, 5.0, 0.0, 2.3);
	Left_right(2.0, 1.0, -12.0, 20.0, 5.0, 7.7,10.0);
	//四周
	glBindTexture(GL_TEXTURE_2D, texName[9]);
	Before_back(1.0, 1.0, -12.0, -10.0, 5.0, 0.0, 2.3);
	//上面
	Up_down(2.0, 1.0, -12.0, -10.0, 20.0,5.0, 2.3);
	//四周
	Before_back(1.0, 1.0, -12.0, -10.0, 5.0, 7.7,10.0);
	//下面
	Up_down(2.0, 1.0, -12.0, -10.0, 20.0, 5.0, 7.7);

	//--------------左音响----------------
	
	glBindTexture(GL_TEXTURE_2D, texName[3]);
	//前面
	Left_right(1.0, 1.0, 19.0, -3.5, -4.5, 0.0, 4.0);
	//四周
	glBindTexture(GL_TEXTURE_2D, texName[10]);
	//左边
	Before_back(1.0, 1.0, 19.0, 20.0, -3.5, 0.0, 4.0);
	//右边
	Before_back(1.0, 1.0, 19.0, 20.0, -4.5, 0.0, 4.0);
	//上面
	Up_down(1.0, 1.0, 19.0, 20.0, -3.5, -4.5, 4.0);

	//--------------右音响---------------
	glBindTexture(GL_TEXTURE_2D, texName[3]);
	//前面
	Left_right(1.0, 1.0, 19.0, -15.5, -16.5, 0.0, 4.0);
	//四周
	glBindTexture(GL_TEXTURE_2D, texName[10]);
	//左边
	Before_back(1.0, 1.0, 19.0, 20.0, -15.5, 0.0, 4.0);
	//右边
	Before_back(1.0, 1.0, 19.0, 20.0, -16.5, 0.0, 4.0);
	//上面
	Up_down(1.0, 1.0, 19.0, 20.0, -15.5, -16.5, 4.0);

	//--------------餐桌------------------
	glBindTexture(GL_TEXTURE_2D, texName[9]);
	Up_down(2.0, 2.0, -15.0, -13.0, -13, -15, 2.0);
	Up_down(2.0,2.0, -15.0, -13.0, -13, -15, 1.9);
	Before_back(1.0, 1.0, -15.0, -13.0, -15.0, 1.9, 2.0);
	Before_back(1.0, 1.0, -13.0, -13.0, -15.0, 1.9, 2.0);
	Left_right(1.0, 1.0, -15.0, -13.0, -15.0, 1.9, 2.0);
	Left_right(1.0, 1.0, -13.0, -13.0, -15.0, 1.9, 2.0);
	//逆时针
	//1
	Before_back(1.0, 1.0, -14.8, -14.6, -14.8, 0.0, 2.0);
	Before_back(1.0, 1.0, -14.8, -14.6, -14.6, 0.0, 2.0);
	Left_right(1.0, 1.0, -14.6, -14.6, -14.8, 0.0, 2.0);
	Left_right(1.0, 1.0, -14.8, -14.6, -14.8, 0.0, 2.0);
	//2
	Before_back(1.0, 1.0, -13.4, -13.2, -14.8, 0.0, 2.0);
	Before_back(1.0, 1.0, -13.4, -13.2, -14.6, 0.0, 2.0);
	Left_right(1.0, 1.0, -13.4, -14.6, -14.8, 0.0, 2.0);
	Left_right(1.0, 1.0, -13.2, -14.6, -14.8, 0.0, 2.0);
	//3
	Before_back(1.0,  1.0, -13.4, -13.2, -13.3, 0.0, 2.0);
	Before_back(1.0, 1.0, -13.4, -13.2, -13.2, 0.0, 2.0);
	Left_right(1.0,1.0, -13.4, -13.4, -13.2, 0.0, 2.0);
	Left_right(1.0,  1.0, -13.2, -13.4, -13.2, 0.0, 2.0);
	//4
	Before_back(1.0, 1.0, -14.8, -14.6, -13.3, 0.0, 2.0);
	Before_back(1.0, 1.0, -14.6, -14.6, -13.2, 0.0, 2.0);
	Left_right(1.0, 1.0, -14.6, -13.4, -13.2, 0.0, 2.0);
	Left_right(1.0, 1.0, -14.8, -13.4, -13.2, 0.0, 2.0);

	//------------------------椅子------------
	Up_down(1.0, 1.0, -14.3, -13.7, -16.0, -15.4, 1.3);
	Before_back(1.0, 1.0, -14.3, -13.7, -16.0, 0.0, 1.3);
	Before_back(1.0, 1.0, -14.3, -13.7, -15.4, 0.0, 1.3);
	Left_right(1.0, 1.0, -13.7, -16.0, -15.4, 0.0, 1.3);
	Left_right(1.0, 1.0, -14.3, -16.0, -15.4, 0.0, 1.3);


	Up_down(1.0, 1.0, -14.3, -13.7, -12.6, -12, 1.3);
	Before_back(1.0, 1.0, -14.3, -13.7, -12.6, 0.0, 1.3);
	Before_back(1.0, 1.0, -14.3, -13.7, -12, 0.0, 1.3);
	Left_right(1.0, 1.0, -13.7, -12.6, -12, 0.0, 1.3);
	Left_right(1.0, 1.0, -14.3, -12.6, -12, 0.0, 1.3);

	Up_down(1.0, 1.0, -12.6, -12, -14.3, -13.7, 1.3);
	Before_back(1.0, 1.0, -12.6, -12, -14.3, 0.0, 1.3);
	Before_back(1.0, 1.0, -12.6, -12, -13.7, 0.0, 1.3);
	Left_right(1.0, 1.0, -12.6, -14.3, -13.7, 0.0, 1.3);
	Left_right(1.0, 1.0, -12.0, -14.3, -13.7, 0.0, 1.3);

	Up_down(1.0, 1.0, -16.0, -15.4, -14.3, -13.7, 1.3);
	Before_back(1.0, 1.0, -16.0, -15.4, -14.3, 0.0, 1.3);
	Before_back(1.0, 1.0, -16.0, -15.4, -13.7, 0.0, 1.3);
	Left_right(1.0, 1.0, -16.0, -14.3, -13.7, 0.0, 1.3);
	Left_right(1.0, 1.0, -15.4, -14.3, -13.7, 0.0, 1.3);

	//水族箱

	Before_back(1.0, 1.0, -5.0, -3, -5, 0.0, 1.0);
	Before_back(1.0, 1.0, -5.0,-3.0, -15, 0.0, 1.0);
	Left_right(1.0, 1.0, -5.0, -5.0, -15.0, 0.0, 1.0);
	Left_right(1.0, 1.0, -3.0, -5.0, -15.0, 0.0, 1.0);
	glBindTexture(GL_TEXTURE_2D, texName[15]);
	Before_back(1.0, 1.0, -5.0, -3.0, -5, 1.0, 5.0);
	Before_back(1.0, 1.0, -5.0, -3.0, -15, 1.0, 5.0);
	Left_right(1.0, 1.0, -5.0, -5.0, -15.0, 1.0, 5.0);
	Left_right(1.0, 1.0, -3.0, -5.0, -15.0, 1.0, 5.0);

	//全家福
	glBindTexture(GL_TEXTURE_2D, texName[21]);
	Before_back(1.0, 1.0, 3.0, 13.0, -0.01, 2.0, 8.0);//
	Before_back(1.0, 1.0, 3.0, 13.0, -19.99, 2.0, 8.0);//

	glBindTexture(GL_TEXTURE_2D, texName[22]);
	Before_back(1.0, 1.0, 3.0, 13.0, 0.01, 2.0, 8.0);//

	//-------------------------------------------------------卫生间--------------------------------------------------------
	glBindTexture(GL_TEXTURE_2D, texName[1]);
	Before_back(2.0, 1.0, -10.0, -3.0, 5.0, 0.0, 10.0);//卫生间墙
	Left_right(2.0, 1.0, -10.0, 5.0, 20.0, 0.0, 10.0);//大门墙
	glBindTexture(GL_TEXTURE_2D, texName[16]);
	Up_down(1.0,1.0,-10.0,-3.0,20.0,15.0,1);//蹲坑
	Before_back(1.0, 1.0, -10.0, -3.0, 15.0, 0.0, 1);//
	glBindTexture(GL_TEXTURE_2D, texName[17]);
	Up_down(1.0, 1.0, -8.0, -5.0, 19.0, 16.0, 1.001);//蹲坑

	//----------------------------------------------------------房间-------------------------------------------------------
	glBindTexture(GL_TEXTURE_2D, texName[1]);
   //前边墙
	Before_back(2.0, 1.0, -3.0, 20.0, 0.0, 0.0, 10.0);//
	//左边墙	
	Left_right(2.0, 1.0, -3.0, 20.0, 0.0, 0.0, 10.0);//房门墙
	//门
	glBindTexture(GL_TEXTURE_2D, texName[11]);
	Left_right(1.0, 1.0, -2.99, 1.0, 3.5, 0.0, 5.0);
	Left_right(1.0, 1.0, -3.01, 1.0, 3.5, 0.0, 5.0);
	//窗
	glBindTexture(GL_TEXTURE_2D, texName[12]);
	Before_back(1.0, 1.0, 0.0, 7.0, 19.99, 3.0, 7.0);

	//婚纱照
	glBindTexture(GL_TEXTURE_2D, texName[23]);
	Before_back(1.0, 1.0, 14.0, 19.0, 19.99, 3.0, 7.0);
	//-------床----------
	glBindTexture(GL_TEXTURE_2D, texName[10]);
	Before_back(1.0, 1.0, 13.0, 20.0, 19.3, 0.0, 2.5);
	Left_right(1.0, 1.0, 13.0, 20.0, 19.3, 0.0, 2.5);
	Up_down(1.0, 1.0, 13.0, 20.0, 20.0, 19.3, 2.5);
	Up_down(1.0, 1.0, 13.0, 20.0, 20.0, 11.0, 1.0);
	Left_right(1.0, 1.0, 13.0, 20.0,11.0, 0.0, 1.0);
	Before_back(1.0, 1.0, 13.0, 20.0,11.0, 0.0, 1.0);
	//被子
	glBindTexture(GL_TEXTURE_2D, texName[13]);
	Up_down(1.0, 1.0, 12.99, 20.0, 17.0, 11.0, 1.01);
	Left_right(1.0, 1.0, 12.99,17.0, 11.0, 0.0, 1.01);
	//枕头
	glBindTexture(GL_TEXTURE_2D, texName[14]);
	Before_back(1.0, 1.0, 17.0, 19.0, 18.0, 0.0, 1.5);
	Left_right(1.0, 1.0, 17.0, 20.0, 18.0, 0.0,1.5);
	Up_down(1.0, 1.0, 17.0, 19.0, 20.0, 18.0, 1.5);

	Before_back(1.0, 1.0, 14.0, 16.0, 18.0, 0.0, 1.5);
	Left_right(1.0, 1.0, 14.0, 20.0, 18.0, 0.0, 1.5);
	Up_down(1.0, 1.0, 14.0, 16.0, 20.0, 18.0, 1.5);

	//学习桌
	glBindTexture(GL_TEXTURE_2D, texName[10]);
	Up_down(1.0, 1.0,6.0,9.0,1.5, 0.0, 2.0);
	Up_down(1.0, 1.0, 6.0, 9.0, 1.5, 0.0, 1.8);
	Left_right(1.0, 1.0, 6.0, 1.5, 0.0, 0.0, 2);
	Left_right(1.0, 1.0, 9.0, 1.5, 0.0, 0.0, 2);
	Left_right(1.0, 1.0, 6.2, 1.5, 0.0, 0.0, 2);
	Left_right(1.0, 1.0, 8.8, 1.5, 0.0, 0.0, 2);
	Before_back(1.0, 1.0, 6.0, 6.2, 1.51, 0.0, 2.0);
	Before_back(1.0, 1.0, 8.8, 9.0, 1.51, 0.0, 2.0);
	Before_back(1.0, 1.0, 6.0, 9.0, 1.51, 1.8, 2.0);

	Up_down(1.0, 1.0, 7.2, 8.3, 2.0, 2.8, 1);
	Left_right(1.0, 1.0, 7.2, 2.0, 2.8, 0.0, 1);
	Left_right(1.0, 1.0, 8.3, 2.0, 2.8, 0.0, 1);
	Before_back(1.0, 1.0, 7.2, 8.3, 2.8, 0.0, 2.0);
	Before_back(1.0, 1.0, 7.2, 8.3, 2.6, 0.0, 2.0);
	Left_right(1.0, 1.0, 7.2, 2.6, 2.8, 0.0, 2);
	Left_right(1.0, 1.0, 8.3, 2.6, 2.8, 0.0, 2);
	Up_down(1.0, 1.0, 7.2, 8.3, 2.6, 2.8, 2);

	if (snow) {
		//雪花
		glPushMatrix();
		glRotated(90.0, 90.0, 0.0, 1.0);
		drawScene();//绘制场景
		glPopMatrix();//
		glPushMatrix();
		glTranslated(0, 20, 0);
		glRotated(90.0, 90.0, 0.0, 1.0);
		drawScene();//绘制场景
		glPopMatrix();//
		glPushMatrix();
		glTranslated(0, -20, 0);
		glRotated(90.0, 90.0, 0.0, 1.0);
		drawScene();//绘制场景
		glPopMatrix();//
		glTranslated(0, 30, 0);
		glRotated(90.0, 90.0, 0.0, 1.0);
		drawScene();//绘制场景
		glPopMatrix();//
	}
	glPopMatrix();//3
	glPopMatrix();//2
	glFlush();//用于强制刷新缓存
	glutSwapBuffers();//交换双缓存
	glutPostRedisplay();//标志下次刷新,没有的话,程序打开后不会刷新界面
}


  1. 七、程序运行结果

1.       地月系


image.png

1.       汽车移动:


image.png

1.       大厅


image.png


image.png


1.       餐桌


image.png

1.       电视墙:


image.png


image.png

1.       沙发:


image.png

1.       水族箱


image.png

1.       卫生间:


image.png

1.       房间:


image.png


image.png

1.       雪花:


image.png

  1.  八、课程心得体会

    本次大作业运用了光照,粒子系统,模型等综合项目,模型中运用了大量的纹理贴图来充实这个场景的细节,在模型运动和视角转换的过程中运用了矩阵的转换来实现,具体了解了世界视角和视觉视角的矩阵转换,投影模型过程,对纹理和光照各个属性的设置来呈现不同的效果。此程序是基于地月系,然后房子各个细节的呈现,是综合性的小程序。通过本次大作业,能更好的运用opengl的函数绘制场景,更能了解到图形在计算机的程序的原理与运用,宏观的接触了图形学的领域。


  1. 九、特别部分

    完整的工程包、资源包和论文报告将有偿提供,支持问题回答和配置电脑让工程跑起来,需要者可点击头部导航栏联系我。

《OpenGL的3D场景模型》下载
    •   NEAR博
       发布于 2019-06-17 16:06:10  回复该评论
    • 博主我想要你的全部源代码和报告,请问应该怎么联系你呢
    •   访客
       发布于 2019-06-12 23:23:30  回复该评论
    • 大神,能不能给个联系方式,想问你一些问题,有酬谢
      •   muya
         发布于 2019-06-13 09:40:11  回复该评论
      • 点击导航栏联系我,或者qq321772514
×