摘 要:由于各種實(shí)驗(yàn)條件限制,傳統(tǒng)實(shí)驗(yàn)教學(xué)環(huán)節(jié)中學(xué)生對(duì)知識(shí)的理解和掌握存在各種困難。本文論述了一種通用三維實(shí)驗(yàn)教學(xué)仿真平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn),其具有良好的通用性與可擴(kuò)展性,并使用OpenGL對(duì)實(shí)驗(yàn)現(xiàn)象進(jìn)行三維模擬仿真,通過(guò)本系統(tǒng)可以提高學(xué)生的實(shí)踐動(dòng)手能力,促進(jìn)其對(duì)知識(shí)的理解。
關(guān)鍵詞:實(shí)驗(yàn)教學(xué);通用平臺(tái);三維仿真
中圖分類(lèi)號(hào):TP391.9
眾所周知,傳統(tǒng)的實(shí)驗(yàn)教學(xué)是教師先講述基本理論,演示實(shí)驗(yàn)基本步驟,然后學(xué)生根據(jù)實(shí)驗(yàn)指導(dǎo)手冊(cè),到實(shí)驗(yàn)室進(jìn)行操作演示,深入理解相關(guān)知識(shí)點(diǎn)。但是這樣的教學(xué)活動(dòng)過(guò)程會(huì)造成各種各樣的問(wèn)題:首先實(shí)驗(yàn)內(nèi)容一般抽象性都很強(qiáng),這通常不利于教師闡述其內(nèi)部原理,同樣也不利于學(xué)生對(duì)原理快速深入理解;學(xué)生僅僅通過(guò)在課堂上聽(tīng)老手講述實(shí)驗(yàn)過(guò)程,是不能在短時(shí)間內(nèi)對(duì)其理解并吸收,也就根本談不上熟悉實(shí)驗(yàn)的流程。因此學(xué)生往往是在不熟悉實(shí)驗(yàn)流程的情況下就冒然進(jìn)入實(shí)驗(yàn)室進(jìn)行真實(shí)的實(shí)驗(yàn),這不僅使得學(xué)生的學(xué)習(xí)效率不高,同時(shí)還造成了實(shí)驗(yàn)器材、藥品等的不必要的損耗、浪費(fèi)。還必須指出的是,有些實(shí)驗(yàn)本身是具有一定危險(xiǎn)性的,學(xué)生不熟悉實(shí)驗(yàn)規(guī)范、流程就進(jìn)行實(shí)驗(yàn),很可能會(huì)對(duì)學(xué)生的人生安全造成一定的傷害。同時(shí)實(shí)驗(yàn)教學(xué)會(huì)受到很多條件因素的限制,比如實(shí)驗(yàn)器材數(shù)量有限,多位學(xué)生可能會(huì)共享器材;環(huán)境因素的影響不能開(kāi)展該項(xiàng)實(shí)驗(yàn)教學(xué),如演示太陽(yáng)系運(yùn)動(dòng)。
利用計(jì)算機(jī)仿真技術(shù)進(jìn)行實(shí)驗(yàn)現(xiàn)象模擬,能夠很好的詮釋實(shí)驗(yàn)現(xiàn)象基本原理,在很大程度上提高教師授課效率,以及學(xué)生的學(xué)習(xí)效果,同時(shí)熟悉實(shí)驗(yàn)流程。現(xiàn)今市面已經(jīng)有些Flash或二維圖形實(shí)驗(yàn)仿真軟件,但它們對(duì)實(shí)驗(yàn)的表現(xiàn)力,用戶(hù)的交互性等都非常有限,難以滿(mǎn)足廣大師生的需求。傳統(tǒng)教學(xué)中實(shí)驗(yàn)種類(lèi)以及數(shù)量
本系統(tǒng)設(shè)計(jì)目標(biāo)是它不僅適用于教師、學(xué)生等普通用戶(hù),同時(shí)也面向參與實(shí)驗(yàn)?zāi)K開(kāi)發(fā)的其它人員,具有強(qiáng)大繁多,這些實(shí)驗(yàn)演示系統(tǒng)多是一個(gè)實(shí)驗(yàn)一個(gè)系統(tǒng),沒(méi)有對(duì)其進(jìn)行綜合集成,這給系統(tǒng)維護(hù)管理帶來(lái)了很大的困難。基于以上現(xiàn)狀,系統(tǒng)采用三維仿真技術(shù)模擬、再現(xiàn)各種實(shí)驗(yàn)及自然現(xiàn)象,提高用戶(hù)的真實(shí)體驗(yàn)和操作性;采用可擴(kuò)展模式結(jié)構(gòu),解決實(shí)驗(yàn)種類(lèi)及數(shù)量繁多給管理及擴(kuò)展帶來(lái)的不便。
1 系統(tǒng)分析
OpenGL是現(xiàn)今使用較廣泛的一個(gè)性能卓越的三維圖形標(biāo)準(zhǔn),它獨(dú)立于硬件設(shè)備、窗口系統(tǒng)和操作系統(tǒng),提供了功能強(qiáng)大,調(diào)用方便的底層3D圖形庫(kù)。系統(tǒng)采用OpenGL來(lái)實(shí)現(xiàn)各種實(shí)驗(yàn)的三維表現(xiàn),用戶(hù)可以輕松通過(guò)操縱鍵盤(pán)、鼠標(biāo)來(lái)改變觀察視角,從三維多角度觀察實(shí)驗(yàn)演示過(guò)程;操作各種實(shí)驗(yàn)器材。的二次開(kāi)發(fā)和可擴(kuò)展性。普通用戶(hù)根據(jù)自身需求購(gòu)買(mǎi)主體及必須的功能模塊,亦可隨時(shí)購(gòu)買(mǎi)其它功能模塊,并能便捷的加入到現(xiàn)有系統(tǒng)中,從而通過(guò)使用本系統(tǒng)完成教學(xué)或?qū)W習(xí)任務(wù);其它開(kāi)發(fā)人員可以根據(jù)客戶(hù)對(duì)實(shí)驗(yàn)的要求,按照實(shí)驗(yàn)?zāi)K的接口要求和公共基礎(chǔ)功能模塊快速開(kāi)發(fā)新實(shí)驗(yàn)或維護(hù)已有實(shí)驗(yàn)功能,并編寫(xiě)配置腳本,即可交付給用戶(hù)動(dòng)態(tài)加載使用。
根據(jù)以上要求,系統(tǒng)基本結(jié)構(gòu)設(shè)計(jì)為如圖1所示。系統(tǒng)由主體控制框架制定基本的接口標(biāo)準(zhǔn),實(shí)驗(yàn)?zāi)K開(kāi)發(fā)人員可以在不對(duì)主框架有任何了解,做任何修改的情況下,按已有接口標(biāo)準(zhǔn)開(kāi)發(fā)出新的實(shí)驗(yàn)?zāi)K,而主控制框架也能很好支持每個(gè)實(shí)驗(yàn)?zāi)K操作演示等功能,
系統(tǒng)框架為開(kāi)發(fā)人員提供的接口標(biāo)準(zhǔn)應(yīng)具有即統(tǒng)一又靈活的特點(diǎn),系統(tǒng)采用讀寫(xiě)配置腳本方式進(jìn)行實(shí)現(xiàn)。開(kāi)發(fā)人員完成實(shí)驗(yàn)?zāi)K后,編寫(xiě)配置腳本,主框架通過(guò)該腳本了解模塊的具體接口方法,并寫(xiě)入自己的配置文件實(shí)現(xiàn)動(dòng)態(tài)調(diào)用,這樣就實(shí)現(xiàn)了主體控制框架和實(shí)驗(yàn)?zāi)K的邏輯分離,相關(guān)開(kāi)發(fā)人員只需要關(guān)注自己所負(fù)責(zé)模塊的內(nèi)部詳細(xì)設(shè)計(jì)。
2 系統(tǒng)實(shí)現(xiàn)
系統(tǒng)由主體框架、實(shí)驗(yàn)?zāi)K、公共模塊三部分組成,實(shí)驗(yàn)?zāi)K和公共基礎(chǔ)模塊都是以動(dòng)態(tài)庫(kù)的形式存在。系統(tǒng)框架主要負(fù)責(zé)和用戶(hù)進(jìn)行操作交互,實(shí)驗(yàn)內(nèi)容的三維展示、管理及控制;每個(gè)實(shí)驗(yàn)?zāi)K之間沒(méi)有任何聯(lián)系,具體實(shí)現(xiàn)由其開(kāi)發(fā)者自己決定,只要求提供滿(mǎn)足標(biāo)準(zhǔn)框架接口的調(diào)用。
2.1 系統(tǒng)主框架設(shè)計(jì)
系統(tǒng)主框架是該仿真平臺(tái)的核心部分,采用MFC單文檔結(jié)構(gòu)和第三方界面庫(kù)設(shè)計(jì),其主要功能是為OpenGL配置一個(gè)能在Windows系統(tǒng)平臺(tái)運(yùn)行的環(huán)境,并且通過(guò)制定的接口標(biāo)準(zhǔn)鏈接并控制相應(yīng)的實(shí)驗(yàn)功能模塊,對(duì)加載的功能模塊進(jìn)行動(dòng)態(tài)管理,該框架的核心類(lèi)結(jié)構(gòu)如圖2所示。
COpenGL類(lèi)配置OpenGL在windows系統(tǒng)中的運(yùn)行環(huán)境,其唯一對(duì)象m_opengl在CPhyLibView類(lèi)中實(shí)例化。CPhyLibView類(lèi)在CMainFrame類(lèi)中,主要用途是實(shí)時(shí)顯示當(dāng)前功能模塊所展現(xiàn)的三維實(shí)驗(yàn)仿真場(chǎng)景,渲染的場(chǎng)景數(shù)據(jù)信息來(lái)自于各實(shí)驗(yàn)?zāi)K。
CWorkSpcaeBar、CWorkSpcaeBar2類(lèi)分別在主框架CMainFrame類(lèi)中被實(shí)例化,它們是浮動(dòng)并??吭谥骺蚣軆?nèi)的兩個(gè)子框架,用來(lái)裝載具體功能模塊中的實(shí)驗(yàn)參數(shù)配置窗口、實(shí)驗(yàn)說(shuō)明及結(jié)果窗口。
CLibrary_Linker類(lèi)是框架中重要的模塊,它是實(shí)驗(yàn)?zāi)K和框架之間的功能連接器,制定了二者通信的標(biāo)準(zhǔn)接口。它通過(guò)讀取的配置文件了解實(shí)驗(yàn)?zāi)K的相關(guān)內(nèi)容、函數(shù)接口等信息,幫助框架其它模塊鏈接相應(yīng)的功能,調(diào)用其中的函數(shù)接口,從而實(shí)現(xiàn)對(duì)功能模塊的各種操作。為判斷當(dāng)前鏈接庫(kù)與正要鏈接的庫(kù)是否重復(fù),類(lèi)中為每個(gè)實(shí)驗(yàn)?zāi)K提供計(jì)數(shù)字段用于區(qū)別,以此減少對(duì)相同庫(kù)的鏈接、釋放操作,提高程序的執(zhí)行效率。
為了使主框架能夠?qū)δ苣K進(jìn)行控制,就必須讀入模塊的相應(yīng)信息,這一點(diǎn)可以通過(guò)結(jié)構(gòu)體Menu來(lái)完成。Menu結(jié)構(gòu)體主要以鏈表形式動(dòng)態(tài)管理功能模塊相關(guān)信息,并同步寫(xiě)入硬盤(pán),更新框架界面。Menu結(jié)構(gòu)體中的數(shù)據(jù)全都通過(guò)讀入每個(gè)功能模塊的配置腳本,內(nèi)容主要包括主函數(shù)名、庫(kù)名等,并動(dòng)態(tài)生成的功能操作選項(xiàng)菜單,菜單ID號(hào),調(diào)用規(guī)則等信息,在主框架中顯示供用戶(hù)操作使用。
2.2 實(shí)驗(yàn)?zāi)K設(shè)計(jì)
系統(tǒng)中每個(gè)實(shí)驗(yàn)?zāi)K相對(duì)獨(dú)立,允許用戶(hù)通過(guò)界面動(dòng)態(tài)地加載和卸除,其結(jié)構(gòu)如圖3所示。實(shí)驗(yàn)?zāi)K核心必須包括以下功能模塊:
參數(shù)配置部分,其主要作用在于允許用戶(hù)動(dòng)態(tài)配置實(shí)驗(yàn)所需數(shù)據(jù),實(shí)驗(yàn)的計(jì)算結(jié)果及三維模擬效果都將受到參數(shù)的影響,從而使實(shí)驗(yàn)結(jié)果呈現(xiàn)多樣性。
實(shí)驗(yàn)說(shuō)明及計(jì)算,該部分的用途在于對(duì)正在進(jìn)行的實(shí)驗(yàn)原理知識(shí)點(diǎn)作出說(shuō)明,并描述實(shí)驗(yàn)操作步驟要點(diǎn);依據(jù)實(shí)驗(yàn)理論數(shù)據(jù)和輸入?yún)?shù),動(dòng)態(tài)地計(jì)算出實(shí)驗(yàn)結(jié)果。
虛擬實(shí)驗(yàn)渲染顯示,該功能是三維實(shí)驗(yàn)仿真最終的目標(biāo),即通過(guò)使用OpenGL對(duì)實(shí)驗(yàn)整個(gè)過(guò)程進(jìn)行三維仿真,形象的顯示各種情況下的實(shí)驗(yàn)效果。
編寫(xiě)配置腳本,用戶(hù)針對(duì)每個(gè)實(shí)驗(yàn)編寫(xiě)相關(guān)的配置腳本用于描述功能模塊的關(guān)鍵信息,如功能模塊名稱(chēng)、主要函數(shù)名、菜單中顯示的內(nèi)容等等。主框架鏈接接口通過(guò)配置腳本內(nèi)容,實(shí)現(xiàn)對(duì)功能模塊的調(diào)用。
2.3 公用基礎(chǔ)模塊
公用基礎(chǔ)模塊是平臺(tái)提供的公共功能,主要涉及到攝像機(jī)管理、向量計(jì)算,粒子系統(tǒng),實(shí)驗(yàn)器材的拾取、拖動(dòng)、組合,場(chǎng)景操作管理等模塊,這些公共模塊是多數(shù)三維模擬仿真都需要的基礎(chǔ)功能,二次開(kāi)發(fā)人員根據(jù)需要選擇使用它們,以提高開(kāi)發(fā)效率。
2.4 主框架與實(shí)驗(yàn)功能模塊關(guān)聯(lián)流程
在選擇某個(gè)具體實(shí)驗(yàn)后,主框架會(huì)根據(jù)Menu結(jié)構(gòu)體中的信息與相應(yīng)功能模塊相連接,這主要包括三方面的內(nèi)容。主框架中的視圖客戶(hù)區(qū)設(shè)備上下文與實(shí)驗(yàn)?zāi)K中的三維模擬部分進(jìn)行綁定。
參數(shù)配置框架與實(shí)驗(yàn)結(jié)果說(shuō)明框架載入功能模塊中的參數(shù)配置部分與實(shí)驗(yàn)說(shuō)明、結(jié)果計(jì)算、顯示部分。
動(dòng)態(tài)實(shí)驗(yàn)菜單與功能連接模塊由實(shí)驗(yàn)?zāi)K中的主框架連接接口中讀入接口信息,之后即可根據(jù)此信息生成實(shí)驗(yàn)菜單或是對(duì)其進(jìn)行管理,效果如圖4所示。
3 結(jié)束語(yǔ)
本文主要論述了一種通用三維實(shí)驗(yàn)仿真平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)。該系統(tǒng)通過(guò)主框架內(nèi)部加載不同的實(shí)驗(yàn)功能模塊,根據(jù)用戶(hù)的動(dòng)態(tài)配置參數(shù),形象再現(xiàn)了各種實(shí)驗(yàn)、自然現(xiàn)象,并計(jì)算出相應(yīng)情況下的實(shí)驗(yàn)結(jié)果,使得用戶(hù)像身臨其境一樣完成各類(lèi)實(shí)驗(yàn),而不受任何條件因素的限制。目前系統(tǒng)已經(jīng)實(shí)現(xiàn)了大部分中學(xué)物理、化學(xué)、地理實(shí)驗(yàn)功能模塊,取得了較好的應(yīng)用效果。
參考文獻(xiàn):
[1]Richard S.Wright,Jr.Benjamin Lipchak.OpenGL SuperBile[M](4th Edition).北京:人民郵電出版社,2010(9).
[2]徐明亮,盧紅星,王琬.OpenGL游戲編程[M].機(jī)械工業(yè)出版社,2008(1).
[3]Fletcher Dunn,Lan Parberry.3D數(shù)學(xué)基礎(chǔ):圖形與游戲開(kāi)發(fā)[M].清華大學(xué)出版社,2008(5).
[4]Sartaj Sahni. Data Structures Algorithms and Appl- icati ons in C++[M].機(jī)械工業(yè)出版社,2000(1).
[5]程杰.大話(huà)設(shè)計(jì)模式[M].清華大學(xué)出版,2007(12).
作者單位:江西師范大學(xué)軟件學(xué)院,南昌 330022