计算机图形学-绘制太阳系

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.运行结果截图

相关文档
最新文档