版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机图形学课程学习报告 项目题目: 圆柱面图像纹理映射算法目录1、 项目描述.1 1.1圆柱面的建立和二维图像纹理的绑定.11.2坐标系的建立.1二、项目需求.12.1 几何构造的原理.12.2、动画的设计22.3 纹理的设计22.3.1 纹理映射的原理22.3.2 纹理定义2三、项目设计.33.1、窗口设计以及各项功能的实现33.1.1 窗口设计函数33.1.2 点表函数43.1.3 面表函数43.1.4 绘制圆柱函数63.1.5 透视变换函数83.1.6 读入纹理函数83.1.7 背景函数9 3.1.8 时间函数.9 3.1.9 动画控制函数.10四、项目效果.104.1构造图形分析以及
2、坐标系变换的效果.115、 项目总结.116、 参考文献.121、 项目描述 1.1、圆柱的建立和二维图像纹理的绑定 以屏幕客户区中心为体心建立圆柱面的几何模型。读入二维位图图像纹理,将纹理绑定到圆柱上。使用材质慢反射率设置纹理颜色,光源颜色设置为白色。使用Phong明暗处理绘制光照纹理圆柱面动画 1.2、坐标系的建立1>、自定
3、义屏幕三维左手坐标,原点位于客户区中心,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、动画的设计 实现动画
4、的函数 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);Inv
5、alidate(FALSE);CView:OnTimer(nIDEvent);2.3、纹理的设计 2.3.1 纹理映射的原理 使用MFC的资源标签页加载二维图像纹理,DDB位图的标识取为IDB_TEXTURE。将纹理读入二维数组中,将纹理图像绑定到圆柱面的侧面网格顶点上。将图像纹理的颜色值作为材质漫反射率和环境光反射率,镜面反射光设置为白光,使用Phong明暗处理绘制光照纹理圆柱面。 2.3.2 纹理的定义 在CTestView类内添加成员函数ReadVertex(),将纹理绑定到圆柱面侧面的顶点上,CT2类定义了纹理坐标的(u,v)。由于底面和顶面采用三角形网格逼近,所以使用CT2类定义了T
6、exture4和Texture3纹理数组。圆柱的侧面使用周向平均法矢量计算光照。填充底面顶面的三角形面片时,进行了特殊处理。然后添加ReadImage()读入纹理。3、 项目设计3.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("12340542
7、12刘美艳");m_pMainWnd->UpdateWindow();return TRUE;、点表函数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;/法矢量动态数
8、组 double cTheta1,cNum1; V0.x=0;V0.y=0;V0.z=0;/底面中心 T0.u=0;T0.v=0;/闲置 for(int i=0;i<N2+1;i+)/纵向 cNum1=i*cNum; for(int j=0;j<N1;j+)/周向 cTheta1=j*cTheta*PI/180; Vi*N1+j+1.x=r*cos(cTheta1); Vi*N1+j+1.y=cNum1; Vi*N1+j+1.z=r*sin(cTheta1); Ti*N1+j+1.u=(2*PI-cTheta1)/(2*PI)*(bmp.bmWidth-1);/u(0->1)
9、 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;/闲置、面表函数void CMy123054212View:ReadFace()/面表/设置二维动态数组F=new CFace *N2+2;/纵向for(int n=0;n<N2+2;n+)Fn=new CFaceN1;/周向for(int j=0;j<N1;j+)/构造底部三角形面片int te
10、mpj=j+1;if(N1=tempj) tempj=0;/面片的首尾连接int BottomIndex3;/底部三角形面片索引号数组BottomIndex0=0;BottomIndex1=j+1;BottomIndex2=tempj+1;F0j.SetNum(3);for(int k=0;k<F0j.vN;k+)/面片中顶点索引号F0j.vIk=BottomIndexk;for(int i=1;i<N2+1;i+)/构造圆柱体四边形面片for(int j=0;j<N1;j+)int tempi=i+1;int tempj=j+1;if(N1=tempj) tempj=0;i
11、nt 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;k<Fij.vN;k+)Fij.vIk=BodyIndexk; for(j=0;j<N1;j+)/构造顶部三角形面片int tempj=j+1;if(N1=tempj) tempj=0;int TopIndex3;/顶部三角形面片索引号数组TopIndex
12、0=N1*i+1;TopIndex1=N1*(i-1)+tempj+1;TopIndex2=N1*(i-1)+j+1;FN2+1j.SetNum(3);for(int k=0;k<FN2+1j.vN;k+)FN2+1j.vIk=TopIndexk;、绘制圆柱函数void CMy123054212View:DrawObject(CDC *pDC)/绘制圆柱面CalNormal();CZBuffer *zbuf=new CZBuffer;/申请内存zbuf->InitDeepBuffer(800,800,1000);/初始化深度缓冲器CPi3 Point33;/底面与顶面三角形顶点数组
13、CT2 Texture33;/底面与顶面三角形纹理数组CVector Normal33;/底面与顶面三角形法矢量数组CPi3 Point44;/侧面四边形顶点数组CT2 Texture44;/侧面四边形纹理数组CVector Normal44;/侧面四边形法矢量数组for(int i=0;i<N2+2;i+)for(int j=0;j<N1;j+)CVector ViewVector(VFij.vI0,ViewPoint);/面的视矢量ViewVector=ViewVector.Normalize();/单位化视矢量Fij.SetFaceNormal(VFij.vI0,VFij.v
14、I1,VFij.vI2);/计算小面片法矢量Fij.fNormal.Normalize();/单位化法矢量if(Dot(ViewVector,Fij.fNormal)>=0)if(3=Fij.vN)/处理三角形面片for(int m=0;m<Fij.vN;m+)PerProject(VFij.vIm);Point3m=ScreenP;Normal3m=Fij.fNormal;double tempj=j+1;/对三角形面片进行特殊处理Texture30.u=cTheta*(j+0.5)/360.0;Texture30.v=0.0; Texture31.u=cTheta*(j+0.5
15、)/360.0;Texture31.v=0.0;Texture32.u=cTheta*tempj/360.0; Texture32.v=0.0;zbuf->SetPoint(Point3,Normal3,Texture3,3);/初始化zbuf->CreateBucket();/创建桶表zbuf->CreateEdge();/创建边表zbuf->Phong(pDC,ViewPoint,pLight,pMaterial,Image);/填充三角形zbuf->ClearMemory();else/处理四边形面片for(int m=0;m<Fij.vN;m+)Pe
16、rProject(VFij.vIm);Point4m=ScreenP;Normal4m=NFij.vIm;Texture4m=TFij.vIm;if(N1-1=j)/消除图像纹理的接缝Texture42.u=0.0;Texture43.u=0.0;zbuf->SetPoint(Point4,Normal4,Texture4,4);/初始化zbuf->CreateBucket();/创建桶表zbuf->CreateEdge();/创建边表zbuf->Phong(pDC,ViewPoint,pLight,pMaterial,Image);/填充四边形zbuf->Cle
17、arMemory();delete zbuf;、透视变换函数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-N
18、ear);ScreenP.c=ViewP.c;、读入纹理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=ne
19、w COLORREF*bmp.bmHeight;for(int n1=0;n1<bmp.bmHeight;n1+)Imagen1=new COLORREFbmp.bmWidth;for(n1=0;n1<bmp.bmHeight;n1+)for(int n2=0;n2<bmp.bmWidth;n2+)int pos=n1*bmp.bmWidthBytes+4*n2;/颜色分量位置n1=bmp.bmHeight-1-n1;/位图从左下角向右上角Imagen1n2=RGB(impos+2,impos+1,impos); delete im;、背景函数BOOL CMy123054212View:OnEraseBkgnd(CDC* pDC) / TODO: Add your message handler code here and/or call defaultreturn TRUE;、时间函数void CMy123054212View:OnTimer(UINT nIDEvent) / TODO: Add you
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湘教新版必修3历史上册阶段测试试卷含答案
- 二零二五版苗木种植基地土地租赁合同8篇
- 2025年华师大版九年级历史下册月考试卷含答案
- 二零二五版交通事故责任认定与赔偿调解及服务合同3篇
- 2025年度墓地转卖及墓园物业管理合同4篇
- 二零二五年度苗圃场租赁与农业信息化建设合同4篇
- 二零二五年度出租车企业财务审计服务合同3篇
- 二零二五出租车客运服务承包经营合同范本7篇
- 二零二五年度农业合作社农村电商平台运营合同样本4篇
- 二零二五版面粉行业供应链金融服务合同3篇
- 人口老龄化背景下居民养老金融资产配置影响因素研究
- 人教版初中英语单词大全七八九年级(带音标) mp3听力音频下载
- 鲁科版高中化学必修2全册教案
- 人口分布 高一地理下学期人教版 必修第二册
- 子宫内膜异位症诊疗指南
- 教案:第三章 公共管理职能(《公共管理学》课程)
- 诺和关怀俱乐部对外介绍
- 玩转数和形课件
- 保定市县级地图PPT可编辑矢量行政区划(河北省)
- 新苏教版科学六年级下册全册教案(含反思)
- 天然饮用山泉水项目投资规划建设方案
评论
0/150
提交评论