我要发帖 回复

中级会员

31

主题

185

积分

0

专家分

:

私信
发表时间 : 2006-9-12 08:41:32 | 浏览 : 2841    评论 : 8
输入设备在Vega 应用中的接入方法研究,希望对学习vega的人有所帮助
摘 要:Vega 软件环境默认的输入设备为鼠标,以其控制实体或视点的运动不够形象直观,需要将特定的输入设备应
用到视景仿真系统中。在分析了Vega 结构和工作原理的基础上,通过设计自定义的运动模式以及创建管理输入设备的
Vega 类实例,将特定的输入设备接入到基于Vega 的视景仿真应用中。结果表明,该方法操作简单灵活,感觉直观,有效地
改善了仿真实验效果。
关键词:视景仿真;Vega ;输入设备;运动模式
中图分类号: TP391. 9
Study on the Method for Introducing Input Device in Vega Appl ication
Song Zhiming  Kang Fengju  Nie Weidong  Ni Xinyao
(Marine colleg , Northwestern Polytechnical University , Xi’an  710072)
Abstract :The default input device in Vega software environment is mouse. It’s not realistic and intuitional to control the mo2
tion of object or observer by mouse. Other types of input devices need to be applied to scene simulation system. In this paper , the
structure and work theory of Vega are analyzed. Then a kind of motion model is designed and an instance of Vega class is created
to manage the device , through which the specified device is introduced in the scene simulation application based on Vega. The re2
sults show that the operation is easy and flexible , the experimenter has an intuitional sense and the simulation effects are improved.
Key words :scene simulation ; Vega ; input device ; motion model
Class number :TP391. 9
1  引言
近年来随着计算机、图形处理与图像生成等技术地飞速发展,视景仿真技术在国防和国民经济的众多领域得到了广泛应用[1 ] 。工程应用中,多采用高层三维开发环境来开发视景仿真软件系统。其中由美国MPI 公司开发的Vega 软件由于其性能卓越,近年来成为视景仿真业界的主流开发平台[2 ] 。Vega 环境中默认的输入设备为鼠标。在许多仿真应用中,实验人员需要与虚拟环境实时交互,如虚拟舰船驾驶中要操控舰船实体的运动,此时,通过鼠标进行交互不够形象直观,需要将操纵杆等特定的外设接入仿真系统中。本文通过设计自定义运动模式函数和创建输入设备的Vega 类实例,在基于Vega 的视景仿真应用中实现了以外接设备控制仿真实体或视点的运动,此方法已在多个视景仿真项目中得到成功应用。
2  Vega 软件环境的组成及工作原理
分析
  Vega 软件环境包括一个图形用户界面Lynx[3 ]和C 语言应用程序接口[4 ] 。Vega 是面向对象的,视景应用中的各种图像属性都被定义为相应的“类”,如“VgWindow”类管理和控制所有与窗口有关的属性;“VgObject”类控制和管理所有可见几何实体的有关属性。Lynx 是Vega 的图形用户接口,它提供了一个通过鼠标点击来创建Vega 应用的界面。Lynx 中包含与各个类对应的面板,用
