三维图形几何变换与投影变换WORD.doc

上传人:doc321 文档编号:14012800 上传时间:2022-01-30 格式:DOC 页数:7 大小:120.50KB
返回 下载 相关 举报
三维图形几何变换与投影变换WORD.doc_第1页
第1页 / 共7页
三维图形几何变换与投影变换WORD.doc_第2页
第2页 / 共7页
三维图形几何变换与投影变换WORD.doc_第3页
第3页 / 共7页
三维图形几何变换与投影变换WORD.doc_第4页
第4页 / 共7页
三维图形几何变换与投影变换WORD.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《三维图形几何变换与投影变换WORD.doc》由会员分享,可在线阅读,更多相关《三维图形几何变换与投影变换WORD.doc(7页珍藏版)》请在三一文库上搜索。

1、文档可能无法思考全面,请浏览后下载! 1 实验目的1)掌握4*4矩阵乘法运算的编程实现。2)掌握平移、比例、旋转三种基本三维几何变换矩阵生成。3)掌握正交投影图的生成和绘制方法。2 实验要求1)三维坐标系的原点位于屏幕中心,X轴水平向右,Y轴垂直向上,Z轴垂直于坐标屏幕,指向屏幕外。2)设计实现三维图形变换类,具有平移、比例、旋转三维几何变换功能,以及正交投影变换功能。3)使用第二章的直线类绘制正四面体的是三维线框模型,要求体心位于坐标原点,使正四面体同时绕Y轴匀速旋转,并相对于体心点来回缩放。4)使用双缓冲机制,绘制正四面体三维线框模型的二维正交投影图,要求投影到XOY平面。3 详细设计 3

2、.1 核心算法及类型设计void CTrans3DView:BuildPointEdge()double d=400;P0.x=d/2; P0.y=d/2; P0.z=d/2;P1.x=d/2; P1.y=-d/2; P1.z=-d/2;P2.x=-d/2; P2.y=-d/2; P2.z=d/2;P3.x=-d/2; P3.y=d/2; P3.z=-d/2;E0.SetPointsIndex(0,1);E1.SetPointsIndex(0,2);E2.SetPointsIndex(0,3);E3.SetPointsIndex(1,2);E4.SetPointsIndex(1,3);E5.S

3、etPointsIndex(2,3);void CTrans3DView:OnDraw(CDC*pDC)CTrans3DDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;/ TODO: 在此处为本机数据添加绘制代码CRect rect;7 / 7GetClientRect(&rect);pDC-SetMapMode(MM_ANISOTROPIC);pDC-SetWindowExt(rect.Width(),rect.Height();pDC-SetViewportExt(rect.Width(),-rect.Height

4、();pDC-SetViewportOrg(rect.Width()/2,rect.Height()/2);/双缓冲机制CDC MemDC;CBitmap NewBitmap,*pOldBitmap;MemDC.CreateCompatibleDC(pDC);NewBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height(); /兼容位图pOldBitmap = MemDC.SelectObject(&NewBitmap); /将兼容位图选入MemDcMemDC.FillSolidRect(rect,pDC-GetBkColor();

5、MemDC.SetMapMode(MM_ANISOTROPIC);MemDC.SetWindowExt(rect.Width(),rect.Height();MemDC.SetViewportExt(rect.Width(),-rect.Height();MemDC.SetViewportOrg(rect.Width()/2,rect.Height()/2);Line *line = new Line; /动态创建直线绘制类对象/绘制坐标轴line-SetLineColor(RGB(0,0,0);line-MoveTo(CP2(-rect.Width()/2,0); /X轴line-LineT

6、o(CP2(rect.Width()/2,0),&MemDC);line-MoveTo(CP2(0,-rect.Height()/2); /Y轴line-LineTo(CP2(0,rect.Height()/2),&MemDC);/旋转、缩放、正交投影变换CTrans3 tans;tans.SetPoints(P,4);/在0.52.0之间缩放static double s = 1.0;static double step = 0.01;if(s=2.0 | s 360)theta = 0.0;tans.RotateY(theta);/二维正交投影tans.ProjXOY();/绘制动态旋转和

7、缩放的四面体for (int i=0; iSetLineColor(RGB(0,255,0);line-MoveTo(tans.m_p2ScreenEi.Start);line-LineTo(tans.m_p2ScreenEi.End,&MemDC);delete line;/将内存位图拷贝到屏幕pDC-BitBlt(-rect.Width()/2,-rect.Height()/2,rect.Width(),rect.Height(),&MemDC,-rect.Width()/2,-rect.Height()/2,SRCCOPY);MemDC.SelectObject(pOldBitmap);

8、NewBitmap.DeleteObject();Invalidate(FALSE); 3.2 程序设计实现及流程图 平移变换矩阵绕x,y,z旋转变换矩阵比例变换矩阵流程图:4 典型测试结果5 实验问题总结 通过这次试验让我知道了要实现三维图形几何变换主要还是依靠二位图形几何变换的变换矩阵,包括平移变换矩阵,绕X、Y、Z旋转变换矩阵,比例变换矩阵,正交投影变换矩阵。通过这几个变换矩阵相乘即可可到三维图形最终的变换矩阵,将其与原来的矩阵做一次相乘即可得到最终矩阵。透视投影变换的过程分为两步:从世界坐标系到观察坐标系的观察变换;从观察坐标系到屏幕坐标系的透视变换。观察变换和透视变换也分别通过一个变换矩阵实现。 (注:可编辑下载,若有不当之处,请指正,谢谢!)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1