版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年制藥行業(yè)創(chuàng)新研發(fā)報(bào)告
- 高中生利用離子色譜法測(cè)定飲料中山梨酸鉀含量的課題報(bào)告教學(xué)研究課題報(bào)告
- 公共安全監(jiān)控報(bào)警系統(tǒng)操作指南(標(biāo)準(zhǔn)版)
- 哮喘與過(guò)敏的關(guān)系
- 山東工程職業(yè)技術(shù)大學(xué)(中心校區(qū))2025年招聘?jìng)淇碱}庫(kù)含答案詳解
- 老年消化科患者的護(hù)理要點(diǎn)
- 山東省地質(zhì)礦產(chǎn)勘查開發(fā)局所屬事業(yè)單位2025年度公開招聘人員備考題庫(kù)及答案詳解1套
- 2026年甘肅省隴南市武都區(qū)第二人民醫(yī)院(武都區(qū)洛塘中心衛(wèi)生院)招聘編外護(hù)理人員參考題庫(kù)及答案1套
- 2026年泉州工程職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試模擬測(cè)試卷必考題
- 2026年武漢經(jīng)開區(qū)教育系統(tǒng)校園專項(xiàng)招聘教師50人備考題庫(kù)及答案1套
- 2026年托里國(guó)電投發(fā)電有限責(zé)任公司招聘?jìng)淇碱}庫(kù)及1套完整答案詳解
- 2025-2026年魯教版八年級(jí)英語(yǔ)上冊(cè)期末真題試卷(+答案)
- 26年三上語(yǔ)文期末密押卷含答題卡
- 2026屆云南省昆明市西山區(qū)民中數(shù)學(xué)高一上期末考試模擬試題含解析
- 2025年大學(xué)第一學(xué)年(食品營(yíng)養(yǎng)與健康)營(yíng)養(yǎng)學(xué)基礎(chǔ)測(cè)試題及答案
- 2025-2030烏干達(dá)基于咖啡的種植行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2026年共青團(tuán)中央所屬單位招聘66人備考題庫(kù)及答案詳解一套
- 人民警察法培訓(xùn)課件
- 2026年哈爾濱職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)參考答案詳解
- 2025云南昆明巫家壩建設(shè)發(fā)展有限責(zé)任公司及下屬公司第四季度社會(huì)招聘31人歷年真題匯編帶答案解析
- 輸尿管切開取石課件
評(píng)論
0/150
提交評(píng)論