钱英军 于彦明 祝玉华
1. 黑龙江司法警官职业学院 150060; 2. 唐山师范学院 063000
OpenGL在固体物理教学中的应用
钱英军1于彦明2祝玉华2
1. 黑龙江司法警官职业学院 150060; 2. 唐山师范学院 063000
根据固体物理教学特点将OpenGL函数库封装成为C++Builder的组件,使得课件的开发效率有较大提高。
OpenGL;类;封装
OpenGL;class; encapsulation
固体物理教学难点之一就是如何利用多媒体技术对各种晶体结构进行形象的演示,以达到深化教学效果的目的。如果能够进行交互操作则效果更佳。因此我们选用了OpenGL编程的方法,此方法的优点就是可以获得真三维图像,几何体的大小、位置及其运动可以严格按照给定参数或函数描绘,并可以实现实时人机交互;缺点就是不能像一些二维工具提供所见即所得的方法,需要更多的计算机语言的知识和OpenGL库函数的知识。
选用OpenGL面临一个困难就是它没有提供像C++那样面向对象的类封装,因此,编程效率比较低,而且不能有效地与像C++ Builder这样的开发工具整合在一起,使用起来很不方便。
为此,我们利用C++ Builder提供的控件开发功能将OpenGL需要做的初始化和程序结束时应做的释放动作封装成为一个GLScene控件(选择TCustomControl作为父类),并将其添加到组件面板Compoment Palette中。
与OpenGL初始化和关闭有关的私有数据成员有:应用程序设备描述符句柄HDC,着色描述符表句柄HGLRC、像素格式描述符PFD等;成员函数setupPFD功能就是选择、设置PFD。消息处理函数GLWndProc主要功能是,接到WM_CREATE消息后,运行setupPFD函数,成功后获取HDC,生成HGLRC后,将着色 描 述 符 表 生 效 ; 接 到WM_DESTROY后,将HGLRC失效,同HDC一起予以释放。
在程序设计期,如果在表单上加入GLScene元件则可以在设计期对其特性进行可视化的修改,对要响应的事件(见图一)加入处理代码。
其次,根据固体物理晶体结构展示要求,我们将一些OpenGL函数封装成类,它们分别是GLCollection、GLTransform、GLMaterial、GLGeometry、GLCamera,将GLCamera和GLCollection加入TOpenGLScene。
GLCollection是我们要渲染的场景,它的子类包括要进行的变换GLTransform,而GLTransform的子类是GLGeometry,它是要绘制的几何体,它的子类是该几何体的材质和所需的光照。GLCamera主要负责设置视场变换。它们的关系见图二。
图一 GLScene控件的特性和响应事件
图二 封装类之间关系
图三 几何体类的成员和方法
图四 程序效果图
在定义了以上类之后,就可以开发具体的课件了。我们以面心立方体为例,来说明上述方法的应用过程。
首先,打开C++Builder中建立一个新工程,然后,从组件面板中选择TOpenGLScene放到应用程序的窗体Form上,在对象检视器Object Inspector中选择Align为alClient,表示该组件与窗体的客户区对齐,其它特性可以选择缺省设置即可。在窗体的OnShow事件中加入处理代码,包括 根 据 本 物 理 问 题 生 成GLCollection、GLTransform、GLGeometry、GLMaterial、GLLight和GLCamera的实例,其中GLGeometry的成员和方法(见图三)。将GLScene的GLCollection和GLCamera成员指向刚生成的实例即可,最后将应用程序的OnIdle事件句柄指向TOpenGLScene的DrawScene函数,运行效果如图四。
值得指出的是,在对OpenGL进行类封装之后,为这些类提供了具有常用参数的构造函数,在生成类的实例时调用带有缺省参数的构造函数后,开发速度得以加快。由于固体物理中要演示的晶体结构不需要贴图,所以我们在应用中没有对贴图进行封装。
为快速开发课件,我们在封装类的时候,加入了从数据文件读取几何体尺寸、位置和材质参数、窗口参数、照明参数等数据的方法。这也是TOpenGLScene类创建的目标-只需在数据文件中输入参数,在程序设计期,给出TTransform类的变换函数,即可完成程序设计。
[1]安杰尔著,李桂琼,张文祥译.OpenGL程序设计指南(第2版)——国外经典教材·计算机科学与技术[M]. 北京:清华大学出版社.2005.
[2]李东,王宏.Borland C++ Builder 5 高级开发技术[M]. 北京:中国水利水电出版社.2000.
[3]数码影像技术丛书编委会. Cosmo3D 程序设计指南[M]. 北京:北京希望电子出版社.2000.
[4]数码影像技术丛书编委会. 高级图形图像核心技术宝典-程序员编程指南[M]. 北京:北京希望电子出版社. 2000.
[5]蔡伯壎. 固体物理基础[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- )男,黑龙江省哈尔滨人,硕士,副教授,从事电气工程、计算机网络技术研究。