1、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.SetPointsIndex(2,3);OnDraw(CDC*
2、pDC)CTrans3DDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;/ TODO: 在此处为本机数据添加绘制代码CRect rect;GetClientRect(&rect);pDC-SetMapMode(MM_ANISOTROPIC);SetWindowExt(rect.Width(),rect.Height();SetViewportExt(rect.Width(),-rect.Height();SetViewportOrg(rect.Width()/2,rect.Height()/2);/双缓冲机制CDC M
3、emDC;CBitmap NewBitmap,*pOldBitmap;MemDC.CreateCompatibleDC(pDC);NewBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height(); /兼容位图pOldBitmap = MemDC.SelectObject(&NewBitmap); /将兼容位图选入MemDcMemDC.FillSolidRect(rect,pDC-GetBkColor();MemDC.SetMapMode(MM_ANISOTROPIC);MemDC.SetWindowExt(rect.Width(),
4、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);MoveTo(CP2(-rect.Width()/2,0); /X轴LineTo(CP2(rect.Width()/2,0),&MemDC);MoveTo(CP2(0,-rect.Height()/2); /Y轴LineTo(C
5、P2(0,rect.Height()/2),&/旋转、缩放、正交投影变换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();/绘制动态旋转和缩放的四面体for (int i=0; iSetLineColor(RGB(0,255,0);MoveTo(tans.m_p2ScreenEi.Start);LineTo(tans.m
6、_p2ScreenEi.End,&delete line;/将内存位图拷贝到屏幕BitBlt(-rect.Width()/2,-rect.Height()/2,rect.Width(),rect.Height(),&MemDC,-rect.Width()/2,-rect.Height()/2,SRCCOPY);MemDC.SelectObject(pOldBitmap);NewBitmap.DeleteObject();Invalidate(FALSE); 3.2 程序设计实现及流程图 平移变换矩阵绕x,y,z旋转变换矩阵比例变换矩阵流程图:4 典型测试结果5 实验问题总结 通过这次试验让我知道了要实现三维图形几何变换主要还是依靠二位图形几何变换的变换矩阵,包括平移变换矩阵,绕X、Y、Z旋转变换矩阵,比例变换矩阵,正交投影变换矩阵。通过这几个变换矩阵相乘即可可到三维图形最终的变换矩阵,将其与原来的矩阵做一次相乘即可得到最终矩阵。透视投影变换的过程分为两步:从世界坐标系到观察坐标系的观察变换;从观察坐标系到屏幕坐标系的透视变换。观察变换和透视变换也分别通过一个变换矩阵实现。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1