錢英軍 于彥明 祝玉華
1. 黑龍江司法警官職業(yè)學(xué)院 150060; 2. 唐山師范學(xué)院 063000
OpenGL在固體物理教學(xué)中的應(yīng)用
錢英軍1于彥明2祝玉華2
1. 黑龍江司法警官職業(yè)學(xué)院 150060; 2. 唐山師范學(xué)院 063000
根據(jù)固體物理教學(xué)特點將OpenGL函數(shù)庫封裝成為C++Builder的組件,使得課件的開發(fā)效率有較大提高。
OpenGL;類;封裝
OpenGL;class; encapsulation
固體物理教學(xué)難點之一就是如何利用多媒體技術(shù)對各種晶體結(jié)構(gòu)進行形象的演示,以達到深化教學(xué)效果的目的。如果能夠進行交互操作則效果更佳。因此我們選用了OpenGL編程的方法,此方法的優(yōu)點就是可以獲得真三維圖像,幾何體的大小、位置及其運動可以嚴格按照給定參數(shù)或函數(shù)描繪,并可以實現(xiàn)實時人機交互;缺點就是不能像一些二維工具提供所見即所得的方法,需要更多的計算機語言的知識和OpenGL庫函數(shù)的知識。
選用OpenGL面臨一個困難就是它沒有提供像C++那樣面向?qū)ο蟮念惙庋b,因此,編程效率比較低,而且不能有效地與像C++ Builder這樣的開發(fā)工具整合在一起,使用起來很不方便。
為此,我們利用C++ Builder提供的控件開發(fā)功能將OpenGL需要做的初始化和程序結(jié)束時應(yīng)做的釋放動作封裝成為一個GLScene控件(選擇TCustomControl作為父類),并將其添加到組件面板Compoment Palette中。
與OpenGL初始化和關(guān)閉有關(guān)的私有數(shù)據(jù)成員有:應(yīng)用程序設(shè)備描述符句柄HDC,著色描述符表句柄HGLRC、像素格式描述符PFD等;成員函數(shù)setupPFD功能就是選擇、設(shè)置PFD。消息處理函數(shù)GLWndProc主要功能是,接到WM_CREATE消息后,運行setupPFD函數(shù),成功后獲取HDC,生成HGLRC后,將著色 描 述 符 表 生 效 ; 接 到WM_DESTROY后,將HGLRC失效,同HDC一起予以釋放。
在程序設(shè)計期,如果在表單上加入GLScene元件則可以在設(shè)計期對其特性進行可視化的修改,對要響應(yīng)的事件(見圖一)加入處理代碼。
其次,根據(jù)固體物理晶體結(jié)構(gòu)展示要求,我們將一些OpenGL函數(shù)封裝成類,它們分別是GLCollection、GLTransform、GLMaterial、GLGeometry、GLCamera,將GLCamera和GLCollection加入TOpenGLScene。
GLCollection是我們要渲染的場景,它的子類包括要進行的變換GLTransform,而GLTransform的子類是GLGeometry,它是要繪制的幾何體,它的子類是該幾何體的材質(zhì)和所需的光照。GLCamera主要負責設(shè)置視場變換。它們的關(guān)系見圖二。
圖一 GLScene控件的特性和響應(yīng)事件
圖二 封裝類之間關(guān)系
圖三 幾何體類的成員和方法
圖四 程序效果圖
在定義了以上類之后,就可以開發(fā)具體的課件了。我們以面心立方體為例,來說明上述方法的應(yīng)用過程。
首先,打開C++Builder中建立一個新工程,然后,從組件面板中選擇TOpenGLScene放到應(yīng)用程序的窗體Form上,在對象檢視器Object Inspector中選擇Align為alClient,表示該組件與窗體的客戶區(qū)對齊,其它特性可以選擇缺省設(shè)置即可。在窗體的OnShow事件中加入處理代碼,包括 根 據(jù) 本 物 理 問 題 生 成GLCollection、GLTransform、GLGeometry、GLMaterial、GLLight和GLCamera的實例,其中GLGeometry的成員和方法(見圖三)。將GLScene的GLCollection和GLCamera成員指向剛生成的實例即可,最后將應(yīng)用程序的OnIdle事件句柄指向TOpenGLScene的DrawScene函數(shù),運行效果如圖四。
值得指出的是,在對OpenGL進行類封裝之后,為這些類提供了具有常用參數(shù)的構(gòu)造函數(shù),在生成類的實例時調(diào)用帶有缺省參數(shù)的構(gòu)造函數(shù)后,開發(fā)速度得以加快。由于固體物理中要演示的晶體結(jié)構(gòu)不需要貼圖,所以我們在應(yīng)用中沒有對貼圖進行封裝。
為快速開發(fā)課件,我們在封裝類的時候,加入了從數(shù)據(jù)文件讀取幾何體尺寸、位置和材質(zhì)參數(shù)、窗口參數(shù)、照明參數(shù)等數(shù)據(jù)的方法。這也是TOpenGLScene類創(chuàng)建的目標-只需在數(shù)據(jù)文件中輸入?yún)?shù),在程序設(shè)計期,給出TTransform類的變換函數(shù),即可完成程序設(shè)計。
[1]安杰爾著,李桂瓊,張文祥譯.OpenGL程序設(shè)計指南(第2版)——國外經(jīng)典教材·計算機科學(xué)與技術(shù)[M]. 北京:清華大學(xué)出版社.2005.
[2]李東,王宏.Borland C++ Builder 5 高級開發(fā)技術(shù)[M]. 北京:中國水利水電出版社.2000.
[3]數(shù)碼影像技術(shù)叢書編委會. Cosmo3D 程序設(shè)計指南[M]. 北京:北京希望電子出版社.2000.
[4]數(shù)碼影像技術(shù)叢書編委會. 高級圖形圖像核心技術(shù)寶典-程序員編程指南[M]. 北京:北京希望電子出版社. 2000.
[5]蔡伯壎. 固體物理基礎(chǔ)[M]. 北京:高等教育出版社.1990.
OpenGL’s application in solid-state physics teaching
QIAN Yingjun1YU Yanming2ZHU Yuhua2
(1. Heilongjiang judicial officers Vocational College, Harbin 150060; 2. Tang Shan Teachers College, Tangshan 063000)
According to the solid-state physics’s teaching characteristic, the OpenGL function storehouse are encapsulated into C++Builder’s module, in this way the development efficiency of the courseware have been enhanced greatly.
錢英軍(1971- )男,黑龍江省哈爾濱人,碩士,副教授,從事電氣工程、計算機網(wǎng)絡(luò)技術(shù)研究。