張笑一
摘要:為模擬波濤洶涌的波浪的動畫,設計與開發(fā)網(wǎng)格波動效果界面;借鑒余弦函數(shù)以及相應的變換建立問題解決模型;利用C++的OpenGL開發(fā)動畫程序;程序?qū)崿F(xiàn)網(wǎng)格隨機擺動。
關鍵詞:網(wǎng)格波動;余弦函數(shù);OpenGL技術;C++;程序開發(fā)
中圖分類號:TP37 文獻標識碼:A 文章編號:1009-3044(2016)12-0220-02
Abstract: To simulate the roaring waves animation, design and achieve the grid fluctuation effect interface; Refer to cosine function and some transformations about cosine function to construct the problem solving model; Using of OpenGL of the C++ to develop animation program; The program achieve random fluctuation grid .
Key words: Grid fluctuation; Cosine function; OpenGL technology; C++; program development
1 概述
網(wǎng)格波動界面的探索可以應用于影視、廣告以及科研領域的仿真研究上,是一個值得探索的問題。
文獻[1]描述利用海浪頻譜和方向函數(shù)生成每一張海面圖片的高度場。文獻[2]研究工作中涉及了波浪和浮體聯(lián)合作用的研究。文獻[3]研究內(nèi)容涉及對波浪扭曲時的建模方式的探討。文獻[4]研究的內(nèi)容涉及對海波使用紋理映射的討論。
2問題提出
利用C++的OpenGL渲染技術,通過在事先定義的三維空間的若干頂點上增加隨機運動方式算法可在之后程序畫圖時實現(xiàn)網(wǎng)格波動,利用C++的窗口界面程序的開發(fā)方法和引入相關后綴名為“.h”的文件的語法以及OpenGL技術,可實現(xiàn)所開發(fā)的界面播放OpenGL動畫程序。將這兩點有機結合后,提出開發(fā)帶有網(wǎng)格波動虛擬影像的播放界面。
3 建立運動方式模型
倘若定義若干行三維空間中的頂點,可把行數(shù)定義為變量n,各行頂點數(shù)目與行數(shù)相等,則可以在OpenGL程序每回畫出一張圖畫前通過使用循環(huán)語句執(zhí)行算法的途徑讓各個頂點的空間位置發(fā)生變化或者不變。當每次畫出圖片前頂點可組成多條波動曲線的形狀時,則可讓這些圖片在因為程序執(zhí)行引起的連續(xù)放映形成網(wǎng)格搖擺的動畫。本次n取80。
循環(huán)語句所表達的初始頂點在任意單位循環(huán)時刻應具備的運動方式模型抽象為如下內(nèi)容:(1)所有頂點的初始位置都保證它們在三維坐標系中的y為零,第一行第一個頂點處在(0,0,0)點位置,之后的此行中,各頂點與上一頂點相隔長度為m,第二行相隔上一行距離的長度是m,第二行各個鄰居頂點間隔都是m,此后各行與上一行間隔是m并且本行鄰居位置的頂點間隔也為m,所有頂點構成長寬等距的矩形網(wǎng)格并與負z軸、坐標為(0,0,0)的點和正x軸接壤;(2)假定在單位循環(huán)時刻圖片畫出前都從各行的前m個頂點中隨機選取一個頂點放一個帶指針的圓形紙片,各指針尾部按在各紙片中心,各針尖最前端與各紙片邊緣某處重合,各紙片和坐標軸x平行;(3)各紙片的指針與頂點構成的長寬等距的矩形垂直,各紙片的指針和整個正y軸和負y軸組成的連線平行,指針所指方向所表示的向量和沿著y軸的正無窮遠延伸的方向所表示的向量構成的角度為零,并且各紙片的中心位置與選取的隨機頂點重合;(4)各紙片以數(shù)值一樣的轉速圍著紙片中心勻速原地旋轉并且都沿著正x軸朝正無窮遠延伸的方向做著相同速度的加速度為0的直線運動;(5)各紙片在每次畫出圖片前都按相同的規(guī)定時間運動;(6)當長寬等距的矩形上某個頂點被某個紙片中心經(jīng)過時,把指針的針尖與紙片的重合位置的y值作為此刻頂點的y值,這個值可用余弦函數(shù)以及相應的三角函數(shù)變換根據(jù)本次循環(huán)中運動開始后當前紙片在此時旋轉產(chǎn)生的角度計算;(7)當各行的紙片在規(guī)定時間內(nèi)運動結束,使用OpenGL的語法連線、渲染和畫圖;(8)下一張圖片(也就是下一個單位循環(huán)時刻)依然按照前七步繪制。這里m為30。
4網(wǎng)格波動界面關鍵內(nèi)容介紹
網(wǎng)格波動界面使用C++與用戶界面程序開發(fā)有關的開發(fā)技術進行搭建。在利用C++語法加入OpenGL有關的文件后,將運動方式算法和每一時刻的與畫圖有關的語句放到合適的位置進行使用。由此,可以實現(xiàn)網(wǎng)格波動界面的動畫。
網(wǎng)格波動界面程序邏輯上分為三大部分,第一部分為網(wǎng)格波動界面的處理用戶與界面交互主函數(shù),第二部分為網(wǎng)格波動界面的交互信息處理函數(shù),第三部分是與畫每一張圖片有關的函數(shù)。建立三部分之間聯(lián)系的方法是在處理用戶與界面交互主函數(shù)中利用while循環(huán)去檢測預先定義的交互信息結構體有無內(nèi)容,有就用C++自帶的處理交互信息的函數(shù)發(fā)送到交互信息處理函數(shù)處理,處理后,程序?qū)⒗^續(xù)執(zhí)行處理用戶和界面交互主函數(shù)的那個循環(huán),這由運行該波動界面的電腦自身控制,沒有交互發(fā)生就執(zhí)行畫圖函數(shù)的調(diào)用語句。在處理用戶與界面交互主函數(shù)中,涉及的內(nèi)容從上到下接連為:初始化網(wǎng)格波動界面語句塊,加載波動界面畫圖設備函數(shù)體的調(diào)用語句,循環(huán)檢測(這是之前提到的while循環(huán)),界面銷毀句塊。交互信息處理函數(shù)使用C++的分叉條件判別語法編寫,它處理用戶按下鍵盤、按緊和松開鼠標、手握鼠標滑動、網(wǎng)格界面大小變化、銷毀網(wǎng)格波動界面的交互信息。
網(wǎng)格波動界面的關鍵部分起到的作用的闡述如下:(1)處理用戶與界面交互主函數(shù)的初始化網(wǎng)格波動界面語句塊包含對波動界面的屬性的定義、交互信息結構體的定義以及注冊波動界面和與建立波動界面相關的操作。其中,波動界面的屬性和交互信息的定義都是通過聲明擁有與網(wǎng)格波動界面程序中的界面執(zhí)行相關聯(lián)屬性的結構體的變量來在程序中使用它們。(2)處理用戶與界面交互主函數(shù)的加載波動界面畫圖設備函數(shù)體的調(diào)用語句調(diào)用的是開發(fā)波動界面時編寫的與向系統(tǒng)申請畫圖環(huán)境有關操作的函數(shù),它的內(nèi)容概括起來是利用windosws用戶界面開發(fā)中需要的相關描述表去在一個操作系統(tǒng)的存儲區(qū)域內(nèi)分配一個用于進行OpenGL畫圖動作的工作區(qū)。(3)當處理用戶與界面交互主函數(shù)的循環(huán)檢測發(fā)現(xiàn)交互信息結構體有內(nèi)容,如之前所說,交互信息處理函數(shù)使用的C++的分叉條件判別語法會根據(jù)判別條件到相應的位置去操作預先定義的全局變量或執(zhí)行C++自帶的會最終通知系統(tǒng)結束波動界面運行的語句。比如,當判定交互信息是銷毀波動界面時,程序就會執(zhí)行這個最終將結束波動界面運行的語句。交互信息處理函數(shù)中的全局變量被執(zhí)行后,并且當循環(huán)檢測執(zhí)行到相應的畫圖函數(shù)時,畫圖函數(shù)根據(jù)它們的某些元素影響這個函數(shù)中相應分叉判別語句內(nèi)部的OpenGL函數(shù)的生效,這實現(xiàn)了用戶和波動界面的交互產(chǎn)生時應當引發(fā)的內(nèi)容。當沒有交互信息時,循環(huán)檢測執(zhí)行相應畫圖函數(shù)的調(diào)用語句,這個調(diào)用語句所關聯(lián)的函數(shù)體也是波動界面的開發(fā)中自行編寫的。它解釋OpenGL在波動界面每一張圖片繪畫時起到怎樣的作用,就是說怎樣利用該技術提供的函數(shù)來刻畫圖片呈現(xiàn)給用戶的效果。不僅如此,這個自行編寫的函數(shù)體還將上一節(jié)的模型通過程序?qū)崿F(xiàn)。(4)循環(huán)檢測的終止條件是當交互信息結構體的message屬性收到離開循環(huán)的信息。當離開循環(huán)檢測,程序就執(zhí)行界面銷毀句塊。它包含釋放界面和繪畫的工作區(qū)工作時所占的存儲空間。
5 效果展示
6結束語
1) 如圖1所示,在波動界面的運行場所中點擊啟動調(diào)試后,可看到網(wǎng)格的波浪隨機擺動的動畫;
2) 如圖2所示,由于用戶按下相應鍵盤,切換效果;
3) 如圖3所示,用戶利用鼠標改變網(wǎng)格波動界面大??;
4) 如圖4所示,網(wǎng)格波動界面的畫面可以隨著用戶鼠標的滑動而變換視角;
5) 雖然實現(xiàn)了波濤洶涌的效果,但是,圖2效果不夠美觀,這是不足之處,可通過改進3節(jié)模型規(guī)則后經(jīng)過程序?qū)崿F(xiàn)來改善放映效果。
參考文獻:
[1] 羅玉. 3D海浪動畫模擬技術研究[D]. 武漢理工大學,2008:3.
[2] 鄒耀斌. 風浪的行為特征建模[D]. 武漢理工大學, 2007:5.
[3] 曾建英. 海浪的行為特征建模與實時繪制研究[D]. 武漢理工大學,2009:6.
[4] 賈佳. 海面建模與繪制技術研究[D]. 天津大學,2011:12.