2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、VC++動畫圖形繪制,概述,計算機(jī)動畫:借助計算機(jī)生成一系列供動態(tài)演示圖形的技術(shù)。動畫技術(shù)在CAD、CAM、CAI等許多領(lǐng)域里都有廣泛應(yīng)用動畫直觀、形象等特點,在模擬仿真領(lǐng)域也有關(guān)非常重要的地位。如模擬航空器飛行,能使飛行員在計算機(jī)上處理實際飛行中可能出現(xiàn)的問題。計算機(jī)生成動畫的兩種途經(jīng):利用現(xiàn)成的動畫制作軟件,如二維的Flash工具、三維的3DMAX工具等。生成動畫比較方便、快速,制作人員無需掌握編程知識,在較短的時間內(nèi)就

2、能學(xué)會。直接通過編寫程序來生成動畫要求制作人員具備一定的程序設(shè)計知識,動畫編程技巧。利用計算機(jī)編程可產(chǎn)生5種類型的動畫:異或動畫、調(diào)色板動畫、偵動畫、塊動畫和實時動畫。,動畫類型簡介,異或動畫:利用異或方式在原來位置重畫,就能快速地擦除剛才的畫的物體,然后在新位置顯示出來。異或操作:異或是一個數(shù)學(xué)運(yùn)算符。他應(yīng)用于邏輯運(yùn)算。 其運(yùn)算法則為a異或b=a‘b+ab’(a‘為非a)。例如:00001111異或11111111=11110

3、000調(diào)色板動畫:通過將各個像素點的顏色按一定的方式進(jìn)行循環(huán)變化,就可以模仿出流動的水、空氣和亮度等變化。偵動畫:(翻頁式動畫)是將動畫所有的偵準(zhǔn)備好,然后快速地切換每一偵畫面,由此形成動畫。塊動畫:將顯示對象分為背景和前景兩部分,背景不發(fā)生改變面前景不斷變化,便顯示出動畫效果。實時動畫:在動畫過程中實時地繪制圖形,至少需要兩個圖形頁,當(dāng)在一頁上繪制圖形時另一而被顯示出來,如此循環(huán)切換來顯示動畫。,1 異或動畫,1.1異或動畫原

4、理繪制圖形時使用異或光柵操作代碼,即R2_XORPEN代碼, R2_XORPEN表將畫筆和屏幕顏色進(jìn)行異或運(yùn)算,它們是繪制圖形的基礎(chǔ),也是這種繪制方法名的由來。最后結(jié)果是兩種顏色的異或,異或運(yùn)算規(guī)則見下表:,1.1異或動畫原理,第一次異或方式在屏幕上某一位置畫圖時,最后的結(jié)果是畫筆顏色和屏幕顏色的異或。第二次在相同位置用異或方式重畫后,最后的結(jié)果又變回屏幕原來的顏色,也就是將第一次所畫的物體擦除了。由于是位運(yùn)算,速度非??欤粫?/p>

5、現(xiàn)閃爍現(xiàn)象。在某一開始位置用異或的方式畫一物體,然后隔一定的時間間隔在上次的位置再畫一次,然后沿某個方向移動一微小距離,在新的位置將物體再畫一遍,如此循環(huán)下去,就可以看到一個物體在運(yùn)動,可形成動畫。,1.2異或動畫舉例,例子:在交互式繪圖中用戶想畫一條直線,首先按下鼠標(biāo)左鍵確定直線起點,接著移動鼠標(biāo),這時會有一條直線隨著鼠標(biāo)移動,直到用戶松開左鍵為止,這條隨鼠標(biāo)移動的直線稱為“像皮筋”。第一步:定義兩個變量CPoint start

6、,end;//直線的起點和終點int flag;//標(biāo)志:第一次鼠標(biāo)左鍵:0 第二鼠標(biāo)左鍵:1在構(gòu)造方法中初始化flag=0;第二步:增加鼠標(biāo)左鍵消息處理及代碼,1.2異或動畫舉例,CDC * dc = GetDC(); //取得繪圖設(shè)備環(huán)境上下文指針 CPen newpen(PS_SOLID,0,RGB(255,0,0)); //創(chuàng)建新的畫筆CPen * oldpen;if(flag ==0){ //第一次按下鼠標(biāo)

