計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告_第1頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告_第2頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告_第3頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告_第4頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)設(shè)計(jì)名稱 正四面體學(xué)號(hào) 學(xué)生 張彬目錄1項(xiàng)目描述32任務(wù)配置33效果圖34原理45算法56源代碼57 總結(jié)10項(xiàng)目描述本項(xiàng)目使用計(jì)算機(jī)圖形學(xué)的知識(shí),在屏幕是繪制一個(gè)四個(gè)面涂上不同顏色的正四面體,并且正四面體繞著其中一個(gè)頂點(diǎn)轉(zhuǎn)動(dòng)。任務(wù)配置本程序使用Visual C+ 6.0,建立一個(gè)基于單文檔的的項(xiàng)目。效果圖原理本程序的原理為先確定原始的正四面體的4個(gè)頂點(diǎn),然后對(duì)其進(jìn)行3維變換,再對(duì)其進(jìn)行透視變化,然后將3維坐標(biāo)轉(zhuǎn)換為2維坐標(biāo),再判斷每個(gè)面是否可見(jiàn)對(duì)其進(jìn)行動(dòng)態(tài)消影。再將其畫到屏幕上。程序使用了雙緩沖,并且使用定時(shí)器對(duì)坐標(biāo)進(jìn)行改變。算法對(duì)坐標(biāo)進(jìn)行3維轉(zhuǎn)換的坐標(biāo)為先繞x轉(zhuǎn),再繞y

2、轉(zhuǎn),最后繞z轉(zhuǎn),(這3個(gè)矩陣可以參考計(jì)算機(jī)圖形學(xué)基礎(chǔ)教程110面)將3個(gè)矩陣相乘可得 ZH00=cos(b)*cos(c);ZH01=cos(b)*sin(c);ZH02=-sin(b);ZH10=cos(c)*sin(a)*sin(b)-cos(a)*sin(c);ZH11=sin(c)*sin(a)*sin(b)+cos(c)*cos(a);ZH12=sin(a)*cos(b);ZH20=cos(a)*sin(b)*cos(c)+sin(a)*sin(c);ZH21=cos(a)*sin(b)*sin(c)-cos(c)*sin(a);ZH22=cos(a)*cos(b);,對(duì)其進(jìn)行透視變

3、換時(shí)乘以矩陣(這個(gè)矩陣可以參考計(jì)算機(jī)圖形學(xué)基礎(chǔ)教程123面),將,都設(shè)置為45度,矩陣如下 TZ00=-sqrt(2)/2;TZ01=-0.5;TZ02=-0.5;TZ03=0;TZ10=sqrt(2)/2;TZ11=-0.5;TZ12=-0.5;TZ13=0;TZ20=0;TZ21=sqrt(2)/2;TZ22=-sqrt(2)/2;TZ23=0;TZ30=0;TZ31=0;TZ32=700;TZ33=1;將3維坐標(biāo)轉(zhuǎn)換為2維坐標(biāo)時(shí),使用公式 x=x1/z1*d,y=y1/z1*d;對(duì)其進(jìn)行動(dòng)態(tài)消隱時(shí),則在平面上取兩個(gè)向量做差乘,獲得其法向量,然后與視向量做數(shù)量級(jí),并對(duì)其結(jié)果判斷,大于0則畫

4、出該面,否則不畫出該面。另外在框架類里對(duì)界面做了改動(dòng),去掉了工具欄和狀態(tài)欄,并且改變了應(yīng)用程序圖標(biāo)。源代碼1.View中得代碼CForYuView:CForYuView() SHU=TRUE;yu0=TRUE;yu1=TRUE;yu2=TRUE;yu3=TRUE;AI=100.0;a=0.1;b=0.2;c=0.3;F3D00=4; F3D01=0; F3D02=0; F3D03=1;F3D10=AI;F3D11=0; F3D12=0; F3D13=1;F3D20=AI/2; F3D21=0; F3D22=AI/2*sqrt(3); F3D23=1;F3D00=AI/2; F3D01=AI*s

5、qrt(6)/3;F3D02=AI/6*sqrt(3);F3D03=1; ZH00=1;ZH01=0;ZH02=0;ZH03=0;ZH10=0;ZH11=1;ZH12=0;ZH13=0;ZH20=0;ZH21=0;ZH22=1;ZH23=0;ZH30=0;ZH31=0;ZH32=0;ZH33=1; TZ00=-sqrt(2)/2;TZ01=-0.5;TZ02=-0.5;TZ03=0;TZ10=sqrt(2)/2;TZ11=-0.5;TZ12=-0.5;TZ13=0;TZ20=0;TZ21=sqrt(2)/2;TZ22=-sqrt(2)/2;TZ23=0;TZ30=0;TZ31=0;TZ32=7

