计算机图形学试验报告
学生实验实习报告册 学年学期 课程名称 学生学院 专业班级 学生学号 学生姓名 联系电话 2016-2017学年 春√ √□□秋学期 大学计算机基础 通信与信息工程学院 重庆邮电大学教务处印制重庆邮电大学教务处印制 实验实习名 指导教师 课程名称 实验实习地点 学生姓名 学院专业 OpenGL 基本使用 秦红星 计算机图形学 A 信息科技大厦 S306 广电与数字媒体类 教师签名 年月日 一、实验实习目的及要求 目的 认识了解 OpenGL 的性质、功能 要求 1.利用 OpenGL 绘制一个简单的场景比如球体、正方体 2.加入灯光 3.实现交互操作平移、缩放、旋转 二、实验实习设备(环境)及要求(软硬件条件) 采用 Microsoft Visual C 2010生成环境并用 C编写程序 三、实验实习内容与步骤 内容 背景为黑色,在点光源下,能够实现平移、缩放、旋转的球。 步骤 建立立体添加光照添加变换 1.先写“主函数” ,在主函数中将窗口生成好。 2.在“自定义函数 1”中对窗口进行清除、填色等操作。 3.在“自定义函数 1”中设置点光源,设置光照的各种参数。 4.在“自定义函数 1”中设置平移、缩放、旋转及各参数。 5.在“自定义函数 2”中设置平移和缩放的循环。 6.在主函数中调用这两个自定义函数,并且在主函数里面用“自定义函数1”为参数调用 glutDisplayFunc来注册一个绘图函数。其次用空闲回调函数 glutIdleFunc来使球体不停地循 环有缩放、平移功能的函数。实现动画。 四、实验实习过程或算法(源程序、代码) include 考核成绩 课程编号 完成日期 学生学号 所在班级 040659 2016 年 10 月 17 日 教师评语 GLfloat angle 0.0f; GLfloat multiply 0.0f; void displayvoid { glClearGL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT; glClearColor0.0f, 0.0f, 0.0f, 0.0f; // 设置窗口里面的背景颜色 glMatrixModeGL_PROJECTION; glLoadIdentity; gluPerspective90.0f, 1.0f, 1.0f, 20.0f; glLoadIdentity; gluLookAt0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0; { //设置一个点光源 GLfloatlight_position[] { 0.5f,0.0f,0.0f,1.0f };//(xyzw)w为1时代表点 光源,0时代表方向光源 GLfloatlight_ambient[] { 0.5f,0.5f,0.5f,1.0f };//(0001) GLfloatlight_diffuse[] { 1.0f,1.0f,1.0f,1.0f };//(1111) GLfloatlight_specular[] { 1.0f, 1.0f, 1.0f, 1.0f };//(1111) glLightfvGL_LIGHT0, GL_POSITION, light_position; } } { glLightfvGL_LIGHT0, GL_AMBIENT, light_ambient;//光源环境光强值 glLightfvGL_LIGHT0, GL_DIFFUSE, light_diffuse;//光源漫反射强值 glLightfvGL_LIGHT0, GL_SPECULAR, light_specular;//光源镜面反射强值 glEnableGL_LIGHT0;//打开该光源 glEnableGL_LIGHTING;//打开光照 glRotatefangle, 0.0f, 1.0f, 0.0f; glTranslatef0.0f, 0.0f, 0.6f; //平移 glScaledmultiply, multiply, multiply; //缩放 glutSolidSphere0.2, 50, 50; } glutSwapBuffers; void rotateAndzoomvoid //旋转和缩放 { angle 1.0f; if angle 360.0f angle 0.0f; display; //设置旋转 multiply 0.01f; if multiply 2.0f // multiply - 0.01f; //if multiply absdy // 通过绝对值判断谁为先变 { quantity absdx; } else { quantity absdy; } } Nx GLfloatdx / GLfloatquantity; //x 方向上的单位增量 Ny GLfloatdy / GLfloatquantity; //y 方向上的单位增量 for x x0, y y0; x next NULL; //初始化NET表 NET *pNET[1024]; for i 0; inext NULL; } glClearGL_COLOR_BUFFER_BIT; // 赋值的窗口显示. glColor3f0.5, 0.5, 0.0; // 设置直线的颜色红色 glBeginGL_POINTS; //扫描并建立NET表 for i 0; ix polypoint[j].x; p-ymax polypoint[j - 1 POINTNUM POINTNUM].y; p-dx polypoint[j - 1 POINTNUM POINTNUM].x - polypoint[j].x / polypoint[j - 1 POINTNUM POINTNUM].y - polypoint[j].y; p-next pNET[i]-next; pNET[i]-next p; } if polypoint[j 1 POINTNUM POINTNUM].ypolypoint[j].y { NET *p new NET; p-x polypoint[j].x; p-ymax polypoint[j 1 POINTNUM POINTNUM].y; p-dx polypoint[j 1 POINTNUM POINTNUM].x - polypoint[j].x / polypoint[j 1 POINTNUM POINTNUM].y - polypoint[j].y; p-next pNET[i]-next; pNET[i]