基于Virtools的漫游地图算法实现
针对在Virtools Dev ,给出漫游者前进方向实时显示、漫游者位置实时显示、漫游地图的缩放和跳转等功能的实现方法,并制作出3个自成体系的通用模块。
在用Virtools制作类似漫游的应用中,可以使用这3个通用模块快速实现漫游地图的4种功能,提高了开发效率。在漫游者位置实时显示功能算法中使用双重定位策略和地图缩放策略,保证了整个定位显示画面的准确性和流畅性。
漫游地图在大场景漫游应用中是不可或缺的组成部分[1-4],能显示漫游者的位置和方向,能实现漫游者在场景中的跳转等功能。在Virtools Dev (Behavior Building Block)可以快速实现漫游地图的一些基本功能。在开发时只能先设计出漫游地图的一些基本功能的实现算法,再利用Virtools Dev 。目前Virtools平台下的漫游地图算法还存在诸多不足,也没有提供可以快速实现这些功能的通用的BG(Behavior Building Graph)模块。文中在Virtools ,分析漫游者前进方向实时显示、漫游者位置实时显示、漫游地图的缩放和跳转等功能的实现方法,并制作出3个自成体系的通用模块。
1 前进方向实时显示模块
该模块用一个2D Frame来指示漫游者的前进方向,称为目标2D Frame。它的贴图由一系列指示方向的小图片组成,形成一个按规则均匀分布可表示角度的子图片序列。该模块的目的是实现对漫游者前进方向三维向量的实时检测,并获取它在俯视图中的二维方向向量,实时确定用于指示方向的子图片的序号,将该子图片显示在目标2D Frame上。
算法设计
用S和S′分别表示漫游者的自身坐标系和Virtools中的世界坐标系。如果坐标系S中的标准向量i,j和k在坐标系中S′分别表示为U′=〈u′xu′yu′z〉T,V′=〈v′xv′yv′z〉T和W′=〈w′xw′yw′z〉T,并且坐标系S中的原点O=〈0 0 0〉在坐标系中的表示为O′=〈x y z〉,那么坐标系S到坐标系S′的变换矩阵M在齐次坐标系下为M=u′xv′xw′xx;u′yv′yw′yy;u′zv′zw′zz;0 0 0 1。
在Virtools中,一般选择漫游者自身坐标系的z轴正方向为其前进方向,根据向量W′的几何意义可知,漫游者的前进方向在世界坐标系中的表示即为W′,前进方向在俯视图中的投影向量为:w′俯视图=〈w′xw′z〉。因为无法直接求取向量w′俯视图到贴图中的子图片的序号的映射,所以采用先将向量w′俯视图映射到0°~360°角度值,再将0°~360°角度值转换为子图片序号的映射的方法。
令θ=arctanw′zw′x,则y角度=,一象限;(π+θ),二,三象限;(2π+θ),四象限。
这样y角度的值域为0°~360°,它可以精确地表示漫游者的前进方向;但是由于指示前进方向的子图片是离散的,并且是不精确的,所以要根据该漫游应用对方向指示的精确度要求确定子图片序列,以及确定从y角度到子图片序号的映射。子图片数量越多,映射越密集,方向指示画面也越精确、流畅。
编程实现
先添加Op BB,指定操作类型为Get world matrix,设置参数输入类型为3D Entity,参数输出类型为Matrix,设定参数输入端3D Entity为漫游者;再添加参数操作Get Z,设置参数输入类型为Matrix,输出类型为Vector,并将Get Z的参数输入端连接到Op BB的参数输出端,这样输出端就得到了变换矩阵M中的向量W′;然后添加参数操作Get X和Get Z,获取向量W′中的分量w′x和w′z,、y角度的值和确定目标2D Frame贴图中的子图片序号。
通用BG模块
为了实现BB程序流程的分发和重用,可以把实现特定功能的BB集合组合成BG模块,然后将它导出形成Virtools脚本文件,方便其他用户导入并使用。在Virtools的Schematic操作页内的BB脚本编辑栏里单击右键,在弹出的快捷菜单栏中选择Draw Graph,即可将具有特定功能的BB集合组合成一个BG,然后将那些需要灵活设置的参数拖到BG的外边,形成一个可以灵活设置参数并实现特定功能的BG模块。在BG上方单击右键,选择save as…,就可以将该BG模块导出。如果想隐藏其内部的BB程序流程,则选中save as…对话框左下方的选项Hide script r
virtools的漫游地图算法实现 来自淘豆网m.daumloan.com转载请标明出处.