6、00;TZ33=1;void CForYuView:OnDraw(CDC* pDC)CForYuDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);Doublebuffer();void CForYuView:Doublebuffer()GetClientRect(&rect);CDC*pDC=GetDC();pDC-SetMapMode(MM_ANISOTROPIC);pDC-SetWindowExt(rect.Width(),rect.Height();pDC-SetViewportExt(rect.Width(),-rect.Height();pDC

7、-SetViewportOrg(rect.Width()/2,rect.Height()/2);CDC dc;dc.CreateCompatibleDC(pDC); CBitmap bitmap,*oldbitmap;bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height();oldbitmap=dc.SelectObject(&bitmap);CPen pen,*oldpen;pen.CreatePen(PS_SOLID,1,0x00FFFFFF);oldpen=dc.SelectObject(&pen);dc.SetMapMod

8、e(MM_ANISOTROPIC);dc.SetWindowExt(rect.Width(),rect.Height();dc.SetViewportExt(rect.Width(),-rect.Height();dc.SetViewportOrg(rect.Width()/2,rect.Height()/2);Transform();TOUSHI();TranslateFrom3DTo2D();XW();DrawObject(&dc); pDC-BitBlt(-rect.Width()/2,-rect.Height()/2,rect.Width(),rect.Height(),&dc,-re

9、ct.Width()/2,-rect.Height()/2,SRCCOPY);dc.SelectObject(oldpen);pen.DeleteObject();dc.SelectObject(oldbitmap);bitmap.DeleteObject();dc.DeleteDC();ReleaseDC(pDC);void CForYuView:OnTimer(UINT nIDEvent) a+=0.3;b+=0.2;c+=0.1;ZH00=cos(b)*cos(c);ZH01=cos(b)*sin(c);ZH02=-sin(b);ZH10=cos(c)*sin(a)*sin(b)-cos

10、(a)*sin(c);ZH11=sin(c)*sin(a)*sin(b)+cos(c)*cos(a);ZH12=sin(a)*cos(b);ZH20=cos(a)*sin(b)*cos(c)+sin(a)*sin(c);ZH21=cos(a)*sin(b)*sin(c)-cos(c)*sin(a);ZH22=cos(a)*cos(b);Invalidate(FALSE);CView:OnTimer(nIDEvent);void CForYuView:OnSize(UINT nType, int cx, int cy) CView:OnSize(nType, cx, cy);SetTimer(1

11、,100,NULL);void CForYuView:Transform()for(int i=0;i4;i+)for(int j=0;j4;j+)S3Dij=0;for(int k=0;k4;k+)S3Dij+=F3Dik*ZHkj;void CForYuView:TOUSHI()for(int i=0;i4;i+)for(int j=0;j4;j+)T3Dij=0;for(int k=0;k0)return TRUE;elsereturn FALSE;void CForYuView:TranslateFrom3DTo2D()for(int i=0;i4;i+)for(int j=0;jSe

12、lectObject(&brushg);pDC-BeginPath();pDC-MoveTo(int(F2D00),int(F2D01);pDC-LineTo(int(F2D10),int(F2D11);pDC-LineTo(int(F2D20),int(F2D21);pDC-LineTo(int(F2D00),int(F2D01);pDC-EndPath(); pDC-FillPath();brushg.DeleteObject();if(yu1)CBrush brushr;brushr.CreateSolidBrush(0xFF);pDC-SelectObject(&brushr);pDC

13、-BeginPath();pDC-MoveTo(int(F2D00),int(F2D01);pDC-LineTo(int(F2D20),int(F2D21);pDC-LineTo(int(F2D30),int(F2D31);pDC-LineTo(int(F2D00),int(F2D01);pDC-EndPath(); pDC-FillPath();brushr.DeleteObject();if(yu2)CBrush brushb;brushb.CreateSolidBrush(0x00FF0000);pDC-SelectObject(&brushb);pDC-BeginPath();pDC-

14、MoveTo(int(F2D00),int(F2D01);pDC-LineTo(int(F2D10),int(F2D11);pDC-LineTo(int(F2D30),int(F2D31);pDC-LineTo(int(F2D00),int(F2D01);pDC-EndPath(); pDC-FillPath();brushb.DeleteObject();if(yu3)CBrush brushy;brushy.CreateSolidBrush(0x0000FFFF);pDC-SelectObject(&brushy);pDC-BeginPath();pDC-MoveTo(int(F2D30)

15、,int(F2D31);pDC-LineTo(int(F2D10),int(F2D11);pDC-LineTo(int(F2D20),int(F2D21);pDC-LineTo(int(F2D30),int(F2D31);pDC-EndPath(); pDC-FillPath();brushy.DeleteObject();void CForYuView:XW()yu0=XIAOYING(S3D00,S3D01,S3D02,S3D10,S3D11,S3D12,S3D20,S3D21,S3D22,S3D00,S3D01,S3D02); yu1=XIAOYING(S3D00,S3D01,S3D02

16、,S3D20,S3D21,S3D22,S3D30,S3D31,S3D32,S3D00,S3D01,S3D02); yu2=XIAOYING(S3D00,S3D01,S3D02,S3D30,S3D31,S3D32,S3D10,S3D11,S3D12,S3D00,S3D01,S3D02); yu3=XIAOYING(S3D10,S3D11,S3D12,S3D30,S3D31,S3D32,S3D20,S3D21,S3D22,S3D10,S3D11,S3D12);void CForYuView:OnLButtonDown(UINT nFlags, CPoint point) if(SHU)KillTimer(1)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論