和風帆 戴昊奇 廖育武
(湖北文理學院,湖北武漢 441053)
淺議基于VC的圖像水波動畫系統(tǒng)
和風帆 戴昊奇 廖育武
(湖北文理學院,湖北武漢 441053)
基于Visual C++6.0這一開發(fā)環(huán)境,同時借助OpenGL編程,對圖像予以相應(yīng)的動畫處理,從而讓靜態(tài)圖像生動起來,具有一種水波漣漪效果。本文首先介紹了開發(fā)環(huán)境(硬件環(huán)境和軟件環(huán)境),然后分析了圖像動畫設(shè)計(系統(tǒng)設(shè)計、系統(tǒng)框架設(shè)計思路以及系統(tǒng)實現(xiàn)步驟),接著討論了系統(tǒng)的核心函數(shù)——漣漪(定義、產(chǎn)生、繪制),最后闡述了OpenGL的處理流程。
VC 圖像 水波動畫 漣漪
圖像水波動畫系統(tǒng)能夠?qū)D像予以相應(yīng)步驟的動畫處理,從而讓靜態(tài)圖像生動起來,具有一種水波漣漪效果。對水波漣漪進行模擬時,將滿足下述功能:1)系統(tǒng)界面是在根據(jù)OpenGL圖形程序構(gòu)建而成的整體框架下運行的;2)將后綴名稱為.rgb的目標圖片載入OpenGL圖形處理程序;3)在執(zhí)行程序的過程中,鼠標左鍵單擊圖片,該情況下,屏幕上便會基于鼠標單擊處形成所謂的漣漪發(fā)生點,并展現(xiàn)水波漣漪蕩漾一般的動態(tài)效果[1]。下文將針對基于VC的圖像水波動畫系統(tǒng)進行探討。
硬件環(huán)境:要求計算機配置至少達到“P4 2.0G/80G/256M/52XCD”這一標準。軟件環(huán)境:(1)Windows 2000/XP;(2)Microsoft Visual C++6.0;3)OpenGL開發(fā)庫。
(1)系統(tǒng)框架設(shè)計:為達成水波漣漪效果,本系統(tǒng)需要應(yīng)用到OpenGL圖形程序,所以,需要對OpenGL繪制環(huán)境予以一系列必要設(shè)置,如對邏輯調(diào)色板進行設(shè)置等,待設(shè)置結(jié)束之后才允許進行后續(xù)操作。(2)水波動畫設(shè)計:利用OpenGL程序按特定順序?qū)θ舾珊瘮?shù)進行相應(yīng)設(shè)計[2],以靜態(tài)圖像為目標對象,將其對應(yīng)的紋理圖像空間一一對應(yīng)地映射到另一個空間,也就是所謂的幀緩沖圖像空間,系統(tǒng)工作狀態(tài)下載入圖像,采用點擊的方式便能夠讓圖像給人一種漣漪的觀感。
(1)創(chuàng)建單文檔窗口,同時針對顯示像素格式予以必要設(shè)置,準確定義窗口,如屬性等;(2)兩大描述表的連接,一個是Windows設(shè)備描述表,另一個是OpenGL繪制描述表;(3)繪制圖形;(4)在退出繪圖時,將兩個描述表同時釋放出來[3]。
(1)在MyRippleView.h中添加成員函數(shù):添加成員函數(shù)以及成員變量→對場景進行渲染→對像素格式進行設(shè)置→對邏輯調(diào)色板進行設(shè)置→對OpenGL場景進行初始化→對OpenGL繪制描述表進行設(shè)置→對OpenGL調(diào)色板進行設(shè)置→對OpenGL設(shè)備描述表進行設(shè)置。(2)在MyRippleView.cpp中進行相關(guān)設(shè)置:對窗口所屬類型進行設(shè)置→對OpenGL場景進行初始化→對當前繪制描述表進行設(shè)置→對像素格式進行設(shè)置→對場景進行繪制以及渲染[4]。對于OpenGL窗口而言,像素格式為關(guān)鍵屬性之一,不僅涉及是否使用雙緩沖,而且涉及顏色位數(shù),同時還涉及類型和深度位數(shù)等。OpenGL帶有強大的雙緩存功能,可以用來高效地繪制動畫。當計算機屏幕正在顯示由前臺緩存繪制完成的某一幅幀畫面時,與此同時,后臺緩存則會緊鑼密鼓地進行下一幀畫面的繪制,待繪制完成之后,便會在屏幕上顯示出來,而此時的前臺緩存與之相反,則在進行下一幀畫面的繪制。程序?qū)?yīng)用到SwapBuffers()函數(shù)以實現(xiàn)對交換緩存的合理設(shè)置,即每執(zhí)行完1次繪制過程,便會對前后臺緩存進行1次交換,從而使得下一幀畫面在屏幕后得以繪制完成。
漣漪所對應(yīng)的數(shù)據(jù)結(jié)構(gòu)定義主要包括:(1)漣漪所對應(yīng)的幾何位置;(2)漣漪所對應(yīng)的紋理坐標;(3)漣漪所對應(yīng)的缺省紋理坐標等[5]。
鼠標對目標圖片進行左鍵單擊,如此一來,便可以準確確定鼠標單擊位置所對應(yīng)的具體坐標,以此為基礎(chǔ),對漣漪形成位置所涉及的諸多參數(shù)予以準確計算。
對漣漪進行繪制時,需要從事先準備的振幅表中選擇和調(diào)取相關(guān)數(shù)據(jù),準確計算并有效確定紋理所對應(yīng)準確坐標,接下來合理利用四邊形模擬的處理方法,對網(wǎng)格區(qū)域內(nèi)的所囊括的各個點予以順序地依次繪制,具體操作過程如下:從漣漪振幅表中選擇和調(diào)取相關(guān)數(shù)據(jù)→在網(wǎng)格中逐個繪制→繪制一個四邊形→左下角頂點→左上角頂點→右上角頂點→右下角頂點→繪制結(jié)束。
在創(chuàng)建一個三維圖形的過程中,其涉及的主要工作流程如下:(1)建模。一個是幾何建模,另一個是行為建模;(2)設(shè)置觀點。所謂設(shè)置觀點指的是,對觀察者所處于的空間位置進行準確描述;(3)設(shè)置環(huán)境。對環(huán)境的一些特征進行準確描述,主要包括光源以及空氣能見度等[6]。圖1為OpenGL的工作流程圖。
本文針對基于VC的圖像水波動畫系統(tǒng)進行了相關(guān)研究,尤其重點討論了圖像動畫設(shè)計以及核心函數(shù),最終實現(xiàn)了對靜態(tài)圖像的有機轉(zhuǎn)化,使其具有動態(tài)圖像的相關(guān)特征,即水波漣漪效果。
[1]馬義俊,巴力登.基于OpenGL的水波動畫模擬[J].微計算機信息,2009,07:215-216+259.
[2]徐勇,閆玉寶,陳樹越.基于延遲光照技術(shù)的水波動畫研究[J].安徽農(nóng)業(yè)科學,2010,18:9894-9896.
[3]雞蛋面.水波倒影動畫輕松做[J].電腦迷,2010,20:59.
[4]陳祥望,鄭松,和睿,徐丹.基于圖像的水波動畫建模和實時繪制[J].云南大學學報(自然科學版),2013,S2:18-22.
[5]賈建軍.水波蕩漾動畫效果的制作[J].中國教育技術(shù)裝備,2011,02:106.
[6]吳獻,張正球.一種用于水波動畫的實時動態(tài)網(wǎng)格劃分算法[J].福建師范大學學報(自然科學版),2012,05:42-47.
注:廖育武為指導(dǎo)老師。