已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学课程学习报告 项目题目: 圆柱面图像纹理映射算法 目录1、 项目描述.1 1.1圆柱面的建立和二维图像纹理的绑定.11.2坐标系的建立.1二、项目需求.1 2.1 几何构造的原理.1 2.2、动画的设计2 2.3 纹理的设计2 2.3.1 纹理映射的原理2 2.3.2 纹理定义2三、项目设计.3 3.1、窗口设计以及各项功能的实现3 3.1.1 窗口设计函数3 3.1.2 点表函数4 3.1.3 面表函数4 3.1.4 绘制圆柱函数6 3.1.5 透视变换函数8 3.1.6 读入纹理函数8 3.1.7 背景函数9 3.1.8 时间函数.9 3.1.9 动画控制函数.10四、项目效果.10 4.1构造图形分析以及坐标系变换的效果.115、 项目总结.116、 参考文献.121、 项目描述 1.1、圆柱的建立和二维图像纹理的绑定 以屏幕客户区中心为体心建立圆柱面的几何模型。读入二维位图图像纹理,将纹理绑定到圆柱上。使用材质慢反射率设置纹理颜色,光源颜色设置为白色。使用Phong明暗处理绘制光照纹理圆柱面动画 1.2、坐标系的建立 1、自定义屏幕三维左手坐标,原点位于客户区中心,x轴水平向右为正,y轴垂直向上为正,z轴指向屏幕内部, 2、建立三维用户右手坐标系O;x,y,z,原点O位于客户区中心,x轴水平向右,y垂直向上,z轴指向读者。2、 项目需求 2.1、几何构造的原理i,ji,j+1i-1,j+1i-1,ji-1,j-1i,j-1 圆柱面采用平面四边形小面逼近,需要根据周向相邻2个小面的法矢量计算平均法矢量。对于索引号(i,j)的顶点,其相邻顶点的索引号如图所示。图中箭头所示为每个小面的边矢量,俩个边矢量的叉积得到小面的法矢量Ni。小面的平均法矢量N的计算公式为N= 圆柱面平均法矢量的计算 2.2、动画的设计 实现动画的函数 void CMy123054212View:OnPlay() / TODO: Add your command handler code here bPlay=bPlay?FALSE:TRUE; if(bPlay)/设置定时器 SetTimer(1,150,NULL); Else KillTimer(1);设定动画时间void CTestView:OnTimer(UINT nIDEvent)/动画时间函数 / TODO: Add your message handler code here and/or call defaultBeta=5;tran.RotateY(Beta);Invalidate(FALSE);CView:OnTimer(nIDEvent); 2.3、纹理的设计 2.3.1 纹理映射的原理 使用MFC的资源标签页加载二维图像纹理,DDB位图的标识取为IDB_TEXTURE。将纹理读入二维数组中,将纹理图像绑定到圆柱面的侧面网格顶点上。将图像纹理的颜色值作为材质漫反射率和环境光反射率,镜面反射光设置为白光,使用Phong明暗处理绘制光照纹理圆柱面。 2.3.2 纹理的定义 在CTestView类内添加成员函数ReadVertex(),将纹理绑定到圆柱面侧面的顶点上,CT2类定义了纹理坐标的(u,v)。由于底面和顶面采用三角形网格逼近,所以使用CT2类定义了Texture4和Texture3纹理数组。圆柱的侧面使用周向平均法矢量计算光照。填充底面顶面的三角形面片时,进行了特殊处理。然后添加ReadImage()读入纹理。3、 项目设计3.1、窗口设计以及各项功能的实现3.1.1窗口设计函数BOOL CMy123054212App:InitInstance() / The one and only window has been initialized, so show and update it.m_pMainWnd-ShowWindow(SW_MAXIMIZE);m_pMainWnd-SetWindowText(1234054212刘美艳);m_pMainWnd-UpdateWindow();return TRUE;3.1.2、点表函数void CMy123054212View:ReadVertex()/点表 double r=144;/圆柱底面半径 h=500;/圆柱的高 cTheta=10;/周向夹角 cNum=10;/纵向间距 N1=360/cTheta;/N1周向网格数 N2=Round(h/cNum);/N2纵向网格数 V=new CP3N1*(N2+1)+2;/顶点动态数组 T=new CT2N1*(N2+1)+2;/纹理动态数组 N=new CVectorN1*(N2+1)+2;/法矢量动态数组 double cTheta1,cNum1; V0.x=0;V0.y=0;V0.z=0;/底面中心 T0.u=0;T0.v=0;/闲置 for(int i=0;iN2+1;i+)/纵向 cNum1=i*cNum; for(int j=0;j1) Ti*N1+j+1.v=Vi*N1+j+1.y/h*(bmp.bmHeight-1);/v(0-1)VN1*(N2+1)+1.x=0;VN1*(N2+1)+1.y=h;VN1*(N2+1)+1.z=0;/顶面中心TN1*(N2+1)+1.u=0;TN1*(N2+1)+1.v=0;/闲置3.1.3、面表函数void CMy123054212View:ReadFace()/面表/设置二维动态数组F=new CFace *N2+2;/纵向for(int n=0;nN2+2;n+)Fn=new CFaceN1;/周向for(int j=0;jN1;j+)/构造底部三角形面片int tempj=j+1;if(N1=tempj) tempj=0;/面片的首尾连接int BottomIndex3;/底部三角形面片索引号数组BottomIndex0=0;BottomIndex1=j+1;BottomIndex2=tempj+1;F0j.SetNum(3);for(int k=0;kF0j.vN;k+)/面片中顶点索引号F0j.vIk=BottomIndexk;for(int i=1;iN2+1;i+)/构造圆柱体四边形面片for(int j=0;jN1;j+)int tempi=i+1;int tempj=j+1;if(N1=tempj) tempj=0;int BodyIndex4;/圆柱体四边形面片索引号数组BodyIndex0=(i-1)*N1+j+1;BodyIndex1=(tempi-1)*N1+j+1;BodyIndex2=(tempi-1)*N1+tempj+1;BodyIndex3=(i-1)*N1+tempj+1;Fij.SetNum(4);for(int k=0;kFij.vN;k+)Fij.vIk=BodyIndexk; for(j=0;jN1;j+)/构造顶部三角形面片int tempj=j+1;if(N1=tempj) tempj=0;int TopIndex3;/顶部三角形面片索引号数组TopIndex0=N1*i+1;TopIndex1=N1*(i-1)+tempj+1;TopIndex2=N1*(i-1)+j+1;FN2+1j.SetNum(3);for(int k=0;kInitDeepBuffer(800,800,1000);/初始化深度缓冲器CPi3 Point33;/底面与顶面三角形顶点数组CT2 Texture33;/底面与顶面三角形纹理数组CVector Normal33;/底面与顶面三角形法矢量数组CPi3 Point44;/侧面四边形顶点数组CT2 Texture44;/侧面四边形纹理数组CVector Normal44;/侧面四边形法矢量数组for(int i=0;iN2+2;i+)for(int j=0;j=0)if(3=Fij.vN)/处理三角形面片for(int m=0;mSetPoint(Point3,Normal3,Texture3,3);/初始化zbuf-CreateBucket();/创建桶表zbuf-CreateEdge();/创建边表zbuf-Phong(pDC,ViewPoint,pLight,pMaterial,Image);/填充三角形zbuf-ClearMemory();else/处理四边形面片for(int m=0;mSetPoint(Point4,Normal4,Texture4,4);/初始化zbuf-CreateBucket();/创建桶表zbuf-CreateEdge();/创建边表zbuf-Phong(pDC,ViewPoint,pLight,pMaterial,Image);/填充四边形zbuf-ClearMemory();delete zbuf;3.1.5、透视变换函数void CMy123054212View:PerProject(CP3 P)/透视变换CP3 ViewP;ViewP.x=P.x*k3-P.z*k1;/观察坐标系三维坐标ViewP.y=-P.x*k8+P.y*k2-P.z*k7;ViewP.z=-P.x*k6-P.y*k4-P.z*k5+R;ViewP.c=P.c;ScreenP.x=d*ViewP.x/ViewP.z;/屏幕坐标系三维坐标ScreenP.y=Round(d*ViewP.y/ViewP.z);ScreenP.z=Far*(1-Near/ViewP.z)/(Far-Near);ScreenP.c=ViewP.c;3.1.6、读入纹理void CMy123054212View:ReadImage()/读入纹理CBitmap NewBitmap;NewBitmap.LoadBitmap(IDB_TEXTURE);/调入DDB位图NewBitmap.GetBitmap(&bmp);/将CBitmap的信息保存到Bitmap结构体中int nbytesize=bmp.bmWidthBytes*bmp.bmHeight;im=new BYTEnbytesize;NewBitmap.GetBitmapBits(nbytesize,(LPVOID)im);Image=new COLORREF*bmp.bmHeight;for(int n1=0;n1bmp.bmHeight;n1+)Imagen1=new COLORREFbmp.bmWidth;for(n1=0;n1bmp.bmHeight;n1+)for(int n2=0;n2SetCheck(TRUE);pCmdUI-SetText(停止);elsepCmdUI-SetCheck(FALSE);pCmdUI-SetText(开始);4、 项目效果4.1构造图形分析以及坐标系变换的效果5、 项目总结 本项目将一幅位图映射到圆柱面上,并进行了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025关于财产权益质押借款合同模板
- 急性胃炎病历书写模板及范文
- 2025建筑吊篮租赁合同模板
- 2025年大学日语选修题库及答案
- 2025北京燃气集团校园招聘30人笔试历年备考题库附带答案详解2套试卷
- 2025北京中邮资产管理有限公司招聘1人笔试历年常考点试题专练附带答案详解2套试卷
- 2025云南昭通发展集团有限责任公司中层管理岗招聘3人笔试历年备考题库附带答案详解2套试卷
- 出租商铺合同
- 财税行业面试题及答案
- 2025中国电科2所校园招聘笔试历年难易错考点试卷带答案解析2套试卷
- 【12篇】新部编版小学语文六年级上册【课内外阅读理解专项训练(完整版)】及答案
- 2025年全国消防安全知识竞赛题库及答案(完整版)
- 人才培养方案答辩汇报
- 2024年9月电工三级试题与答案
- 2025及未来5年中国花卉肥市场调查、数据监测研究报告
- 英语A级常用词汇
- 新能源汽车技术职业生涯人物访谈报告
- 腹腔镜下胰十二指肠切除术的手术配合
- 工厂生产经理薪酬机制
- 2023年02月上海申康医疗卫生建设工程公共服务中心招考聘用笔试题库含答案解析
- 外研版小学英语单词表汇总全带音标(一年级起点)
评论
0/150
提交评论