来创建类的实例以及初始化其参数,利用Lynx 创建生成的文件称为ADF (Application Definition File) 文件,它是图形环境、视景环境以及组成视景仿真应用的数据库组件的完全描述。ADF 文件可以单独使用以生成简单的视景仿真,也可以和用户提供的C 代码连接,开发出灵活、复杂的视景仿真应用。基本的Vega 系统包含有两个可调用的C 程序库psPsi 库和psVg 库。其中psVg 库主要是管
理图形硬件以及为复杂环境中的物体交互仿真提供方法; psPsi 库的函数功能主要是矩阵堆栈管理、列表管理、扫描/ 析函数等[5 ] 。这两个库对于Vega 中所有类是通用的,能被任何标准的C/ C++ 程序链接。当用户开发的应用程序和ADF 文件连接时,应用程序是利用psPsi 库中的程序从ADF 文件中读入数据的。其基本顺序是:程序初始化时, 使用vgAddScanClass 和vgAddScanKey2word 为各个类和关键字安装回调函数,然后利用vgAddScanFile 加载ADF 文件,进而调用vgDoScan引导对文件的浏览,此时,回调函数将被调用。
Vega 中还定义了各类公用的API 函数,各类通过在其定义中注册公用函数的回调函数以实现共用Vega 的公用函数。具体地讲,当类的实例调用某个Vega 通用函数时,该函数调用类定义中注册的相应的回调函数,转而执行相应的功能。在实际应用中,用户新建需要的各个类的实例,并对其参数进行初始化设置。在仿真过程中,根据仿真进程通过API 函数动态地改变各实例的属性,产生仿真动画。
综上所述,基于Vega 开发实时应用的基本工作原理是,利用ADF 文件定义各个所需要的类的实例并进行初始化设置,用户程序读入ADF 文件中的数据,装载相关的数据库,配置图像系统,然后调用Vega 中执行相关功能的程序库,进而渲染场景。实例一旦被创建,便被加入列表项中,所有实例通过名字被索引,当用户得到实例的句柄,就可利用Vega 共用函数对实例的属性进行处理。
3  输入设备在Vega 环境中的接入
3. 1 设计思路
在Vega 环境中,输入设备和运动模式也被抽象为类。要接入新的输入设备,最简单的方式就是定义一个输入设备的实例,通过此实例管理新的输入设备。用户操纵输入设备,主要是控制视点或仿真实体的运动,故针对新的输入设备实例,还需要再设计一种用户自定义的运动模式,使输入设备按照此模式控制运动。本文将新的运动模式设计为一个函数,在Vega 中注册该函数,设其ID 值为V GMOT USER1 ,之后,所有V GMOT MODEL属性值为V GMOT USER1 的运动模式实例将调用该函数以处理运动模式的事件。在视景仿真程序中定义一个运动模式实例(设为Mot) 和输入设备实例(设为Idv) ,将Mot 的V GMOT MODEL属性值指定为V GMOT USER1 ,将Idv 设计为所需要的输入设备,然后把Idv 绑定到Mot 上,以及把Mot 绑定到视点或仿真实体,于是用户可以通过外设按照自定义的运动模式控制视点或实体的运动。
3. 2 自定义运动模式的设计
“Vg. h”文件中定义了一个结构体vgMotion2CallbackStruct [4 ] 。其中的整型数据成员reason 共有V GMOT INIT EVENT、V GMOT RESETEVENT、V GMOT UPDATE EVENT 和V G2MOT EXIT EVENT 四种形式,分别对应运动模式的初始化、重置、更新和退出四种不同事件。利用该结构体,设计函数以实现用户自定义运动模式。当某个运动模式事件发生,函数中应作出相应的处理。以绑定操纵杆的运动模式为例,设需要的控制方式为:摇杆向前推,前进速度增加;向后拉,后退速度增加;摇杆左摆,向左转向;摇杆右摆,向右转向,且速度和转向角度变化随摇杆作用幅度地增大而线性增大。基于Vega 的视景坐标系统采用右手系,如图1 所示,图中v_
位于X - Y平面内,表示自定义运动模式的速度矢量。于是,当操纵杆状态改变,即运动模式的更新事件发生时,相应的处理函数将按照下面的(1) 、(2) 、(3) 、(4) 式确定运动体的空间坐标、转向角度及速度参数。
ψ2 =ψ1 - f h•IDV x•dt (1)
式中,ψ为转向角,下标2 表示更新后的状态,下标1 表示更新前的状态; f h 表示转向角调整系数,控制操纵杆改变转向的快慢, 可在仿真中动态调整; IDV x 为操纵杆沿X 方向的偏移; dt 为上次更新到本次更新的时间量。
     x 2 = x 1 - v•sinψ2•dt (2)
     y2 = y1 + v•cosψ2•dt (3)
