APP下载

基于Vega平台的视点控制技术的研究与设计

2012-07-13王传喜

电子设计工程 2012年5期
关键词:视景视点焦点

王传喜,赵 刚

(四川大学 电子信息学院,四川 成都 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.

猜你喜欢

视景视点焦点
焦点
虚拟现实技术在游戏设计中的应用及研究
“两会”焦点
本期焦点
焦点
视点
让你每天一元钱,物超所值——《今日视点—2014精萃》序
两会视点
全回转拖轮运动建模与视景仿真
基于Vortex与Vega Prime的车辆模拟器动力学与视景仿真