孫湛杭 樓安琪 武丹 中國計量大學(xué)理學(xué)院信算系
項目一開始我們上網(wǎng)查閱一些資料,什么是屏幕保護(hù)程序呢?“如果在使用計算機進(jìn)行工作的過程中臨時有一段時間需要做一些其他的事情,從而中斷了對計算機的操作,這時就可以啟動屏幕保護(hù)程序,將屏幕上正在進(jìn)行的工作狀況畫面隱藏起來”,了解了是什么之后,我們開始思考實現(xiàn)的具體步驟。
1,畫一個背景圖;
2,在圖片上添加一些元素比如樹葉,動物頭像等;
3,運用雙緩沖機制做出動態(tài)效果。
第一步:先把背景做好,黑色是默認(rèn)的,我們選取了一個相對淺一點的藍(lán)色。
用FillSolidRect函數(shù)可以填充背景色memDC.FillSolidRect(rect,RGB(175,238,238));默認(rèn)是黑色的。
第二步:在背景上添加一些可愛的圖像了,我們花了不少時間用各種曲線勾勒出一個憨態(tài)可掬的小熊貓和略微奇怪的小豬豬頭像。
畫左耳朵調(diào)用ellipse函數(shù):
pDC->Ellipse(point0.x+rect.Width()/2-48,point0.y+rect.Height()/2-5, point0.x+rect.Width()/2-12,point0.y+rect.Height()/2-41);
畫嘴巴的時候由于它不是一個規(guī)則的圖形,正好可以用到了bezier樣條曲線。
其中這些曲線的相對位置是要反復(fù)地實驗才能達(dá)到滿意的效果。如下圖:
圖1 屏幕顯示圖像
第三步:繪制動態(tài)圖。
通過查閱相關(guān)資料發(fā)現(xiàn)mfc中提供了菜單映射函數(shù)來啟動或者暫停定時器,定時發(fā)送一個時鐘脈沖來觸發(fā)動畫,通過SetTimer(1,15,NULL);啟動定時器,KillTimer(1);關(guān)閉定時器,之后通過碰撞檢測來觸發(fā)一些事件。
碰撞檢測:通過將動物頭像中心位置與客戶區(qū)上下左右邊界位置的比較,來檢測動物與邊界的碰撞,碰撞后移動方向取反;而兩個動物之間的碰撞則是根據(jù)他們的中心點直線距離來判斷,再根據(jù)他們碰撞的方向,來決定它們往何方向反彈;另外,在每一次碰撞后,碰撞熊貓的顏色也會隨機變化,增添了些許趣味性;
加減速功能:通過添加兩個菜單按鈕才實現(xiàn)此功能,定義每次點擊按鈕實現(xiàn)速度每次增加或減少2;并設(shè)置速度上限與下限,超過限制時,會彈出彈框提醒;通過一個速度函數(shù),控制器每次的移動距離間接改變其速度。
增加減少動物數(shù)量:此項功能也是通過添加了兩個按鈕來實現(xiàn),設(shè)置一個動物數(shù)量的變量,每次點擊時對變量進(jìn)行加1減1操作,然后刷新客戶區(qū)時,通過if條件語句選擇相應(yīng)的函數(shù)進(jìn)行動物繪制和邊界檢測;
我們團隊通過這次項目,對圖形學(xué)這門課有了更深刻的認(rèn)識,體會到了計算機圖形學(xué)的實用之處,了解了項目開發(fā)的大致過程,既鞏固了所學(xué)知識,也培養(yǎng)了團隊合作意識,是一次很不錯的項目經(jīng)歷。
[1] 孔令德,計算機圖形學(xué)-基于MFC三維圖形開發(fā),清華大學(xué)出版社,2014: