《正交投影(图形学)》由会员分享,可在线阅读,更多相关《正交投影(图形学)(4页珍藏版)》请在金锄头文库上搜索。
1、课程名称计算机图形 学班级实验日期2014/5/19 姓名学号实验成绩实验名称正交投影算法实 验 目 的 及 要 求1 学习立方体的几何模型;2 学习了解正交投影变换矩阵;3 熟悉立方体线框模型绘制方法。实 验 环 境VC+6.0 实 验 内 容在屏幕客户区中心绘制立方体的二维正交投影线框图,通过工具栏的“动画”图标按 钮旋转立方体算法描述及实验步骤1、 读入立方体的8 个顶点构成的顶点表与6个表面构成的表面表;2、 使用正交投影矩阵在屏幕坐标系内绘制立方体的正投影,也即将立方体的z 坐标取 为零绘制其二维投影;3、 设计三维几何变换类CTransform ,使用类对象旋转立方体;4、 使用双
2、缓冲技术绘制立方体旋转动画。太原工业学院计算机工程系 实 验 报 告调试过程及实验结果总结1.会绘制立方体线框模型;2.掌握了立方体二维正交投影图的绘制、旋转方法。附录1、 立方体点表 void CTestView:ReadPoint()/点表 / 顶点的三维坐标(x,y,z),立方体边长为2a double a=150; P0.x=-a;P0.y=-a;P0.z=-a; P1.x=+a;P1.y=-a;P1.z=-a; P2.x=+a;P2.y=+a;P2.z=-a; P3.x=-a;P3.y=+a;P3.z=-a; P4.x=-a;P4.y=-a;P4.z=+a; P5.x=+a;P5.y
3、=-a;P5.z=+a; P6.x=+a;P6.y=+a;P6.z=+a; P7.x=-a;P7.y=+a;P7.z=+a; 2、 立方体面表 void CTestView:ReadFace()/面表 / 面的顶点数和面的顶点索引 F0.SetNum(4);F0.vI0=4;F0.vI1=5;F0.vI2=6;F0.vI3=7;/ 前面 F1.SetNum(4);F1.vI0=0;F1.vI1=3;F1.vI2=2;F1.vI3=1;/ 后面 F2.SetNum(4);F2.vI0=0;F2.vI1=4;F2.vI2=7;F2.vI3=3;/ 左面F3.SetNum(4);F3.vI0=1;F
4、3.vI1=2;F3.vI2=6;F3.vI3=5;/ 右面 F4.SetNum(4);F4.vI0=2;F4.vI1=3;F4.vI2=7;F4.vI3=6;/ 顶面F5.SetNum(4);F5.vI0=0;F5.vI1=1;F5.vI2=5;F5.vI3=4;/ 底面 3、 绘制立方体线框模型 void CTestView:DrawObject(CDC* pDC)/绘制立方体线框 CP3 ScreenP,t; CLine *line=new CLine; for(int nFace=0;nFaceMoveTo(pDC,ScreenP); t=ScreenP; else line-Line
5、To(pDC,ScreenP); line-LineTo(pDC,t);/闭合多边形 delete line; 4、 动画按钮函数 void CTestView:OnPlay()/动画按钮函数 / TODO: Add your command handler code here bPlay=bPlay?FALSE:TRUE; if(bPlay)/设置定时器SetTimer(1,150,NULL); else KillTimer(1); 5、 定时器处理函数 void CTestView:OnTimer(UINT nIDEvent)/定时器处理函数 / TODO: Add your messag
6、e handler code here and/or call default Alpha=5;Beta=5; tran.RotateX(Alpha); tran.RotateY(Beta); Invalidate(FALSE); CView:OnTimer(nIDEvent); 6、 动画按钮控制状态函数 void CTestView:OnUpdatePlay(CCmdUI* pCmdUI)/动画按钮状态函数 / TODO: Add your command update UI handler code here if(bPlay) pCmdUI-SetCheck(TRUE); pCmdUI-SetText(“停止 “); else pCmdUI-SetCheck(FALSE); pCmdUI-SetText(“开始 “);