式中, x 、y 为运动体坐标值, 下标1 表示更新前,下标2 表示更新后; v 表示运动速度的大小, 其值由(4) 式确定; dt 同上式。
v = f v•IDV y (4)式中, f v 为速度调整系数; IDV y 为操纵杆沿Y方向的偏移。处理更新事件的函数不但可以根据vgMotionCallbackSt ruct 的data 成员读入外设的状态信息,也可以访问共享内存或套接字以获得新的位置和状态信息,因此本文方法也可应用在网络环境。若没有新的信息产生,上一个状态参数将被循
环使用。对于运动模式的初始化、重置、和退出事件,在自定义运动模式函数中只要作相应的定义即可,在此从略。
3. 3 输入设备实例的创建
输入设备的工作原理一般都比较简单。仍以操纵杆为例,其主体主要由两部分构成:一是具有X、Y 参数设定的方向轴;二是按键。方向轴部分的四个方向分别都有金属片传感器,当操纵杆向某方向推动后便会产生相应的电气状态,通过接口传到PC 上进行分析,从而确定方向;而按键部分通常每个按键对应一个地址,当按下时便产生相应的效果。在Vega 应用中,通过创建一个输入设备类的实例来管理PC 操纵杆。主要开发步骤为:
(1) 使用vgNewIDev( ) 创建新的输入设备实例;
(2) 利用vgIDevSetDeviceFile ( ) 指定设备文件;
(3) 配置PC 操纵杆的端口号、工作方式(同步或异步) 、波特率等性能参数。
(4) 利用函数vgIDevOpen ( ) 打开设备,准备读入数据。
之后通过vgMot IDev ( ) 函数将外设绑定在运动模式实例上,为其控制运动作好准备,设备的当前状态包括位置、方向、按键状态等都可以被系统查询。
3. 4 在应用程序中实现输入设备对运动体的控制
在Lynx 图形环境中定义运动物体、运动模式和输入设备的实例,生成ADF 文件;之后在应用程序中获得要控制的运动体实例的句柄,将运动模式实例绑定于该运动体;而运动模式实例的属性值设定为自定义运动模式函数的注册ID 值,保证在运动模式更新事件发生时系统调用该函数以响应。
Vega 应用的主循环中包括系统函数
vgSyncFrame ( ) 和vgFrame ( ) 的调用, 在调用vgFrame () 期间,系统中所有有效的运动模式实例被更新一次,此时输入设备的位置和按键状态被查询,利用vgGet Time ( ) 可以从系统中返回当前时间,所有这些数据,加上运动模式实例的句柄和它的用户数据指针,被存储在结构体vgMotionCall2backSt ruct 中。在自定义运动模式函数中,首先获得运动模式实例句柄,然后通过vgGetMot IDev ( )函数得到该运动模式实例所绑定的输入设备实例,进而使用函数vgGet Pos 和指向输入设备实例的指针,得到物理设备当前的位置坐标( IDV x 、IDVy) ,于是,根据(1) 、(2) 、(3) 、(4) 式中的算式确定运动模式的位置和运动状态,当然也就确定了运动模式所依附的运动体的位置和运动状态。
4  应用实例
本文方法已成功应用于虚拟海洋战场视景仿真系统、机群对抗仿真演示系统等多个工程项目中。与传统的鼠标方式相比,特定的输入设备操作更加灵活、直观,从而提高了视景仿真效果。图2是舰船在操纵杆控制下航行的效果图。
5  结束语
近年来,视景仿真在科研、娱乐、商业等领域得到了越来越广泛的应用。特定的视景仿真系统需要特定的交互设备。本文给出了一种在基于Vega的仿真应用中接入外设的方法,应用效果良好。该方法具有一定的应用推广价值,各领域的视景仿真开发用户可对其稍作修改而将其它类型的输入设备连接到自己的视景仿真系统中。
参考文献
[1 ]康凤举. 现代仿真技术与应用[M] . 北京: 国防工业出版社, 2001
[2 ]吴家铸等. 视景仿真技术及应用[M] . 西安:西安电子科技大学出版社, 2001
[ 3 ]MultiGen - Paradigm Inc. . MultiGen Creator User’sGuide (Version 2. 5) [ S ] . U. S. A : MultiGen - Paradigm
Inc. , 2001
[ 4 ] MultiGen - Paradigm Inc. . Vega Programmer’s Guide (Version 3. 6) [ S ] . U. S. A : MultiGen - Paradigm
Inc , 2001
[5 ]MultiGen - Paradigm Inc. . Vega Man Pages (Ver2ion 3. 7) [ S] . U. S. A : MultiGen - Paradigm Inc. 2001

最近VR访客

wenyg 评论于2007-11-22 23:39:57
真好,这类似的文章应该多一些才好
qdobp 评论于2007-11-25 15:58:03
thanks!!
一剑西来 评论于2007-11-26 12:30:07
想用这个,到是一直没试,
wenyg 评论于2007-11-28 11:51:08
顶!!!  在各种外设的实现上,希望再多些讨论!!
yinlei_w 评论于2007-12-2 19:18:55
作者是哪位高手?
ziye 评论于2008-3-4 15:21:16
谢谢了
henry0henry 评论于2008-3-12 08:36:59
华中科技大和vega自带程序都有关于自定义运动模式的源代码。只要在motion里将设备,改为joystick就可以实现手柄控制。这篇文章,总结的不错。收藏了。谢谢楼主
shenghry 评论于2008-4-4 02:01:05
不错啊

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-3-8 02:37 AM

返回顶部