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

下载本文档

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

文档简介

1、计算机图形学实验报告实验H一真实感图形一、实验教学目标与基本要求初步实现真实感图形,并实践图形的造型与变换等。二、理论基础运用几何造型,几何、投影及透视变换、真实感图形效果(消隐、纹理、光 照等)有关知识实现。.用给定地形高程数据绘制出地形图;.绘制一(套)房间,参数自定。三.算法设计与分析真实感图形绘制过程中,由于投影变换失去了深度信息,往往导致图形的二 义性。要消除这类二义性,就必须在绘制时消除被遮挡的不可见的线或面, 习惯 上称之为消除隐藏线和隐藏面,或简称为消隐,经过消隐得到的投影图称为物体 的真实图形。消隐处理是计算机绘图中一个引人注目的问题, 目前已提出多种算法,基本 上可以分为两

2、大类: 即物体空间方法和图象空间方法。物体空间方法是通过比 较物体和物体的相对关系来决定可见与不可见的;而图象空间方法则是根据在图象象素点上各投影点之间的关系来确定可见与否的。用这两类方法就可以消除 凸型模型、凹形模型和多个模型同时存在时的隐藏面。.消隐算法的实现.物体空间的消隐算法物体空间法是在三维坐标系中,通过分析物体模型间的几何关系,如物体的 几何位置、与观察点的相对位置等,来进行隐藏面判断的消隐算法。世界坐标系 是描述物体的原始坐标系,物体的世界坐标描述了物体的基本形状。 为了更好地 观察和描述物体,经常需要对其世界坐标进行平移和旋转, 而得到物体的观察坐 标。物体的观察坐标能得到描述

3、物体的更好视角,所以物体空间法通常都是在观 察坐标系中进行的。观察坐标系的原点一般即是观察点。 物体空间法消隐包括两 个基本步骤,即三维坐标变换和选取适当的隐藏面判断算法。选择合适的观察坐标系不但可以更好地描述物体,而且可以大大简化和降低消隐算法的运算。因此,利用物体空间法进行消隐的第一步往往是将物体所处的 坐标系转换为适当的观察坐标系。这需要对物体进行三维旋转和平移变换。常用的物体空间消隐算法包括平面公式法、径向预排序法、径向排序法、隔 离平面法、深度排序法、光线投射法和区域子分法。其中前三种算法最常用,它们的基础都是背面消 隐原理。所谓背面消隐原理,即是相对观察点来说朝向后面的物体表面是不

4、可见 的,应被隐藏。下面只对平面公式法作详细介绍,其他方法可参看有关文献。根据解析几何原理,通过标准的平面方程可以判断给定点是在平面的正面还是背面。平面公式法利用此原理来判断观察点位于物体表面的哪一面,如位于背面一侧,则表面不可见,应被消隐;反之则可见。对物体的任意表面,可将其划分为若干个平面,在根据平面上任意三点的坐标可以求得其平面方程。标准的平面方程为:Ax+By+Cz+D=0其中A、B C D为决定平面的常数。当把一个平面想象成一个凸型多面体 时,设观察点坐标为(x, y, z),如果:Ax+By+Cz+D=。则观察点(x, y, z)是该平面表面上的一个点;Ax+By+Cz+D。则观察

