论文部分内容阅读
摘要:飞行模拟器通过VC++和OpenGL等软件开发工具,采用面向对象的程序设计方法实现仪表仿真和飞行方程仿真等仿真功能。多功能飞行模拟器采用具有真实驾驶杆和各种按钮开关的驾驶舱,通过网络协议完成实时信息传递和数据交换等。实际证明,该方法完成了航空仪表的仿真,取得良好的训练效果。
关键词:仿真技术;OpenGL;图形仪表
中图分类号:P634.3+6
1 引言
航空仪表是人机的交互界面,为飞行员提供飞机的高度、空速等信息,在实际飞行中,它的地位尤为重要,同时“仪表飞行”也是训练的一个重要项目,因此,在飞行模拟器的设计中,仪表仿真系统是影响飞行模拟器性能的关键因素之一。
2.开发平台简介
OpenGL是一个工业标准的三维计算机图形软件接口,它实际上是与图形硬件完全无关的程序设计API,有着强大的图形功能和良好的跨平台移植能力,具有高性能、可扩展性强、等特点。OpenGL实现二维和三维的高级图形技术,在性能上表现得异常优越,包括建模、变换以及更先进的能力,OpenGL的这些能力为实现逼真的三维渲染效果,建立交互的三维景观提供了优秀的软件工具。
Visual C++ 6.0中的MFC包含强大的应用框架,提供丰富的窗口和事件管理函数,是被广泛使用的面向对象的工具,为利用Visual C++ 6.0功能来实现对三维图形的绘制,Windows提供OpenGL32. DLL和GLU32.DLL 动态链接库,Visual C+ + 6.0包含了GL库(opengl32. Lib)、辅助库(glaux.lib)和实用库(glu32.lib),开发者可以在多种硬件平台上方便利用此图形库,更方便地编程,快速地生成复杂的三维图形,且OpenGL在网络上工作时,显示图形的计算机可以不是运行图形程序的计算机,客户机与服务器可以是不同类型的机器, 只要两者服从相同的协议。
3.飞行仪表的设计方案
图形仪表包括图形仪表计算机、显示驱动卡、图形仪表显示器、模拟仪表板,图形仪表的显示信息来自飞行模拟器的主控计算机,因此系统需要在不同计算机之间进行参数传输,网络通信是必不可少的条件。本系统采用的是客户/服务器结构的应用程序,此结构适用于分布式处理的计算机网络环境。图形仪表计算机完成对图形仪表的驱动和数据通信,主要包括网络数据接收、数据处理和仪表驱动等模块。
3.1 软件开发
图形仪表软件的开发平台由Windows 2003/NT、Microsoft Visual C++ 6.0 和OpenGL组成,网络通信程序的建立可参阅参考文献。在此仅讨论基于OpenGL的图形仪表实现方法。
3.1.1 OpenGL的初始化设置
像素格式与渲染描述表是建立OpenGL程序的基础,Windows的应用程序是使用设备描述表进行图形的绘制输出,但OpenGL并不使用标准的设备描述表,它使用渲染描述表完成图形图像的映射,描述表的映射核心是像素格式的设置。
OpenGL初始化设置需完成以下工作:
(1)ChoosePixelFormAt():选择像素格式;
(2)SetPixelFormat():设置像素格式;
(3)wglCreateContext():创建环境设备;
(4)wglMakeCurrent():设置环境设备;
(5)glMatrixMode():设置矩阵模式;
(6)glFrustum():设置视场空间范围;
(7)glViewport():设置视场显示范围。
3.1.2 纹理贴图的载入与管理
图形仪表采用纹理贴图的方式进行绘制,纹理贴图技术是计算机图形学中的一项重要技术,传统的几何只能表示景物的形状,无法描述景物的微观细节,利用纹理图像来描述景物表面各点处的反射属性,可以达到模拟景物表面纹理细节目的,提高图形的真实性,另一方面,还可以简化建模过程。
由于需要的纹理贴图数量较多,为节省系统开销,实现纹理对象之间快速切换,利用纹理列表实现对纹理对象的载入和维护,对纹理对象的载入与管理需以下几个函数:
(1)glGenTextures():创建纹理对象索引;
(2)glBindTexture():绑定/选择纹理对象;
(3)gluBuild2DMipmAps():载入纹理贴图;
3.1.3 图形仪表的绘制
图形仪表的绘制实质上就是利用OpenGL的纹理映射技术在VC++ 6.0下实现图像的动态显示。
图形仪表软件的仪表显示模块共包括以下8个函数,来完成各块航空仪表的显示。
(1)my_draw_biao_kong():显示空速表;
(2)my_draw_biao_dp():显示地平仪;
(3)my_draw_biao_chui():显示升降速度表;
(4)my_draw_biao_wl():显示无线电罗盘;
(5)my_draw_biao_gao():显示高度表;
(6)my_draw_biao_zw():显示转弯侧滑仪;
(7)my_drAw_biAo_wy():显示发动机三用表;
(8)my_drAw_biAo_tlc():显示陀螺磁罗盘
3.2 仪表板的设计要求
为增加仪表的逼真效果,需为图形仪表设计仪表板。仪表板的设计必须同时兼顾显示器可用区域尺寸、仪表位置、仪表板上安装的调节旋钮和按钮空间尺寸等因素。根据这些尺寸和影响关系设计模拟仪表板。
4.总结
Visual C++是一个功能强大的编程工具,在VC环境下进行OpenGL的编程,调用DLL动态链接库。通过对飞机仪表三维可视化实现方法的研究,其结果表明, OpenGL强大的图形功能可以轻松地实现逼真的贴图模型。事实证明,基于OpenGL的图形仪表建模形象逼真、效率高,完全适合飞行训练需要,提高模拟器的更改效率,缩短航空仪表的研发周期。
参考文献
[1] 叶核亚,陈瑞编著,Delphi程序设计实用教程,[M],北京:电子工业出版社,2007.
[2] 陈瑞,等,Delphi程序设计实用教程,第二版,北京:电子工业出版社,2004.
[3] 王行任,等1飞行实时仿真系统及技术[M]1,北京:北京航空航天大学出版社,1998.
[4] 何晓微,许亚平1 航空电子设备[M]1 成都 西南交通大学出版社,2004.
关键词:仿真技术;OpenGL;图形仪表
中图分类号:P634.3+6
1 引言
航空仪表是人机的交互界面,为飞行员提供飞机的高度、空速等信息,在实际飞行中,它的地位尤为重要,同时“仪表飞行”也是训练的一个重要项目,因此,在飞行模拟器的设计中,仪表仿真系统是影响飞行模拟器性能的关键因素之一。
2.开发平台简介
OpenGL是一个工业标准的三维计算机图形软件接口,它实际上是与图形硬件完全无关的程序设计API,有着强大的图形功能和良好的跨平台移植能力,具有高性能、可扩展性强、等特点。OpenGL实现二维和三维的高级图形技术,在性能上表现得异常优越,包括建模、变换以及更先进的能力,OpenGL的这些能力为实现逼真的三维渲染效果,建立交互的三维景观提供了优秀的软件工具。
Visual C++ 6.0中的MFC包含强大的应用框架,提供丰富的窗口和事件管理函数,是被广泛使用的面向对象的工具,为利用Visual C++ 6.0功能来实现对三维图形的绘制,Windows提供OpenGL32. DLL和GLU32.DLL 动态链接库,Visual C+ + 6.0包含了GL库(opengl32. Lib)、辅助库(glaux.lib)和实用库(glu32.lib),开发者可以在多种硬件平台上方便利用此图形库,更方便地编程,快速地生成复杂的三维图形,且OpenGL在网络上工作时,显示图形的计算机可以不是运行图形程序的计算机,客户机与服务器可以是不同类型的机器, 只要两者服从相同的协议。
3.飞行仪表的设计方案
图形仪表包括图形仪表计算机、显示驱动卡、图形仪表显示器、模拟仪表板,图形仪表的显示信息来自飞行模拟器的主控计算机,因此系统需要在不同计算机之间进行参数传输,网络通信是必不可少的条件。本系统采用的是客户/服务器结构的应用程序,此结构适用于分布式处理的计算机网络环境。图形仪表计算机完成对图形仪表的驱动和数据通信,主要包括网络数据接收、数据处理和仪表驱动等模块。
3.1 软件开发
图形仪表软件的开发平台由Windows 2003/NT、Microsoft Visual C++ 6.0 和OpenGL组成,网络通信程序的建立可参阅参考文献。在此仅讨论基于OpenGL的图形仪表实现方法。
3.1.1 OpenGL的初始化设置
像素格式与渲染描述表是建立OpenGL程序的基础,Windows的应用程序是使用设备描述表进行图形的绘制输出,但OpenGL并不使用标准的设备描述表,它使用渲染描述表完成图形图像的映射,描述表的映射核心是像素格式的设置。
OpenGL初始化设置需完成以下工作:
(1)ChoosePixelFormAt():选择像素格式;
(2)SetPixelFormat():设置像素格式;
(3)wglCreateContext():创建环境设备;
(4)wglMakeCurrent():设置环境设备;
(5)glMatrixMode():设置矩阵模式;
(6)glFrustum():设置视场空间范围;
(7)glViewport():设置视场显示范围。
3.1.2 纹理贴图的载入与管理
图形仪表采用纹理贴图的方式进行绘制,纹理贴图技术是计算机图形学中的一项重要技术,传统的几何只能表示景物的形状,无法描述景物的微观细节,利用纹理图像来描述景物表面各点处的反射属性,可以达到模拟景物表面纹理细节目的,提高图形的真实性,另一方面,还可以简化建模过程。
由于需要的纹理贴图数量较多,为节省系统开销,实现纹理对象之间快速切换,利用纹理列表实现对纹理对象的载入和维护,对纹理对象的载入与管理需以下几个函数:
(1)glGenTextures():创建纹理对象索引;
(2)glBindTexture():绑定/选择纹理对象;
(3)gluBuild2DMipmAps():载入纹理贴图;
3.1.3 图形仪表的绘制
图形仪表的绘制实质上就是利用OpenGL的纹理映射技术在VC++ 6.0下实现图像的动态显示。
图形仪表软件的仪表显示模块共包括以下8个函数,来完成各块航空仪表的显示。
(1)my_draw_biao_kong():显示空速表;
(2)my_draw_biao_dp():显示地平仪;
(3)my_draw_biao_chui():显示升降速度表;
(4)my_draw_biao_wl():显示无线电罗盘;
(5)my_draw_biao_gao():显示高度表;
(6)my_draw_biao_zw():显示转弯侧滑仪;
(7)my_drAw_biAo_wy():显示发动机三用表;
(8)my_drAw_biAo_tlc():显示陀螺磁罗盘
3.2 仪表板的设计要求
为增加仪表的逼真效果,需为图形仪表设计仪表板。仪表板的设计必须同时兼顾显示器可用区域尺寸、仪表位置、仪表板上安装的调节旋钮和按钮空间尺寸等因素。根据这些尺寸和影响关系设计模拟仪表板。
4.总结
Visual C++是一个功能强大的编程工具,在VC环境下进行OpenGL的编程,调用DLL动态链接库。通过对飞机仪表三维可视化实现方法的研究,其结果表明, OpenGL强大的图形功能可以轻松地实现逼真的贴图模型。事实证明,基于OpenGL的图形仪表建模形象逼真、效率高,完全适合飞行训练需要,提高模拟器的更改效率,缩短航空仪表的研发周期。
参考文献
[1] 叶核亚,陈瑞编著,Delphi程序设计实用教程,[M],北京:电子工业出版社,2007.
[2] 陈瑞,等,Delphi程序设计实用教程,第二版,北京:电子工业出版社,2004.
[3] 王行任,等1飞行实时仿真系统及技术[M]1,北京:北京航空航天大学出版社,1998.
[4] 何晓微,许亚平1 航空电子设备[M]1 成都 西南交通大学出版社,2004.