计算机图形学-绘制太阳系
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:绘制太阳系(实验八)
班级:信09-1
学号:2108190911211
姓名:王杰
【实验目的】
1. 掌握GLUT实用包中创建多面体以及二次曲面的函数
2. 掌握OpenGL中的基本光照函数
3. 对几何变换、投影变换等内容进行复习
【实验内容】
1.在窗口绘制三个球体,分别代表太阳、地球和月球
2.为每个球体设置恰当的几何变换,要求:
(1)太阳在场景中间
(2)地球在自转的同时绕太阳旋转
(3)月球在自转的同时绕地球旋转
3.为场景添加适当的光照渲染
4.源程序
#include
static int day = 365; // day的变化:从0到359
void myDisplay(void)
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75, 1, 2, 400000000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -20000000, 200000000, 0, 0, 0, 0, 0, 1);
// 黄色的"太阳"
glColor3f(1.0f, 2.0f, 0.0f);
glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glutSolidSphere(69600000, 100, 100);
// 蓝色的"地球"
glColor3f(0.0f, 2.0f, 1.0f);
glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(150000000, 0.0f, 0.0f);
glutSolidSphere(15945000, 100, 100);
// 白色的"月亮"
glColor3f(2.0f, 2.0f, 2.0f);
glRotatef(day/30.0*360.0 - day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(38000000, 0.0f, 0.0f);
glutSolidSphere(4345000, 100, 100);
glFlush();
glutSwapBuffers();
}
void myIdle(void)
{
++day;
if( day >= 360 )
day = 0;
myDisplay();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(500, 500);
glutCreateWindow("王杰");
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}
5.运行结果截图