买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:长江空间信息技术工程有限公司(武汉)
摘要:本发明公开了一种海量空间数据下Web端第一人称视角漫游方法。它包括如下步骤,步骤一:进行第一人称视角漫游初始化设置;步骤二:进行第一人称视角漫游,开始监听漫游操作并循环动态更新相机姿态与位置;步骤三:按下结束命令,关闭鼠标、键盘这些事件响应,关闭漫游循环逻辑,结束第一人称视角漫游过程。本发明克服了传统方法不能实现逼真、实时、高效的第一人称视角漫游的缺陷;具有能实现逼真、实时、高效的第一人称视角漫游的优点。
主权项:1.一种海量空间数据下Web端第一人称视角漫游方法,其特征在于:包括如下步骤,步骤一:进行第一人称视角漫游初始化设置;步骤二:进行第一人称视角漫游,开始监听漫游操作并循环动态更新相机姿态与位置;步骤三:按下结束命令,关闭鼠标、键盘这些事件响应,关闭漫游循环逻辑,结束第一人称视角漫游过程;在步骤一中,进行第一人称视角漫游初始化设置包括漫游参数设置、交互式操作项设置;具体包括以下子步骤:步骤1.1,进行漫游参数初始化设置,包括通用漫游参数设置以及步行、飞行两种不同模式下的专用参数设置,分别进行设定;步骤1.2,进行交互式操作项初始化设置,包括鼠标和键盘操作项初始化设置,用以指定漫游时的交互操作具体按键;在步骤一中,通用漫游参数设置有最大最小俯仰角maxPitch和minPitch、碰撞检测距离容差collisionToler和鼠标操作灵敏度poseSens;飞行漫游参数设置包括飞行位移基础速度flyBaseSpeed、飞行位移加速度flyAcceler和飞行位移极速flyMaxSpeed;步行漫游参数设置包括人员高度personHeight、人员视线高度eyeHeight、步行水平位移基础速度walkBaseSpeed、步行水平位移加速度walkAcceler、步行水平位移极速walkMaxSpeed、重力垂直位移加速度gravityAcceler和跳跃垂直位移初速度jumpSpeed;在步骤一中,指定漫游时的交互操作具体按键中具体的鼠标操作项为:鼠标水平、垂直滑动控制视线方位角和俯仰角;键盘操作项为:按下W键、S键、A键和D键控制视点前进、后退、左移和右移,Shift键加速,Q键、E键降低或抬升视点高度,T键开启或关闭碰撞检测,Space键步行模式时跳跃,F键切换飞行和步行漫游模式;在步骤二中,进行第一人称视角漫游,开启漫游鼠标、键盘这些操作监听开始监听漫游操作并循环动态更新相机姿态与位置;循环进行后续相机姿态、位置动态变化的漫游过程;具体包括以下子步骤:步骤2.1,开启漫游鼠标、键盘这些操作监听,记录所有鼠标与键盘漫游操作状态,包括以下子步骤:步骤2.1.1,浏览器进入PointerLock模式,鼠标光标消失,使得鼠标不受屏幕范围影响实现无限滑动;然后开启鼠标滑动事件监听,当鼠标滑动时,获取鼠标滑动变换量movement,其中鼠标横向位移量为movement.movementX,纵向位移量为movement.movementY;步骤2.1.2,开启键盘按下和松开事件监听,当按下或松开W、S、A、D、Q、E、Shift这些操作键后,同步设定变量wPress、sPress、aPress、dPress、qPress、ePress、shiftPress为1或者0;按下T之后变量collisionTest=!collisionTest,用以切换漫游时是否进行碰撞检测;按下Space之后,如果当前为步行模式,且人员处于地面时,则起跳;按下F之后变量walkMode=!walkMode,用以切换步行漫游和飞行漫游模式;步骤2.2,在开启漫游操作监听之后,不断循环进行后续漫游过程,循环在每一个渲染帧进行,或根据固定间隔时间deltaTime进行;在每一个后漫游循环中,检测一次鼠标和键盘操作情况,并据此对相机进行一次更新,不断循环此过程,则实现平滑的三维场景漫游;所述实现平滑的三维场景漫游,具体包括以下子步骤:步骤2.2.1,在每一次漫游循环过程一开始,根据漫游操作更新漫游速度值,并生成由鼠标、键盘操作以及重力加速度这些引起的相机变化量;引起的相机变化量具体分为:由鼠标滑动引起的相机姿态变化、由键盘操作和重力加速度引起的相机位置变化;步骤2.2.2,对步骤2.2.1上一步骤生成的相机姿态变化量、位置变化量进行判断,并据此生成新的相机姿态值和相机位置值;步骤2.2.3,根据步骤2.2.2中所产生的新的相机姿态与相机位置,对相机参数进行设置,实现相机姿态与位置的更新;然后回到步骤2.2.1,进行下一个循环的漫游过程;不断重复即步骤2.2.1至步骤2.2.3,则不断进行平滑、高效的第一人称视角飞行与步行漫游;在步骤2.2.1中,生成引起的相机变化量,包括以下子步骤:步骤2.2.1.1,在该漫游循环内,根据键盘Shift、Space操作按键状态以及重力加速度对漫游速度参数进行动态更新;如果是飞行漫游模式,进入步骤2.2.1.1.1;如果是步行漫游模式,进入步骤2.2.1.1.2:步骤2.2.1.1.1,更新飞行漫游位移速度,实现Shift按键渐进式加速,漫游速度更新计算公式如下式1、式2所示;其中,flyAcceler为飞行漫游加速度;deltaTime为循环间隔时间;flySpeed为飞行漫游基础位移速度;flySpeed为飞行漫游最大速度;flySpeed是飞行漫游位移速度: 步骤2.2.1.1.2,更新步行漫游水平位移速度,实现Shift按键渐进式加速;更新步行漫游垂直位移速度,实现重力下坠、跳跃;步行水平位移速度计算公式具体如下式3、式4所示;其中,walkAcceler为步行漫游加速度;deltaTime为循环间隔时间;walkBaseSpeed为步行漫游基础位移速度;walkMaxSpeed为步行漫游最大速度;hSpeed是步行漫游水平位移速度: 步行垂直位移速度计算公式如下式5所示;其中,vSpeed为步行漫游垂直位移速度,当和地面或者顶面发生碰撞时,直接赋为0;当处于地面时,且按下了Space按键,则赋值为跳跃初速度jumpSpeed;其他情况则进行重力加速计算,gravityAcceler为重力加速度;deltaTime为循环间隔时间: 步骤2.2.1.2,根据鼠标滑动事件所产生的位移量值,计算相机由此应该产生的姿态变化量;其中,鼠标水平位移量movementX换算成相机方位角变化量deltaHeading;垂直位移量movementY换算成相机俯仰角变化量deltaPitch;计算公式如下式6、式7所示: 式中:screenWidth、screenHeight分别为三维场景屏幕宽度值和高度值,poseSens是先前步骤中所设定的相机姿态变化灵敏度,deltaHeading、deltaPitch即为相机方位角、俯仰角变化结果值;步骤2.2.1.3,根据键盘按下和松开W、S、A、D、Q、E事件,计算相机由此应该产生的位置变化量;根据飞行漫游和步行漫游两种不同模式,位置变化量的计算有所区别,如果是飞行漫游,则进入步骤2.2.1.3.1;如果是步行漫游则进入步骤2.2.1.3.2:步骤2.2.1.3.1,飞行漫游模式下计算相机位置变化量,计算公式如下式8、式9所示: step=flySpeed×deltaTime9式中,分别是漫游相机向前、向右、向上方向向量,根据场景当前相机姿态直接获取;wPress、sPress、wPress、aPress、ePress、qPress分别为前边步骤中各个漫游操作按键是否按下的记录变量,取值为0或者1;normalize为向量归一化处理;step为相机位移的步长值;flySpeed为飞行漫游位移速度;deltaTime为循环间隔时间;则为计算得到的相机位移结果向量;步骤2.2.1.3.2,步行漫游模式下计算相机位置变化量,步行的位置变化量由键盘操控引起的水平方向上的位移,和重力加速度引起的垂直方向上的位移构成;其中水平方向位移计算公式如下式10、式11所示: hStep=hSpeed×deltaTime11式中,hStep为水平方向位移步长值;hSpeed为步行漫游水平位移速度;为水平方向位移结果向量;垂直方向位移计算公式如下式12所示,其中,vSpeed为步行漫游垂直位移速度;deltaTime为循环间隔时间;为垂直方向位移结果向量; 综合水平方向位移值和垂直方向位移值之后的相机位移向量计算如下式13所示,其中即为相机位移结果向量; 在步骤2.2.2中,生成新的相机姿态值和相机位置值,具体包括以下子步骤:步骤2.2.2.1,根据相机姿态变化量deltaHeading和deltaPitch,对相机新的姿态值进行计算和判断,使得附加该变换之后,相机的姿态参数在有效范围newHeading值域为[0,360,newPitch值域为[minPitch,maxPitch]内,计算公式如下式14、式15所示:newHeading=360+heading+deltaHeading%360%36014 步骤2.2.2.2,根据相机位置变化量,对相机新的位置值进行射线碰撞检测,判断是否相机能到达该位置;飞行漫游和步行漫游的该过程有所差异,飞行漫游进入步骤2.2.2.2.1,步行漫游进入步骤2.2.2.2.2:步骤2.2.2.2.1,飞行漫游模式时,根据当前相机位置cameraPosition以及由前面步骤生成的相机位置变化量对场景进行射线碰撞检测,判断该相机位置变化是否可行;如果该位移未与场景发生碰撞,则相机位置将被更新;如果该位移发生碰撞,则相机位置保持不变,且飞行漫游速度flySpeed被赋值为flyBaseSpeed,停止Shift按键加速;新的相机位置计算如下式16所示: 步骤2.2.2.2.2,步行漫游模式时,步骤2.2.2.2.2.1,根据当前相机位置cameraPosition以及由前面步骤生成的相机水平和垂直位置变化量与对场景进行射线碰撞检测,判断该位置变化是否可行;如果可行,则继续后续步骤;如果不可行,则相机位置保持不变,退出当前步骤,直接进入步骤2.2.3;步骤2.2.2.2.2.2,根据变化后的相机位置cameraPosition′,做向下和向上的射线碰撞检测,进一步保证新的相机位置纵向空间能容纳漫游人员;首先做向下射线碰撞检测,向下检测的距离阈值downColliDis设为人员视线高度值eyeHeight;在距离阈值内,如果射线与地面存在交点,则交点记为groundP′相应的距离值记为groundDis;如果不存在交点,则groundDis取最大值Double.MAX_VALUE;向上射线检测距离阈值upColliDis=MaxpersonHeight-eyeHeight,personHeight-groundDis,用以保证头部不与顶部发生碰撞;如果向上碰撞检测在距离阈值内无交点,则说明变化后的相机位置cameraPosition′纵向空间可以容纳漫游人员,因此进入后续步骤;反之说明头顶发生碰撞,则将vSpeed赋值为0,使得跳跃碰头后直接下坠,并退出当前步骤,直接进入步骤2.2.3;步骤2.2.2.2.2.3,如果纵向空间能容纳漫游人员,则根据变化后的相机位置comeraPosition′向下检测是否存在地面交点groundP′,以及交点距离值groundDis,进一步生成结果相机位置newCameraPosition;并且在此步骤中,如果存在地面交点,则说明人员已经落地,则将vSpeed赋值为0,onGround赋值为true停止重力加速下坠;如果不存在地面交点,说明人员处于半空中,则onGround赋值为false,使得跳跃无法被触发;相机位置计算如下式17所示:
全文数据:
权利要求:
百度查询: 长江空间信息技术工程有限公司(武汉) 一种海量空间数据下Web端第一人称视角漫游方法
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。