图形学课程设计报告_第1页
图形学课程设计报告_第2页
图形学课程设计报告_第3页
图形学课程设计报告_第4页
图形学课程设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、可视化报告一、 所选题目长方体的光照效果可视化显示。二、可视化简介可视化(Visualization)是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。它涉及到计算机图形学、图像处理、计算机视觉、计算机辅助设计等多个领域,成为研究数据表示、数据处理、决策分析等一系列问题的综合技术。目前正在飞速发展的虚拟现实技术也是以图形图像的可视化技术为依托的。最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization)技术。可视化技

2、术使人能够在三维图形世界中直接对具有形体的信息进行操作,和计算机直接交流。这种技术已经把人和机器的力量以一种直觉而自然的方式加以统一,这种革命性的变化无疑将极大地提高人们的工作效率。可视化技术赋予人们一种仿真的、三维的并且具有实时交互的能力,这样人们可以在三维图形世界中用以前不可想象的手段来获取信息或发挥自己创造性的思维。机械工程师可以从二维平面图中得以解放直接进入三维世界,从而很快得到自己设计的三维机械零件模型。医生可以从病人的三维扫描图象分析病人的病灶。军事指挥员可以面对用三维图形技术生成的战场地形,指挥具有真实感的三维飞机、军舰、坦克向目标开进并分析战斗方案的效果。更令人惊奇的是目前正在

3、发展的虚拟现实技术,人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视化工具,其中SGI公司推出的GL三维图形库表现突出,易于使用而且功能强大。利用GL开发出来的三维应用软件颇受许多专业技术人员的喜爱,这些三维应用软件已涉及建筑、产品设计、医学、地球科学、流体力学等领域。随着计算机技术的继续发展,GL已经进一步发展成为OpenGL,OpenGL已被认为是高性能图形和交互式视景处理的标准,包括ATT公司UNIX软件实验室、IBM公司、DEC公司、SUN公司、HP公司、Microsoft公司和SGI公司在内的几家在计算机市场占领导地位的大公司都采用了OpenGL图形标准。值得一

4、提的是,由于Microsoft公司在Windows NT中提供OpenGL图形标准,OpenGL将在微机中广泛应用,尤其是OpenGL三维图形加速卡和微机图形工作站的推出,人们可以在微机上实现三维图形应用,如CAD设计、仿真模拟、三维游戏等,从而更有机会、更方便地使用OpenGL及其应用软件来建立自己的三维图形世界。三、题目要求a) 题目要求 对长方体,建立一个点光源,采用环境光和点光源漫反射光的光照模型,应用FLAT明暗处理方法,显示平行投影后的长方体光照效果。b) 任务分析本题目主要包括五个任务,1)长方体表面模型的建立 2)长方体的可见面判断 3)可见面的背光性判断4)可见面光照计算5)

5、可见面光照效果显示。其中,任务1)中,定义三维齐次坐标结构和面的结构;定义顶点表和面表,对长方体绕X轴旋转和绕Y轴旋转。任务2)中对每一个面计算其外法向量及可见性任务3)中对每个可见面计算其光线向量,并判断其是否为背光面。任务4)计算每个见光面的环境光和点光源的漫反射分量。任务5)用该面的光强显示该可见面四、数据可视化流程用户感知社会自然现象数据采集数据处理变换可视化映射可视化流程概念图五、算法流程图六、核心算法描述(1) 判断长方体六个面的可见性首先计算每个面的外法向量N,视线方向为预先给定的方向eye,两个向量进行点积即可判断可见性;若点积结果0,即cos0,则此面可见;点积结果0,即co

