资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
基于Virtools的漫游地图算法实现针对在Virtools Dev 3.5平台下实现漫游地图的各种功能存在实现算法不完善等问题,给出漫游者前进方向实时显示、漫游者位置实时显示、漫游地图的缩放和跳转等功能的实现方法,并制作出3个自成体系的通用模块。 在用Virtools制作类似漫游的应用中,可以使用这3个通用模块快速实现漫游地图的4种功能,提高了开发效率。在漫游者位置实时显示功能算法中使用双重定位策略和地图缩放策略,保证了整个定位显示画面的准确性和流畅性。 漫游地图在大场景漫游应用中是不可或缺的组成部分1-4,能显示漫游者的位置和方向,能实现漫游者在场景中的跳转等功能。在Virtools Dev 3.5平台下还没有既成的BB(Behavior Building Block)可以快速实现漫游地图的一些基本功能。在开发时只能先设计出漫游地图的一些基本功能的实现算法,再利用Virtools Dev 3.5平台已经提供的BB编程实现。目前Virtools平台下的漫游地图算法还存在诸多不足,也没有提供可以快速实现这些功能的通用的BG(Behavior Building Graph)模块。文中在Virtools Dev3.5平台下,分析漫游者前进方向实时显示、漫游者位置实时显示、漫游地图的缩放和跳转等功能的实现方法,并制作出3个自成体系的通用模块。 1前进方向实时显示模块 该模块用一个2D Frame来指示漫游者的前进方向,称为目标2D Frame。它的贴图由一系列指示方向的小图片组成,形成一个按规则均匀分布可表示角度的子图片序列。该模块的目的是实现对漫游者前进方向三维向量的实时检测,并获取它在俯视图中的二维方向向量,实时确定用于指示方向的子图片的序号,将该子图片显示在目标2D Frame上。 1.1算法设计 用S和S分别表示漫游者的自身坐标系和Virtools中的世界坐标系。如果坐标系S中的标准向量i,j和k在坐标系中S分别表示为U=uxuyuzT,V=vxvyvzT和W=wxwywzT,并且坐标系S中的原点O=0 0 0在坐标系中的表示为O=x y z,那么坐标系S到坐标系S的变换矩阵M在齐次坐标系下为M=uxvxwxx;uyvywyy;uzvzwzz;0 0 0 1。 在Virtools中,一般选择漫游者自身坐标系的z轴正方向为其前进方向,根据向量W的几何意义可知,漫游者的前进方向在世界坐标系中的表示即为W,前进方向在俯视图中的投影向量为:w俯视图=wxwz。因为无法直接求取向量w俯视图到贴图中的子图片的序号的映射,所以采用先将向量w俯视图映射到0360角度值,再将0360角度值转换为子图片序号的映射的方法。 令=arctanwzwx,则y角度=57.3,一象限;57.3(+),二,三象限;57.3(2+),四象限。 这样y角度的值域为0360,它可以精确地表示漫游者的前进方向;但是由于指示前进方向的子图片是离散的,并且是不精确的,所以要根据该漫游应用对方向指示的精确度要求确定子图片序列,以及确定从y角度到子图片序号的映射。子图片数量越多,映射越密集,方向指示画面也越精确、流畅。 1.2编程实现 先添加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中的分量wx和wz,最后可以求取57.3的值、y角度的值和确定目标2D Frame贴图中的子图片序号。 1.3通用BG模块 为了实现BB程序流程的分发和重用,可以把实现特定功能的BB集合组合成BG模块,然后将它导出形成Virtools脚本文件,方便其他用户导入并使用。在Virtools的Schematic操作页内的BB脚本编辑栏里单击右键,在弹出的快捷菜单栏中选择Draw Graph,即可将具有特定功能的BB集合组合成一个BG,然后将那些需要灵活设置的参数拖到BG的外边,形成一个可以灵活设置参数并实现特定功能的BG模块。在BG上方单击右键,选择save as,就可以将该BG模块导出。如果想隐藏其内部的BB程序流程,则选中save as对话框左下方的选项Hide script representation in schematic view保存即可。 2位置实时显示模块 该模块使用3个2D Frame:(1)地图显示框2D Frame,用来限定地图信息显示画面的大小;(2)地图2D Frame,用来存放地图图片,作为地图显示框2D Frame的子对象,其可见范围受其父对象的限制;(3)目标2D Frame,用来存放目标图片,实时检测漫游者的三维坐标,并按照目标2D Frame的定位算法实时定位目标2D Frame,同时按照地图2D Frame的定位算法实时定位地图2D Frame。通过二者的有效配合,最终实现目标2D Frame的中心点与地图中的吻合点完全重合。这就是双重定位策略,即一方面控制目标2D Frame按照特定的算法,仅允许它在地图显示框2D Frame内移动;另一方面控制地图2D Frame按照特定的算法配合目标2D Frame的移动。使用该策略有助于实现地图的可缩放性,增强定位显示画面的流畅和美观效果。为BG模块具有较强的通用性,必须有足够多的可设置参数,这些参数包括有关3D场景的尺寸和坐标参数,有关地图2D界面中的各2D Frame的尺寸和坐标参数,以及地图缩放功能中的控制按键、初始缩放比率、最大允许缩放比率和缩放速度等参数。2.1目标2D Frame的定位算法 定义地图显示框2D Frame的尺寸像素值与场景尺寸值之比a:如果场景的尺寸为长l场景单位,设置地图显示框2D Frame的尺寸为宽w地图框像素,长l地图框像素,那么a=w地图框w场景=l地图框l场景。设定地图2D Frame的位置和大小与地图显示框2D Frame完全一致,只要将漫游者在场景俯视图中的相对位置坐标,按照参数a的比值映射到地图显示框上即可。设定俯视图左上角端点为相对位置坐标参考点,则漫游者在俯视图中的相对位置坐标为x相对z相对=x漫游者-x左上角z左上角-z漫游者,其中,x漫游者为漫游者实际位置坐标的x值,z漫游者为漫游者实际位置坐标的z值,x左上角为漫游场景的左上角点坐标的x值,z左上角为漫游场景的左上角点坐标的z值。那么目标2D Frame的坐标应该为x目标y目标= ax漫游者-x左上角z左上角-z漫游者+x框y框-12xwyh。式中:x框y框为地图显示框2D Frame的坐标;xw和yh分别为目标2D Frame的宽度和高度像素值。目标2D Frame的定位是按照参数a,以及一些在设计场景和地图界面时就已经确定好的参数来完成的,这是一个相对固定且独立的过程。 2.2地图2D Frame的定位算法 地图2D Frame的定位算法是在目标2D Frame的定位算法的基础上设计的,它要配合目标2DFrame的移动,并将目标2D Frame准确地定位于地图上的吻合点。定义地图2D Frame的尺寸像素值与场景尺寸值之比b:如果场景的尺寸为宽w场景单位,长l场景单位,当前地图2D Frame的尺寸为宽w地图像素,长l地图像素,那么b=w地图w场景=l地图l场景。当b=a时,即当前地图2D Frame的尺寸正好与地图显示框2D Frame的尺寸相等,地图2D Frame的坐标应与地图显示框的坐标相同,即地图2D Frame的坐标为Pb=a=x框y框,此时在目标2D Frame的定位算法的作用下就可以实现漫游者位置的准确显示,地图2D Frame的坐标始终保持为Pb=a=x框y框即可。设地图上的吻合点为p,p点坐标为P=ax相对z相对+x框y框。当ba时,由于地图2D Frame的放大或缩小使地图2D Frame中的吻合点的坐标与目标2D Frame的坐标不吻合,此时如果地图2D Frame的位置坐标不变,地图上的吻合点变为p,其坐标为P=bx相对z+x框y框。如果要使点p重新与点p重合,必须重新设置地图2D Frame的坐标,设它的坐标为Pba,则应该满足关系式Pba-Pb=a=(a-b)x相对z相对,得Pba= (a - b)x相对z相对+x框y框,即为设定地图2D Frame坐标的通式,因为它同样满足当b=a时的特殊情况。 2.3地图2D Frame缩放策略 采用先在原先的位置上进行缩放,然后再对地图2D Frame的位置坐标进一步精确定位的策略。即先获取地图2D Frame被缩放前的位置坐标,并用Set Left BB和Set Top BB设定其原先位置,再按照新的地图缩放比率用Set Height BB和Set Width BB设定地图2D Frame的新高度和宽度,最后用Set Rec-tangles BB实现设定内容,进一步精确定位由地图2D Frame的定位算法子模块自动完成。该策略较好地整合了缩放任务和定位任务,使得在地图缩放过程中也能保证整个定位显示画面的准确性和流畅性。 2.4编程实现 该部分程序流程设计主要分为地图缩放策略实现、目标2D Frame的定位和地图2D Frame的定位。 3地图跳转功能 该模块实现通过单击地图中的某一点,将漫游者定位到指定的位置,实际上它是“漫游者位置实时显示模块”的逆过程,可以借助“位置实时显示模块”的定位功能实现。 3.1算法设计 假设当前鼠标单击位置的坐标为x鼠标y鼠标,当前地图2D Frame的坐标为x地图y地图,那么在俯视图中跳转目标点坐标与场景左上角端点的相对距离为x鼠标-x地图by鼠标-y地图b,跳转目标点坐标为x目标z目标=x左上角+x鼠标-x地图bz左上角-y鼠标-y地图b,只要将漫游者准确地定位到该位置,“位置实时显示模块”会自动完成目标2D Frame和地图2D Frame剩图3地图跳转功能程序流程余的定位工作。 3.2编程实现 该模块整体程序流程见图3。其中“相对位移转化”BB是用VSL编写的自建BB,输入参数为x鼠标,y鼠标,x地图,y地图,x左上角,y左上角和z左上角,输出为x目标和y目标。4结束语 基于Virtools Dev 3。5开发平台,分析了漫游地图的4种基本功能的算法实现及优化策略,并制作了具有通用性的3个BG模块,实现了准确、流畅地显示漫游者的位置和前进方向和地图的缩放、跳转等功能。在类似漫游应用的开发过程中,使用制作的3个通用模块可以避免重新设计底层实现算法和重新搭建BB程序流程图的过程,只需重新设置这3个模块中的参数即可实现漫游地图的一些基本功能。文案 编辑词条B 添加义项 ?文案,原指放书的桌子,后来指在桌子上写字的人。现在指的是公司或企业中从事文字工作的职位,就是以文字来表现已经制定的创意策略。文案它不同于设计师用画面或其他手段的表现手法,它是一个与广告创意先后相继的表现的过程、发展的过程、深化的过程, 多存在于广告公司,企业宣传,新闻策划等。基本信息中文名称文案 外文名称Copy目录1发展历程2主要工作3分类构成4基本要求
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号