计算机图形学试验报告
学生实验实习报告册 学年学期: 课程名称: 学生学院: 专业班级: 学生学号: 学生姓名: 联系电话: 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 display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 设置窗口里面的背景颜色 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90.0f, 1.0f, 1.0f, 20.0f); glLoadIdentity(); gluLookAt(0.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) glLightfv(GL_LIGHT0, GL_POSITION, light_position); } } { glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);//光源环境光强值 glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);//光源漫反射强值 glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);//光源镜面反射强值 glEnable(GL_LIGHT0);//打开该光源 glEnable(GL_LIGHTING);//打开光照 glRotatef(angle, 0.0f, 1.0f, 0.0f); glTranslatef(0.0f, 0.0f, 0.6f); //平移 glScaled(multiply, multiply, multiply); //缩放 glutSolidSphere(0.2, 50, 50); } glutSwapBuffers(); void rotateAndzoom(void) //旋转和缩放 { angle += 1.0f; if (angle = 360.0f) angle = 0.0f; display(); //设置旋转 multiply += 0.01f; if (multiply = 2.0f) // multiply -= 0.01f; //if (multiply abs(dy)) // 通过绝对值判断谁为先变 { quantity = abs(dx); } else { quantity = abs(dy); } } Nx = (GLfloat)dx / (GLfloat)quantity; //x 方向上的单位增量 Ny = (GLfloat)dy / (GLfloat)quantity; //y 方向上的单位增量 for (x = x0, y = y0; x next = NULL; //初始化NET表 NET *pNET[1024]; for (i = 0; inext = NULL; } glClear(GL_COLOR_BUFFER_BIT); // 赋值的窗口显示. glColor3f(0.5, 0.5, 0.0); // 设置直线的颜色红色 glBegin(GL_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]