6、s=0,即cos=0,则此面为向光面;点积结果0,即cosIsKindOf(RUNTIME_CLASS(CDraw3DDoc);return (CDraw3DDoc*)m_pDocument;#endif /_DEBUG/ CDraw3DView message handlersvoid CDraw3DView:DrawMy3DGraphics()int i;/形体定义ptn=8;pts=new HOMOCOORDptn;/设置长方体pts0.x=1; pts0.y=2; pts0.z=1; pts0.w=1;pts1.x=-1; pts1.y=2; pts1.z=1; pts1.w=1;pt

7、s2.x=-1; pts2.y=-2; pts2.z=1; pts2.w=1;pts3.x=1; pts3.y=-2; pts3.z=1; pts3.w=1;pts4.x=1; pts4.y=2; pts4.z=-1; pts4.w=1;pts5.x=-1; pts5.y=2; pts5.z=-1; pts5.w=1;pts6.x=-1; pts6.y=-2; pts6.z=-1; pts6.w=1;pts7.x=1; pts7.y=-2; pts7.z=-1; pts7.w=1;/给定义面的指针分配内存;fn=6;faces=new PLANEfn;/设置立方体各面faces0.v0=0;

8、faces0.v1=1; faces0.v2=2; faces0.v3=3; faces1.v0=4; faces1.v1=5; faces1.v2=1; faces1.v3=0; faces2.v0=5; faces2.v1=6; faces2.v2=2; faces2.v3=1; faces3.v0=6; faces3.v1=7; faces3.v2=3; faces3.v3=2; faces4.v0=7; faces4.v1=4; faces4.v2=0; faces4.v3=3; faces5.v0=7; faces5.v1=6; faces5.v2=5; faces5.v3=4; p

9、ts2D=new MYPOINTptn;RotateX(30); /绕X轴逆时针旋转30度 RotateY(30); /绕Y轴逆时针旋转30度 /外法向量/N为外法向量,eye为视线方向,light表示点光源位置;u1和u2分别是中间量HOMOCOORD *N,eye,*u1,*u2,light;/L_tensep为点光源强度,L_tense为镜面反射光照强度,ADD_tense为叠加后的光照强度LINTENSE *L_tensep,L_tense,*ADD_tense;L_tensep = new LINTENSEfn;ADD_tense=new LINTENSEfn;float cos_t

10、heta6; /cos_theta为入射光线与外法向量的夹角N=new HOMOCOORDfn;u1=new HOMOCOORDfn;u2=new HOMOCOORDfn;eye.x=0;eye.y=0;eye.z=1;light.x=1;light.y=1;light.z=100;/判断每个面的可见性,并标记 for(i=0;i 0)facesi.bvisible=1; else facesi.bvisible=0;/判断每个面的向光性,见光面为1,背光面为0 for(i=0;i 0) /判断面的向光性 facesi.HeadLight=1; L_tensepi.I_p=1; else fa

11、cesi.HeadLight=0; L_tensepi.I_p=0; cos_thetai=0; /初始化已知数据,材质为金的环境光反射率和漫反射光反射率的RGB分量值L_tense.K_a.red=0.247; L_tense.K_d.red=0.752; L_tense.K_a.blue=0.075; L_tense.K_d.blue=0.226; L_tense.K_a.green=0.200; L_tense.K_d.green=0.606; L_tense.I_a=1; /计算叠加后的光照强度的RGB分量for(i=0;i1?1:ADD_tensei.I.red; ADD_tense

12、i.I.green=L_tense.I_a*L_tense.K_a.green+L_tensepi.I_p*L_tense.K_d.green*cos_thetai;ADD_tensei.I.green=ADD_tensei.I.green1?1:ADD_tensei.I.green; ADD_tensei.I.blue=L_tense.I_a*L_tense.K_a.blue+L_tensepi.I_p*L_tense.K_d.blue*cos_thetai;ADD_tensei.I.blue=ADD_tensei.I.blue1?1:ADD_tensei.I.blue; /平行投影变换fo

13、r(i=0;iptn;i+)pts2Di.x=ptsi.x;pts2Di.y=ptsi.y;/窗口-视区变换实现过程float wxl=-3,wxr=3,wyb=-3,wyt=3;int vxl=0,vxr=500,vyb=0,vyt=400; / 窗口-视区变换 float a=(vxr-vxl)/(wxr-wxl); float b=vxl-wxl*a; float c=(vyt-vyb)/(wyt-wyb); float d=vyb-wyb*c; for(i=0;iptn;i+) pts2Di.x=a*pts2Di.x+b;pts2Di.y=c*pts2Di.y+d; /图形显示CCli

14、entDC dc(this); CBrush NewBrush,*pOldBrush;for(i=0;ifn;i+)dc.BeginPath();NewBrush.CreateSolidBrush(RGB(ROUND(ADD_tensei.I.red*255),ROUND(ADD_tensei.I.green*255),ROUND(ADD_tensei.I.blue*255); pOldBrush=dc.SelectObject(&NewBrush);PLANE f=facesi;if(facesi.HeadLight=1)dc.MoveTo(pts2Df.v0.x,pts2Df.v0.y);

15、dc.LineTo (pts2Df.v1.x,pts2Df.v1.y); dc.LineTo (pts2Df.v2.x,pts2Df.v2.y); dc.LineTo (pts2Df.v3.x,pts2Df.v3.y); dc.LineTo (pts2Df.v0.x,pts2Df.v0.y);dc.EndPath(); dc.FillPath();void CDraw3DView:RotateX(int angle) /绕x轴逆时针旋转float a=angle*PI/180;for(int i=0;iptn;i+)float y,z;y=ptsi.y; z=ptsi.z;ptsi.y=y*cos(a)-z*sin(a);ptsi.z=y*sin(a)+z*cos(a);void CDraw3DView:RotateY(int angle) /绕y轴逆时针旋转float b=angle*PI/180;for(int i=0;iptn;i+)float x,z;x=ptsi.x; z=ptsi.z;

温馨提示

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

评论

0/150

提交评论