7、左鍵時flag=1;start=end=point;}else{ //第二次按下鼠標(biāo)左鍵時oldpen=dc->SelectObject(&newpen);//將新畫筆選進(jìn)設(shè)備上下文中,將原設(shè)備上下文存于舊畫筆中dc->SetROP2(R2_XORPEN); //設(shè)備畫線模式為異或dc->MoveTo(start); //移動到起點dc->LineTo(end); //畫

8、線到終點,將這前所畫線條用異或模式擦除end=point;//重新設(shè)置終點dc->SetROP2(R2_XORPEN);//設(shè)備畫線模式為異或dc->MoveTo(start);dc->LineTo(end);dc->SelectObject(oldpen); //將舊畫筆選進(jìn)設(shè)備上下文flag=0; //還原狀態(tài)}ReleaseDC(dc);,1.2異或動畫舉例,第三步:增加鼠

9、標(biāo)移動消息處理及代碼 CDC * dc = GetDC(); CPen newpen(PS_SOLID,0,RGB(255,0,0));CPen * oldpen=dc->SelectObject(&newpen);dc->SetROP2(R2_XORPEN);if(flag==1){dc->MoveTo(start);dc->LineTo(end);end = poi

10、nt;dc->MoveTo(start);dc->LineTo(end);}dc->SetROP2(R2_XORPEN);dc->SelectObject(oldpen);ReleaseDC(dc);,2 調(diào)色板動畫,2.1調(diào)色板動畫原理一個調(diào)色板包含一組256個24位的RGB顏色值。調(diào)色板不同顏色就不同,最多有256種,從0-255索引:在顯示緩存中,每個像素都有一個從0-25

11、5的值。這個像素值指出了使用調(diào)色板中的哪種顏色給該像素著色。改變像素顏色的方法:改變像素的索引值,使其指向調(diào)色板中拐一項;改變調(diào)色板的RGB值。注意:第二種方法將導(dǎo)致屏幕上所有使用該調(diào)色板項值的像素的顏色都發(fā)生變化。缺點:整個屏幕只能顯示256種顏色,而不是針對某個窗口或應(yīng)用程序。優(yōu)點:使未壓縮的圖像文件比真彩色圖像小三分之二;可以使用Windows固有的調(diào)色板操作函數(shù)執(zhí)行一種比較流行且經(jīng)濟(jì)的動畫--調(diào)色板動畫。調(diào)色板動畫就是

12、通過有規(guī)律地改變每個像素的索引值,使得屏幕上每個像素的顏色發(fā)生變化,形成一種動感。能很好地模仿出流動的水、空氣、亮度等變化效果。,2.2 生成調(diào)色板動畫的步驟,2.2生成調(diào)色板動畫的步驟1.聲明一個調(diào)色板對象,并將它初始化2.創(chuàng)建幾把畫刷,每把畫刷用標(biāo)志置成0x01的值以初始化,這表明每個畫刷的顏色都是一個指定調(diào)色板位置的索引3.設(shè)置一個定時器,用它來控制隔多長時間將屏幕重畫。4.用創(chuàng)建的每把刷子各畫一個物體。5.每隔一定時間

13、調(diào)用調(diào)色板的操作函數(shù)AnimatePalette來改變每把畫刷的索引最后的結(jié)果就是看起來屏幕上的每個物體在不停地移動,實際上是它們的顏色在發(fā)生改變。,2.3 調(diào)色板動畫舉例,2.3 調(diào)色板動畫舉例創(chuàng)建一個基于對話框的應(yīng)用程序,在對話框的四周車許多小圓表示燈炮,程序運(yùn)行時各個小圓的顏色發(fā)生變化,好像門上閃爍的燈。,3 幀動畫,3.1幀動畫原理幀動畫也稱頁動畫或全屏幕動畫。動畫程序預(yù)先建立許多幅全屏幕圖像,并將每幅圖像都存起來。每

14、幅圖像也稱為一幀面,播放時程序依次顯示每幅圖像,形成動畫。常用于復(fù)雜的整屏三維動畫。3.2制作幀動畫首先:把第一幀畫面建立起來。一般情況每幀的場景都非常復(fù)雜,習(xí)慣上都是用其他圖形圖像處理軟件來實現(xiàn)。由于每一秒至少需要24幀畫面才能取得比較好的效果,所以工作量非常大,而且需要的時間也比較多。其次:用動畫播放程序來播放每一幀畫面,當(dāng)每一幀都比較小時可以一次將所有幀都讀入內(nèi)存,然后按照一定時間間隔連續(xù)顯示每一幀畫面。,,onDr

15、aw函數(shù)CFrameDoc* pDoc = GetDocument();if(flag){//當(dāng)播放時pDC->SetStretchBltMode(COLORONCOLOR);//設(shè)置位圖拉伸模式(采用保存彩色位圖顏色模式)//將指定內(nèi)存位置大小的位圖在屏幕上顯示出來pDC->StretchBlt(100, 50, m_sizeDest.cx, m_sizeDest.cy,&m_pdcMemory[ind

16、ex], 0, 0,m_sizeSource.cx, m_sizeSource.cy, SRCCOPY);}定義菜單及消息(OnViewPlay)if(flag){ //如果flag為真,則播放動畫,否則清屏flag=FALSE; Invalidate();}else flag=TRUE;,,增加定時器及響應(yīng)消息(onTimer)if(flag){ if(index==0)index=1;else

17、index=0;Invalidate();}初始化更新m_pBitmap[0].LoadBitmap(IDB_BITMAP1);//將位置裝入內(nèi)存m_pBitmap[1].LoadBitmap(IDB_BITMAP2);for(int i=0;i<2;i++){CClientDC dc(this);//創(chuàng)建關(guān)于窗口客戶區(qū)的設(shè)備上下文OnPrepareDC(&dc); // 在調(diào)用屏幕顯示的重繪函數(shù)前應(yīng)先調(diào)

