- 1、本文档共106页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三维变换矩阵
第六章 三维变换和投影 本章内容 6.1 三维几何变换 6.2 三维基本几何变换矩阵 6.3 三维复合变换 6.4 平行投影 6.5 透视投影 6.6 本章小结 6.7 习题 6.1 三维几何变换 6.1.1 三维变换矩阵 6.1.2 三维几何变换 6.1.1 三维变换矩阵 同二维变换一样,三维变换同样引入了齐次坐标技术。 在定义了规范化齐次坐标以后,图形变换就可以表示为图形顶点集合的规范化齐次坐标矩阵与某一变换矩阵相乘的形式。 用规范化齐次坐标表示的三维图形基本几何变换矩阵是一个4×4方阵,简称为三维变换矩阵。 三维变换矩阵 6.1.2 三维几何变换 对于线框模型的变换,通常是以点变换为基础。 三维几何变换的基本方法是把变换矩阵作为一个算子,作用到变换前的图形顶点集合的规范化齐次坐标矩阵上,得到变换后新的图形顶点集合的规范化齐次坐标矩阵。连接变换后的新的图形顶点,可以绘制出变换后的三维图形。 6.2 三维基本几何变换矩阵 三维基本几何变换是指将点从一个坐标位置变换到另一个坐标位置 的过程。 三维基本几何变换和二维基本几何变换一样是相对于坐标原点和坐标轴进行的几何变换,包括平移、比例、旋转、反射和错切5种变换。 因为三维变换矩阵的推导过程和二维变换矩阵的推导过程类似,这里只给出结论。 6.2 三维基本几何变换矩阵 6.2.1 平移变换 6.2.2 比例变换 6.2.3 旋转变换 6.2.4 反射变换 6.2.5 错切变换 6.2.1 平移变换 void CTestView::OnMENU3D()//绘制立方体 { // TODO: Add your command handler code here RedrawWindow(); ReadCube(); DrawCube(); } void CTestView::ReadCube()//读入立方体顶点 { //后面的三维坐标 int a=100;//a为立方体边长 P3D[0][0]=0;P3D[0][1]=0;P3D[0][2]=0;P3D[0][3]=1;//A点(0,0,0) P3D[1][0]=0;P3D[1][1]=a;P3D[1][2]=0;P3D[1][3]=1;//B点(0,a,0) P3D[2][0]=0;P3D[2][1]=a;P3D[2][2]=a;P3D[2][3]=1;//C点(0,a,a) P3D[3][0]=0;P3D[3][1]=0;P3D[3][2]=a;P3D[3][3]=1;//D点(0,0,a) //前面的三维坐标 P3D[4][0]=a;P3D[4][1]=0;P3D[4][2]=0;P3D[4][3]=1;//E点(a,0,0) P3D[5][0]=a;P3D[5][1]=a;P3D[5][2]=0;P3D[5][3]=1;//F点(a,a,0) P3D[6][0]=a;P3D[6][1]=a;P3D[6][2]=a;P3D[6][3]=1;//G点(a,a,a) P3D[7][0]=a;P3D[7][1]=0;P3D[7][2]=a;P3D[7][3]=1;//H点(a,0,a) } void CTestView::DrawCube()//绘制立方体 { CPoint p[4];//定义多边形顶点数组 Transform3DTo2D(P3D,P2D,8); //绘制立方体左面 p[0]=CPoint(ROUND(MaxX/2+P2D[0][0]),ROUND(MaxY/2+P2D[0][1])); p[1]=CPoint(ROUND(MaxX/2+P2D[3][0]),ROUND(MaxY/2+P2D[3][1])); p[2]=CPoint(ROUND(MaxX/2+P2D[7][0]),ROUND(MaxY/2+P2D[7][1])); p[3]=CPoint(ROUND(MaxX/2+P2D[4][0]),ROUND(MaxY/2+P2D[4][1])); Line(p); //绘制立方体后面 p[0]=CPoint(ROUND(MaxX/2+P2D[0][0]),ROUND(MaxY/2+P2D[0][1])); p[1]=CPoint(ROUND(MaxX/2+P2D[1][0]),ROUND(MaxY/2+P2D[1][1])); p[2]=CPoint(ROUND(MaxX/2+P2D[2][0]),ROUND(MaxY/2+P2D[2][1])); p[3]=CPoint(ROUND(MaxX/2+P2D[3][0]),ROUND(MaxY/2+P2D[3][1])); Line(p); //绘制立方体底面
文档评论(0)