三維圖形幾何變換與投影變換_第1頁
三維圖形幾何變換與投影變換_第2頁
三維圖形幾何變換與投影變換_第3頁
三維圖形幾何變換與投影變換_第4頁
三維圖形幾何變換與投影變換_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1 實驗目的1)掌握4*4矩陣乘法運算的編程實現(xiàn)。2)掌握平移、比例、旋轉(zhuǎn)三種基本三維幾何變換矩陣生成。3)掌握正交投影圖的生成和繪制方法。2 實驗要求1)三維坐標系的原點位于屏幕中心,X軸水平向右,Y軸垂直向上,Z軸垂直于坐標屏幕,指向屏幕外。2)設(shè)計實現(xiàn)三維圖形變換類,具有平移、比例、旋轉(zhuǎn)三維幾何變換功能,以及正交投影變換功能。3)使用第二章的直線類繪制正四面體的是三維線框模型,要求體心位于坐標原點,使正四面體同時繞Y軸勻速旋轉(zhuǎn),并相對于體心點來回縮放。4)使用雙緩沖機制,繪制正四面體三維線框模型的二維正交投影圖,要求投影到XOY平面。3 詳細設(shè)計 3.1 核心算法及類型設(shè)計void CT

2、rans3DView: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);

3、void CTrans3DView:OnDraw(CDC*pDC)CTrans3DDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;/ TODO: 在此處為本機數(shù)據(jù)添加繪制代碼CRect rect;GetClientRect(&rect);pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(rect.Width(),rect.Height();pDC->SetViewportExt(rect.Width(),-rect.Height();pDC-&

4、gt;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->GetBkColo

5、r();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; /動態(tài)創(chuàng)建直線繪制類對象/繪制坐標軸line->SetLineColor(RGB(0,0,0);line->MoveTo(CP2(-rect.Width()/2,0); /

6、X軸line->LineTo(CP2(rect.Width()/2,0),&MemDC);line->MoveTo(CP2(0,-rect.Height()/2); /Y軸line->LineTo(CP2(0,rect.Height()/2),&MemDC);/旋轉(zhuǎn)、縮放、正交投影變換CTrans3 tans;tans.SetPoints(P,4);/在0.52.0之間縮放static double s = 1.0;static double step = 0.01;if(s>=2.0 | s<=0.5)step = -step;s += step

7、;tans.Scale(s,s,s);/繞Y軸勻速逆時針旋轉(zhuǎn)static float theta = 0.0;theta += 1.0;if(theta > 360)theta = 0.0;tans.RotateY(theta);/二維正交投影tans.ProjXOY();/繪制動態(tài)旋轉(zhuǎn)和縮放的四面體for (int i=0; i<6; i+)line->SetLineColor(RGB(0,255,0);line->MoveTo(tans.m_p2ScreenEi.Start);line->LineTo(tans.m_p2ScreenEi.End,&Me

8、mDC);delete line;/將內(nèi)存位圖拷貝到屏幕pDC->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 程序設(shè)計實現(xiàn)及流程圖 平移變換矩陣繞x,y,z旋轉(zhuǎn)變換矩陣比例變換矩陣流程圖:4 典型測試結(jié)果5 實驗問題總結(jié) 通過這次試驗讓我知道了要實現(xiàn)三維圖形幾何變換主要還是依靠二位圖形幾何變換的變換矩陣,包括平移變換矩陣,繞X、Y、Z旋轉(zhuǎn)變換矩陣,比例變換矩陣,正交

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論