西电计算机图形学实验报告_第1页
西电计算机图形学实验报告_第2页
西电计算机图形学实验报告_第3页
西电计算机图形学实验报告_第4页
西电计算机图形学实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 计算机图形学实验报告 学 院: 专业班级: 学 号: 姓 名 使用OpenGL操作三维物体金字塔1、 实验目的使用OpenGL进行三维图形的绘制并能够实行平移、旋转和缩放和在光照等条件下的三维观察。2、 实验概要设计 本次实验利用VS2010 Win32平台和开源图形库OpenGL完成了对一个金字塔的绘制和以不同方式实现观察的操作,该模拟设计能实现基本的图形操作功能。通过本次实验,了解了图形学里使用OpenGL的一些基于操作,了解直线、矩形的绘制操作、旋转、移动和缩操作、不同方式投影的OpenGL实现,不同观察方式的OpenGL实现。本设计包括模式选择模块、图形绘制模块、键盘鼠标控制模块。模

2、式选择模块实在win32控制台上实现,主要实现了选择不同投影方式(透视投影或者正面投影),以及不同的观察模式(变换物体,或者变换观察点位置)。图形绘制模块,该模块根据模式的选择绘制图形,渲染场景。主要实现空心矩形的绘制、投影、光照、对变换操作的响应等。键盘鼠标控制模块,该模块主要实现通过鼠标点击来控制移动,A,D控制缩放,方向键盘控制旋转。(控制观察点模式下“”控制观察点与物体的距离来实现缩放,“,A,D”控制观察者的360度观察,“S,W,”控制观点的俯瞰或者仰视)3、 实验环境 Windows 10,Visual Studio 20154、 实验内容与完成情况1. 创建OpenGL开发环境

3、2. 配置编译环境3. OpenGL的初始化4. 绘制三维立体图形5. 实现图形的平移、旋转、缩放操作6. 调试程序5、 实验过程和步骤1、 三维图形的绘制源代码和实验效果 glBegin(GL_TRIANGLES); / 开始绘制金字塔的各个面 glColor3ub(217,167,22); glNormal3f(0.0,2.0,4.0);/面的法向量 glVertex3f( 0.0f, 1.0f, 0.0f);/ 三角形的上顶点(前侧面) glVertex3f(-1.0f,-1.0f, 1.0f);/ 三角形的左下顶点(前侧面) glVertex3f( 1.0f,-1.0f, 1.0f);

4、/ 三角形的右下顶点(前侧面) glNormal3f(4.0,2.0,0.0); glVertex3f( 0.0f, 1.0f, 0.0f);/ 三角形的上顶点(右侧面) glVertex3f( 1.0f,-1.0f, 1.0f); / 三角形的左下顶点(右侧面) glVertex3f( 1.0f,-1.0f, -1.0f);/ 三角形的右下顶点(右侧面) glNormal3f(0.0,2.0,-4.0); glVertex3f( 0.0f, 1.0f, 0.0f);/ 三角形的上顶点(后侧面) glVertex3f( 1.0f,-1.0f, -1.0f); / 三角形的左下顶点(后侧面) g

5、lVertex3f(-1.0f,-1.0f, -1.0f);/ 三角形的右下顶点(后侧面) glNormal3f(-4.0,2.0,0.0); glVertex3f( 0.0f, 1.0f, 0.0f); / 三角形的上顶点(左侧面) glVertex3f(-1.0f,-1.0f,-1.0f); / 三角形的左下顶点(左侧面) glVertex3f(-1.0f,-1.0f, 1.0f); / 三角形的右下顶点(左侧面) glEnd(); 图1-1 彩色三维金字塔2、 三维金子塔的平移、旋转、缩放(1) 点的平移矩阵平移变换是把点沿着给定的方向移动固定的距离,而在三维空间中,一般通过平移矩阵是实

6、现。p'=TP而平移变换矩阵:T=100010001xyaz0001 图1-2 金字塔分别向左和向右平移(2) 点的缩放矩阵不动点的缩放可以沿着三个坐标轴的方向进行彼此独立的缩放。同时,这三个方向的缩放矩阵可以表示为: p'=SP而平移变换矩阵:S=x000y000z0000 0 01 图1-3 金字塔的放大和缩小(3) 点的旋转矩阵不动点的旋转相对而言很复杂,首先讨论不动点为原点的旋转,这样旋转就有三个自由度,分别独立于三个坐标轴的旋转。这样,就有三个旋转矩阵: 绕z坐标轴转动的变换矩阵Rz=cos-sinsincos00000 00 01001 其中,绕x坐标轴转动的变换矩

7、阵 Rx=100cos00-sin00 sin00 cos001 其中,绕y坐标轴转动的变换矩阵Ry= cos001 sin000-sin000 cos001 因此,任何不动点在原点的旋转矩阵都可以表示为 R=RzRyRx 图1-4 金字塔沿x和y坐标轴旋转 图1-5 金字塔绕原点旋转(4) 光照效果在本次实验中,让金字塔暴露在普通的点光源之下,从而出现阴影效果。在这里,在屏幕右上方和左下方分别定义一个点光源。源代码:glLightfv(GL_LIGHT0,GL_POSITION,light_Position0);glLightfv(GL_LIGHT0,GL_AMBIENT,light_amb

8、ient0);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse0);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular0);glLightfv(GL_LIGHT1,GL_POSITION,light_Position1);glLightfv(GL_LIGHT1,GL_AMBIENT,light_ambient1);glLightfv(GL_LIGHT1,GL_DIFFUSE,light_diffuse1);glLightfv(GL_LIGHT1,GL_SPECULAR,light_specular1);在光照下,

9、金字塔的效果如图: 图1-6 在粉红色光源下的金字塔 图1-7 旋转后的光照效果(5) 投影/ 产生透视投影 gluPerspective(60.0f, fAspect, 1.0, 400.0);/ 产生平面投影if (w <= h) glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange*2.0f, nRange*2.0f); else glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange*2.0f, nRange*2.0f)透视投影效果如下: 图5-8 透视投

10、影6、 出现的问题1. OpenGL的glut库安装错误2. 编译无法通过3. 提示OpenGL 函数参数错误4. 图形渲染的效果不能构成立体图形5. 无法显示平移效果6. 光照时的法向量求解错误7、 对问题的解决办法1. 对于问题2发现是编译头出错,通过调节不是用编译头即可2. 通过不断的查找安装教程,发现安装路径错误,更改过后就安装正确3. 发现是字符集出错,不应该使用unicode 字符集,更换为多字节的字符集程序正常。4. 坐标设置出错,5. 平移的操作应该在 GlBegin()之前完成。6. 将不共面的三个点构成两个向量,再对这两个向量求解叉积即可,不过得注意它的方向。8、 实验思考 通过本次实验,对计算机图形学有了初步的认识,对OpenGL编程进行了初步了解。通过对三维立体图形的绘

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论