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