基于Vega平台的视点控制技术的研究与设计
2012-07-13王传喜
王传喜,赵 刚
(四川大学 电子信息学院,四川 成都 610064)
视点是计算机图形学中的概念,作用类似于摄像机的镜头或者人的眼睛。视点控制的过程,实质上就是模型视图变换的过程。视点控制包括控制视点位置和控制视点方向,其中视点的位置决定了视点与观察者之间的距离,视点的方向决定了观察对象是否可见。在观察运动物体的时候,为了有充分的时间观察它,就需要视点的速度和物体运动的速度相同。
在Vega环境中底层化了4种视点定位模式,分别是动态定位视点模式 (Motion Model)、束缚定位视点模式(Tether)、导航路径定位视点模式(Path Navigator)、手动定位视点模式(Manual)[1]。其中束缚定位视点模式包括跟随束缚、固定束缚、旋转束缚3种模式;Vega环境中视点控制的过程,类似于人眼观察环境的过程。如果视点控制不合理,即使三维模型很精、仿真系统的功能很完备,同样导致三维视景仿真的效果不佳。
在三维视景仿真的高性能软件Vega平台上,文献针对视点的研究有两类:一是通过调节视角观察一个静止的物体[2],另一种是仅仅用Lynx编辑视点[3]。对用Lynx编辑ADF文件、Vega API编程、外部输入设备等,联合实时动态控制视点的文献没有阐述清楚。文中正是基于手动定位视点模式,设置合理的算法,通过Vega API编程和键盘联合实时动态控制视点的。
1 视点控制的算法设计
1.1 数学模型的建立
将运动的物体A的坐标记为A点,将运动的物体B的坐标记为B点,将线段AB的中点记为M点,且M点是焦点。为了实时观察到两个运动物体的全过程,需要合理的设置视点,因此采用延长BA到C点,线段AC的长度为dAC,设视点和C点的高度值相同,即视点和C点在同一水平面上,作CN垂直与CB,使线段NC的距离为dNC,则N点的三维坐标就是视点的三维坐标。其视点与物体空间位置关系如图1所示。
图1 视点与物体空间位置关系图Fig.1 Spatial location diagram of the viewpoint and objects
1.2 焦点和视点坐标的解算
C点和N点都在Z0=z的平面内,则N(xN,yN,zN),其中:
则N(xN,yN,zN)就是需要定位的视点。
2 视点控制的实现
利用上述视点控制算法,在三维视景仿真平台Vega上,用Lynx编辑好ADF文件,通过实时获取运动物体A和运动物体B的坐标,调用视点控制的算法实时计算出视点和焦点坐标,利用Vega API编程就可以实时观察动态运动物体A和运动物体B运动的全过程、且可以通过键盘动态调节视点。在编写Vega程序之前,应该清楚Vega程序架构和主要执行顺序等。其系统工作流程图如图2所示。
2.1 Lynx配置ADF文件
运行Vega应用程序前,需对各种参数初始化,运行期间保持参数的不断更新。各种参数都存放在ADF文件中,Lynx界面实质是用来编辑ADF文件的[4]。将需要用的模块中的特定参数进行修改,其他的参数使用Lynx界面提供的缺省值。主要配置为:将两个运动体模型、地景模型加入到场景中,设置运动模型的运动模式,利用路径工具(Path Tool)添加运动体运动的导航路径,将场景运动体的定位方法设置成路径导航。为了满足实时改变观察者位置的要求,将视点定位方式设置成手动。
图2 系统工作流程图Fig.2 Flow chart of the system operation
2.2 关键的Vega API编程
Vega提供了完整的C语言应用程序接口API和丰富的函数库。在用视点模块设计和操作视点时,Vega也提供了相应的类和函数。用Lynx编辑ADF文件,并解算出视点和焦点的位置信息后,在VC6.0的环境中,调用Vega API开发库函数实现视点调节的功能。利用Vega实时的获取两个运动体的位置信息,并通过视点控制算法计算出焦点M和视点N的三维坐标。视点定位方法是视点相对于运动体A相对静止,因此视点定位采用相对于本机的手动STATIC视点,并使视点始终注视焦点。两个运动体在运动的过程中,它们的坐标位置是不断变化、持续更新的,引起焦点也是实时变化的。通过Vega API函数调节视点的关键代码如下:
pos0=vgNewPos();
//新建一个三维位置
vgPosVec(pos0,xobs,yobs,zobs,0,0,0);
//对三维位置赋值
vgProp(obs,VGOBS_TETHERSTATE,VGOBS_STATIC);
//设定视点的定位方式为手动定位
vgPos(obs,pos0);
//将三维位置信息传递给视点
vgPosVec(pos0,xmiddle,ymiddle,zmiddle,0,0,0);
//设定焦点的三维位置信息
vgProp(obs,VGOBS_LOOKAT_TARGET,VGOBS_L_POS);
/
/设定视点的属性是观察具体的三维坐标点
vgObservLookatPos(obs,pos0);
//设定视点观察的是焦点信息
2.3 键盘动态调节视点
在三维实时视景仿真系统中,为了获得最佳的观察效果,需要对视点调试算法中的dAC和dNC的大小实时动态的调节。在三维视景仿真中,习惯并普遍流行用键盘控制运动这种操作方式。因此采用键盘实时调节dAC和dNC的大小,协同控制视点的方法。 其中 keyInput(vgWindow*win)[5]函数用于响应所有的键盘事件,实际上处理键盘的函数是vgGetWinKey(vgWindow*win),此函数返回被按下键的相应的ASCII码整数值[6],*win代表指向Vega窗口的指针。帧循环中加入键盘输入事件,就可以通过键盘动态调节视点相对于运动体A的相对位置,优化三维视景仿真系统中的视点调节,增加沉浸感。其按键协同调节视点的定义如表1所示。
表1 按键协同调节视点的定义Tab.1 Definition of keyboard collaborative control viewpoint
3 Vega仿真结果
在Vega视景仿真平台上,以飞机为例,通过实时动态的控制视点,实时逼真的再现了飞机B从远方逐渐向飞机A接近的全过程,且可以通过键盘实时动态调节视点,仿真效果良好。飞机A与飞机B的距离是698 m的仿真图如图3所示。飞机A与飞机B的距离是172 m的仿真图如图4所示。
图3 两架飞机距离是698 m的仿真图Fig.3 Distance of two plane:698 meter
4 结束语
文中在三维视景仿真的高性能软件Vega平台上,深入研究视点控制的基本原理,建立了三维数学模型,提出了用向量解算动态的视点和焦点位置的方法,借助Vega API编程和外部输入设备,实现了实时动态观察两个物体运动的全过程,并且可以用键盘协同控制视点,验证了视点控制算法的正确性、有效性,提高了三维实时视景仿真直观性、灵活性、可控性,增强了视景仿真的真实性、实时性和交互性。本项视点控制的研究具备较好的通用性,对于某些对视点要求较高的三维视景开发系统有较大的推广价值,对于基于底层的OpenGL视景仿真开发也有一定的借鉴意义。
图4 两架飞机距离是172 m的仿真图Fig.4 Distance of two plane:172 meter
[1]龚卓蓉.Lynx图形界面[M].北京:国防工业出版社,2002.
[2]陈亮,欧阳清,刘志强.虚拟舰船舱室的无遮挡显示研究[J].舰船电子工程,2010(1):156-159.
CHEN Liang,OU YANG-qing,LIU Zhi-qiang.Research on accessibility show in the virtual Scene of a cabin[J].Ship Electronic Engineering,2010(1):156-159.
[3]宋志明,康凤举.视景仿真的关键技术[J].计算机应用,2004(5):67-68.
SONG Zhi-ming,KANG Feng-ju.Key techniques in scene simulation[J].Computer Applications,2004(5):67-68.
[4]MultiGen-Paradigm Inc.Lynx User s Guide(Version 3.7)[M].Dallas:MultiGenPar-adigm Inc,2001.
[5] MultiGen-Paradigm Inc. Vega Programmers Guide(Version3.7)[M].Dallas:MultiGenPar-adigm,Inc,2001.
[6]王乘,李利军,周均清,等.Vega实时三维视景仿真技术[M].武汉:华中科技大学出版社,2005.