5、点(x, y, z)在凸型多面体内部(称该表面是 不可见的或隐藏的);Ax+By+Cz+D0,则平面不可见,应被隐藏;DIg 二 IagKag I pgKdg(L N) IpgKsg(RV)n.Ib = IabKaIpbKdb(L N)+IpbKsb(R V)n3)绘制真实感图形下面我们采 OpenGL实现地球绕太阳的公转和月球绕地球的公转并自身带有一 定速率的自转。在 DrawScene函数中先画太阳椭圆线(DrawSunEllipse),在画太阳 (DrawSun(),其次地球(DrawEarth(),在画地球椭圆线(DrawEarthEllipse(), 最后画月亮(DrawMoon()

6、。下面分别介绍各个图形是怎样表现出来的。DrawSunEllipse():画椭圆线是根据方程x*x/a*a+y*y/b*b=1 ;转换为三角表达形式:x=a*cos(angle), y=b*sin(angle);使angle角度在0,2*PI中变化是绘点便可得到一个以点组成的椭DrawSun():画太阳比较简单,直接绑定纹理(glBindTexture(),在绘球(gluSphere()即 可。DrawEarth():想要在绘出地球的运行轨迹,即地球不论怎样转都在太阳的椭圆上,即须将进行模型平移(glTranslatef(),将当前的坐标系移到太阳椭圆的位置上来。考虑 到绘制太阳和其椭圆时是在

7、当前坐标系上进行绘制的,现在平移至太阳椭圆上, 即 只需在 x , z轴上分别平移 x=a*cos ( angle) , z=b*sin ( angle),即 glTranslatef(x,0,z);在到这个坐标系上来进行绘制;但此时地球并未随地球而转 动,想实现这个效果可将模型平移中的 x, z值变化,这里采用程序的多线程性, 这里在Revolution。中while (TRUE)循环所有的angle角度值。注意因为系统 处理速度较快,若不在x, z中设置相应的暂停函数,则很难看出效果,这里用 Sleep (20)来暂停。DrawEarthEllipse():绘制地球椭圆时,注意此时的坐标系

8、已在地球的位置上了,除非调用 glLoadIdentity()重置坐标系函数。同绘制太阳椭圆原理一样,采用椭圆方程,只 不过这里的椭圆大小是太阳椭圆的7倍,即x= ( a/7.0) *cos (angle), z=(b/7.0)*sin(angle)DrawMoon ():绘制月球,同样月球是在地球的轨道上运行,同理,亦要平移 模型坐标系,使 x= (a/7.0) *cos (angle), z= (b/7.0)*sin(angle),同地球公转一 样设置在多线程函数中 Revolution (),调用glTransferf(x, 0, z)定位到地球轨迹 上,并实现月亮的公转。5视角的变换和

9、视点的平移此程序可通过上、下键来进行视点位置的前移或后移;通过左右实现视线方 向的左右变换。通过PgUp键实现视线向上翻转,通过PgDn实现实现向下翻转: 在说其平移和变换时,先介绍 glLookAt ()函数,前三个函数为视点方向,中 间三个为参考点(=视点方向+实现方向),后后三个参数为成像正立,一般设置 为 0 , 1 , 0。初始化视 x=0.0f,y=0.0f,z=5.0f;在定义视线位置 lx=0.0f,ly=0.0f,lz=-1.0f ; glLookAt(x,y,z,x+lx,y+ly,z+lz,0,1,0);视点位置平移:在xz平面内,仅需改变x, z值即可;前移:x+=lx

10、* (一定速值); z+=lz* (一定速值);同理,后移x-=lx* (一定速值);z-=lz* (一定速值); 视线方向改变:当视线向右变换时,此时视角(MoveAngel按一定速率自增)改 变,xz 平面内 lx, lz 值改变,即 lx=sin (MoveAngle) ,lz=-cos(MoveAngle);同 理视线左边换时,MoveAngle 按一定速率自减,使lx=sin (MoveAngle) ,lz=-cos(MoveAngle);PgUp, PgDn的图像翻转实现:同理类似与视线的变换,只不过变换的平面不一 样,PgUp和PgDn的上下翻转是在yz平面内实现,且在视线上下变换的同时, y点的视点位置亦要随之改变,这也就是翻转与视线变换的不同之所在了。四、程序调试及结果的分析本程序运行环境为 VC下的opengl环境。实验效果:按“上、下”键可实现视点的前移和后退。按“左、右”键可实现视线的左右变换。按“PgUp、PgDn”键可实现实现的图像的翻转。按“L”键可实现光源的启用或关闭。由于实验代码比较长,本实验暂不将代码附在实验报告中。运行结果展示:关闭灯光后:五.实验心得及建议.通过这次实验,我对 OPENGL有了进一步的了解,也增添了

温馨提示

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

最新文档

评论

0/150

提交评论