18、用m_pdcMemory[i].CreateCompatibleDC(&dc);//創(chuàng)建兼容的內(nèi)存設(shè)備上下文m_pdcMemory[i].SelectObject(&m_pBitmap[i]);//將位圖選進(jìn)內(nèi)存設(shè)備上下文m_pBitmap[i].GetObject(sizeof(bm), &bm);//得到位圖的長和寬m_sizeSource.cx = bm.bmWidth;//初始化源塊大小m_si

19、zeSource.cy = bm.bmHeight;m_sizeDest = m_sizeSource; //將源塊大小賦予目標(biāo)區(qū)域dc.DPtoLP(&m_sizeDest);} //將設(shè)備坐標(biāo)轉(zhuǎn)換成邏輯坐標(biāo)int nTimer=SetTimer(1,200,NULL);//設(shè)置定時器ASSERT(nTimer!=0);,3 幀動畫,3.2程序舉例及說明定義變量:CFrameDoc* GetDocument(

20、);CDC m_pdcMemory[2]; //設(shè)備上下文指針數(shù)組CBitmap m_pBitmap[2]; //位圖指針數(shù)組CSize m_sizeDest;//目標(biāo)區(qū)域大小CSize m_sizeSource;//源塊大小BOOL flag;//標(biāo)志,是否播放動畫int index;//畫面序號設(shè)置默認(rèn)狀態(tài)(View的構(gòu)造函數(shù)中)Flag=FALSE;Index=0;,4 塊動畫,4.1 塊動畫原理

21、塊動畫又稱為子畫面動畫、部分屏幕動畫顯示對象分成兩部分:背景和前景背景通過不發(fā)生變化,前景不斷地運(yùn)動、改變,只要將背景畫一次,不斷更新前景就形成了塊動畫。由于每次不需要刷新整個屏幕,而僅僅是一小部分,所以可以獲得很高的動畫速度。許多電腦游戲中能看到這種動畫,如背景上面有坦克或飛機(jī)到處移動。4.2 塊動畫的制作過程準(zhǔn)備好一幅背景圖畫和一幅前景圖(子畫面)顯示背景圖確定子圖畫面將顯示的位置,將可能被子畫面覆蓋的背景保存起來

溫馨提示

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

評論

0/150

提交評論