UE4引擎中手拧虚拟物品的信息处理方法和装置与流程

文档序号:23619386发布日期:2021-01-12 10:29阅读:235来源:国知局
UE4引擎中手拧虚拟物品的信息处理方法和装置与流程

本发明涉及虚拟现实技术领域,特别是涉及一种ue4引擎中手拧虚拟物品的信息处理方法、装置、计算机设备和存储介质。



背景技术:

ue4是美国epic游戏公司研发的一款3a级次时代游戏引擎,渲染效果强大,采用物理材质系统,是开发者最喜爱的引擎之一。ue4画面效果完全达到3a游戏水准,光照和物理渲染效果强大。ue4蓝图系统让游戏策划也能编辑代码,各种官方插件齐全也让开发者不用在自编第三方插件并担心兼容接口问题。更重要的是针对虚拟现实游戏,ue4为手柄、vr控制器提供了良好支持。

当前技术在虚拟现实的应用中,模拟用手拧物品的效果。比如拧旋钮,螺丝等,基本都是玩家用手去触碰该物品,在碰撞检测事件中播放物品旋转的动画,直接完成整个拧物品的操作。然而,玩家并没有身临其境的感受。也即是,ue4开发虚拟现实应用中,模拟手拧虚拟物品的效果不真实。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供了一种ue4引擎中手拧虚拟物品的信息处理方法、装置、计算机设备和存储介质,能够使得在ue4引擎的虚拟环境中将玩家用户手拧虚拟物品的虚拟效果更真实。

为了解决上述中至少一个技术问题,本发明实施例提供了一种ue4引擎中手拧虚拟物品的信息处理方法,所述方法包括:

在ue4引擎的虚拟物品上创建骨骼模型,在所述骨骼模型的手腕骨骼节点添加插槽socket;

通过ue4的函数getsocketrotation=>getrightvector获取到用户手腕正右方的方向向量,命名为reallyhandrightdir,通过ue4的函数getrightvector获取到所述骨骼模型手腕正右方的方向向量,命名为virtualhandrightdir;

在所述骨骼模型中添加箭头组件,所述箭头组件的指向与所述虚拟物品的旋转轴一致;

将所述reallyhandrightdir与所述virtualhandrightdir投影在以所述箭头组件的指向为法向量的平面上,得到所述virtualhandrightdir的投影向量virtualhandrightprojectdir和所述reallyhandrightdir的投影向量reallyhandrightprojectdir;

通过ue4的函数rotatorfromaxisandangle获取所述virtualhandrightprojectdir和所述reallyhandrightprojectdir的夹角以及virtualhandrightprojectdir叉乘reallyhandrightprojectdir所得到的向量;

通过ue4的函数addworldrotation将所述夹角和所述向量叠加到所述骨骼模型中。

在其中一个实施例中,所述骨骼模型为所述虚拟物品的双手的骨骼模型,所述在所述骨骼模型的手腕骨骼节点添加插槽socket,包括:在所述双手的骨骼模型上分别添加插槽socket。

在其中一个实施例中,所述方法还包括:

在所述虚拟物品上创建scene组件,命名为virtualhandrightdirscene,将所述virtualhandrightdirscene设置在跟组件的位置与所述reallyhandrightprojectdir*100的位置上;

将所述virtualhandrightdirscene的位置与所述跟组件的位置的差值作为所述reallyhandrightprojectdir的当前帧的位置;

获取下一帧的所述reallyhandrightprojectdir的位置;

获取所述reallyhandrightprojectdir的当前帧的位置与所述下一帧的所述reallyhandrightprojectdir的位置的角度,获取当前帧的所述reallyhandrightprojectdir与下一帧的所述reallyhandrightprojectdir的向量的叉乘,得到正负;

使用ue4的函数addrelativerotation将计算出正负的角度差值附加给所述虚拟物品的旋转组件。

在其中一个实施例中,所述方法还包括:

根据所述计算出正负的角度差值确定所述reallyhandrightprojectdir在当前帧转到下一帧时的旋转值;

根据所述旋转值控制所述虚拟物品的所述旋转组件进行旋转。

在其中一个实施例中,所述根据所述旋转值控制所述虚拟物品的所述旋转组件进行旋转,包括:

若所述旋转值大于0,在所述旋转值中添加判断条件;

当所述旋转值大于0时,根据所述旋转值的判断条件控制所述虚拟物品的所述旋转组件进行旋转。

在其中一个实施例中,所述方法还包括:

当所述旋转值小于或等于0时,控制所述虚拟物品的所述旋转组件不发生旋转。

在其中一个实施例中,所述旋转值为多个,所述方法还包括:

在预设的旋转条件下计算多个旋转值的累加值,得到总旋转度;

若所述总旋转度大于预期值,确定所述ue4引擎中手拧虚拟物品结束。

本申请还提供一种ue4引擎中手拧虚拟物品的信息处理装置,所述装置包括:

第一添加模块,用于在ue4引擎的虚拟物品上创建骨骼模型,在所述骨骼模型的手腕骨骼节点添加插槽socket;

获取模块,用于通过ue4的函数getsocketrotation=>getrightvector获取到用户手腕正右方的方向向量,命名为reallyhandrightdir,通过ue4的函数getrightvector获取到所述骨骼模型手腕正右方的方向向量,命名为virtualhandrightdir;

第二添加模块,用于在所述骨骼模型中添加箭头组件,所述箭头组件的指向与所述虚拟物品的旋转轴一致;

投影模块,用于将所述reallyhandrightdir与所述virtualhandrightdir投影在以所述箭头组件的指向为法向量的平面上,得到所述virtualhandrightdir的投影向量virtualhandrightprojectdir和所述reallyhandrightdir的投影向量reallyhandrightprojectdir;

计算模块,用于通过ue4的函数rotatorfromaxisandangle获取所述virtualhandrightprojectdir和所述reallyhandrightprojectdir的夹角以及virtualhandrightprojectdir叉乘reallyhandrightprojectdir所得到的向量;

叠加模块,用于通过ue4的函数addworldrotation将所述夹角和所述向量叠加到所述骨骼模型中。

另外,本发明实施例还提供了一种计算机设备,其包括:存储器、处理器及存储在存储器上并可在处理器上运行的应用程序,处理器执行应用程序时实现上述任一实施例方法的步骤。

另外,本发明实施例还提供了一种计算机可读存储介质,其上存储有应用程序,应用程序被处理器执行时实现上述任一实施例方法的步骤。

在本发明实施例中,通过实施上述方法,将reallyhandrightdir与virtualhandrightdir投影在以箭头组件的指向为法向量的平面上,得到virtualhandrightdir的投影向量virtualhandrightprojectdir和reallyhandrightdir的投影向量reallyhandrightprojectdir。进一步获取获取virtualhandrightprojectdir和reallyhandrightprojectdir的夹角以及virtualhandrightprojectdir叉乘reallyhandrightprojectdir所得到的向量。最终,通过ue4的函数addworldrotation将夹角和向量叠加到骨骼模型中。因此,虚拟物品上显示的骨骼模型能够根据夹角以及向量进行旋转,实现虚拟物品上显示的骨骼模型跟随玩家用户的真实手腕进行旋转,使得虚拟物品上显示的骨骼模型的运动方向与玩家用户的真实手腕运行方向一致,增强了ue4引擎中用户手拧虚拟物品的真实性。

附图说明

图1是本发明实施例中的一种ue4引擎中拾取虚拟物品的信息处理方法的流程示意图;

图2是本发明实施例中的一种ue4引擎中拾取虚拟物品的信息处理装置的结构示意图;

图3是本发明实施例中的计算机设备的结构组成示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在ue4引擎的游戏设置中,为了使手拧物品的效果更真实,需要设定让玩家的手能触碰到物品的时候,通过握拳或者按住中指键触发抓举物品的事件,但此时物品并不会attach到玩家的手中,而是在物品上创建一个和物品完美贴合的假手的静态模型。在抓举事件中,显示该模型,并隐藏玩家真手的骨骼模型。游戏过程中在物品旋转时,物品上显示的假手的静态模型会以物品的旋转轴为旋转轴,跟随玩家的真手旋转而旋转。然而,玩家的真手是玩家在3d空间操控,能以任意的轴进行旋转。而在ue4引擎中控制假手的静态模型根据玩家的真手的旋转轨迹而旋转。本申请的一种ue4引擎中拾取虚拟物品的信息处理方法,通过计算出玩家真手投影到以物品的旋转轴为法向量的平面上,从而控制假手的静态模型根据玩家的真手的旋转轨迹而旋转。具体的方式如下:

本发明实施例提供了一种ue4引擎中拾取虚拟物品的信息处理方法,如图1所示,该一种ue4引擎中拾取虚拟物品的信息处理方法包括以下步骤:

s102,在ue4引擎的虚拟物品上创建骨骼模型,在所述骨骼模型的手腕骨骼节点添加插槽socket。

其中,所述骨骼模型为所述虚拟物品的双手的骨骼模型,所述在所述骨骼模型的手腕骨骼节点添加插槽socket,包括:在所述双手的骨骼模型上分别添加插槽socket。

s104,通过ue4的函数getsocketrotation=>getrightvector获取到用户手腕正右方的方向向量,命名为reallyhandrightdir,通过ue4的函数getrightvector获取到所述骨骼模型手腕正右方的方向向量,命名为virtualhandrightdir。

s106,在所述骨骼模型中添加箭头组件,所述箭头组件的指向与所述虚拟物品的旋转轴一致。

s108,将所述reallyhandrightdir与所述virtualhandrightdir投影在以所述箭头组件的指向为法向量的平面上,得到所述virtualhandrightdir的投影向量virtualhandrightprojectdir和所述reallyhandrightdir的投影向量reallyhandrightprojectdir。

s110,通过ue4的函数rotatorfromaxisandangle获取所述virtualhandrightprojectdir和所述reallyhandrightprojectdir的夹角以及virtualhandrightprojectdir叉乘reallyhandrightprojectdir所得到的向量。

s112,通过ue4的函数addworldrotation将所述夹角和所述向量叠加到所述骨骼模型中。

在本实施例中,ue4引擎中,玩家用户拾取虚拟物品的时候,将玩家用户的手的骨骼模型作为一个变量保存下来,命名为handmesh。在玩家的双手的骨骼模型的手腕骨骼节点(wrist)下面各添加一个socket,命名为wristsocket。通过ue4的函数getsocketrotation=>getrightvector,获取到用户手腕正右方的方向向量,命名为reallyhandrightdir。获取对应的假手的骨骼模型。通过ue4的函数getrightvector,获取到假手骨骼模型的手腕正右方的方向向量,命名为virtualhandrightdir。在虚拟物品上添加一个箭头组件,方向与虚拟物品的旋转轴一致。将reallyhandrightdir和virtualhandrightdir投影在以旋转轴为法向量的平面上,获得假手骨骼模型的投影向量virtualhandrightprojectdir和用户手腕的投影向量reallyhandrightprojectdir。进一步地,需要使假手骨骼模型的旋转和用户手腕的真手的旋转保持一致,此时得让假手绕着旋转轴旋转一个角度。其中这个角度就是virtualhandrightprojectdir和reallyhandrightprojectdir的夹角,旋转轴就是virtualhandrightprojectdir叉乘reallyhandrightprojectdir所得到的向量。最终,再使用ue4的函数rotatorfromaxisandangle获取到这个旋转,再使用ue4的函数addworldrotation将这个旋转叠加到假手骨骼模型上,即可实现假手和真手旋转保持一致的效果。

通过实施上述方法,将reallyhandrightdir与virtualhandrightdir投影在以箭头组件的指向为法向量的平面上,得到virtualhandrightdir的投影向量virtualhandrightprojectdir和reallyhandrightdir的投影向量reallyhandrightprojectdir。进一步获取获取virtualhandrightprojectdir和reallyhandrightprojectdir的夹角以及virtualhandrightprojectdir叉乘reallyhandrightprojectdir所得到的向量。最终,通过ue4的函数addworldrotation将夹角和向量叠加到骨骼模型中。因此,虚拟物品上显示的骨骼模型能够根据夹角以及向量进行旋转,实现虚拟物品上显示的骨骼模型跟随玩家用户的真实手腕进行旋转,使得虚拟物品上显示的骨骼模型的运动方向与玩家用户的真实手腕运行方向一致,增强了ue4引擎中用户手拧虚拟物品的真实性。

进一步地,所述方法还包括:在所述虚拟物品上创建scene组件,命名为virtualhandrightdirscene,将所述virtualhandrightdirscene设置在跟组件的位置与所述reallyhandrightprojectdir*100的位置上;将所述virtualhandrightdirscene的位置与所述跟组件的位置的差值作为所述reallyhandrightprojectdir的当前帧的位置;获取下一帧的所述reallyhandrightprojectdir的位置;获取所述reallyhandrightprojectdir的当前帧的位置与所述下一帧的所述reallyhandrightprojectdir的位置的角度,获取当前帧的所述reallyhandrightprojectdir与下一帧的所述reallyhandrightprojectdir的向量的叉乘,得到正负;使用ue4的函数addrelativerotation将计算出正负的角度差值附加给所述虚拟物品的旋转组件。

进一步地,所述方法还包括:根据所述计算出正负的角度差值确定所述reallyhandrightprojectdir在当前帧转到下一帧时的旋转值;根据所述旋转值控制所述虚拟物品的所述旋转组件进行旋转。

优选地,所述根据所述旋转值控制所述虚拟物品的所述旋转组件进行旋转,包括:若所述旋转值大于0,在所述旋转值中添加判断条件;当所述旋转值大于0时,根据所述旋转值的判断条件控制所述虚拟物品的所述旋转组件进行旋转。

进一步地,所述方法还包括:当所述旋转值小于或等于0时,控制所述虚拟物品的所述旋转组件不发生旋转。

优选地,所述旋转值为多个,所述方法还包括:在预设的旋转条件下计算多个旋转值的累加值,得到总旋转度;若所述总旋转度大于预期值,确定所述ue4引擎中手拧虚拟物品结束。

具体地,本申请设计的用手拧物品,实际上也是通过计算手腕的旋转,带动手指旋转,从而带动物品旋转。但是玩家的真手不可能沿着一个方向一直旋转,需要来回旋转,所以为了使手拧物品的效果更加真实,要实现手沿着某个方向旋转,物品会跟着转,返回时,物品不会旋转。

具体的,获取到真手手腕正方向投影在以旋转轴为法向量的平面上的投影向量reallyhandrightprojectdir。在虚拟物品上创建一个scene组件,命名为virtualhandrightdirscene,将其设置在跟组件的位置与reallyhandrightprojectdir*100的位置的累加值的位置上。也即是virtualhandrightdirscene的位置-跟组件的位置=这一帧的reallyhandrightprojectdir的位置。进一步地,计算需要旋转的角度就是通过计算这一帧的reallyhandrightprojectdir转到下一帧的reallyhandrightprojectdir的旋转角度。

需要注意的是,为什么不直接计算这一帧和下一帧的reallyhandrightprojectdir的旋转角度,而是通过在虚拟物品上创建一个scene组件,将这个scene组件的位置设置到跟组件的位置与reallyhandrightprojectdir*100的位置的累加值的位置上,是因为在旋转的过程中,被旋转的虚拟物品和手可能会发生旋转,但它们又保持相对静止,不应该让虚拟物品旋转,但是reallyhandrightprojectdir会发生改变。通过使用上述处理,可以完美避免这个问题。

计算出reallyhandrightprojectdir和(virtualhandrightdirscene的位置-跟组件的位置)的角度,再通过向量的叉乘计算出正负,使用ue4的函数addrelativerotation将计算出正负的角度的差值,并将差值附加给虚拟物品的旋转组件。

观察旋转值的旋转方向与预期的旋转方向。确定旋转值是正还是负,如果是正,则在旋转值后面加一个判断。如果旋转值大于0,才让虚拟物品的旋转组件旋转,反之亦然。这样,虚拟物品的旋转组件就会按照语气的手旋转的方向旋转,返回时不旋转。

如果还需要计算总的旋转角度,通过判断来终止该旋转。只需要使用上述的旋转值,再正确的旋转条件下将旋转值叠加起来,如果叠加后的旋转值大于预期值,则判断手拧物品完成。

在一实施例中,本发明还提供一种ue4引擎中手拧虚拟物品的信息处理装置。如图2所示,该装置包括:

第一添加模块12,用于在ue4引擎的虚拟物品上创建骨骼模型,在所述骨骼模型的手腕骨骼节点添加插槽socket;

获取模块14,用于通过ue4的函数getsocketrotation=>getrightvector获取到用户手腕正右方的方向向量,命名为reallyhandrightdir,通过ue4的函数getrightvector获取到所述骨骼模型手腕正右方的方向向量,命名为virtualhandrightdir;

第二添加模块16,用于在所述骨骼模型中添加箭头组件,所述箭头组件的指向与所述虚拟物品的旋转轴一致;

投影模块18,用于将所述reallyhandrightdir与所述virtualhandrightdir投影在以所述箭头组件的指向为法向量的平面上,得到所述virtualhandrightdir的投影向量virtualhandrightprojectdir和所述reallyhandrightdir的投影向量reallyhandrightprojectdir;

计算模块20,用于通过ue4的函数rotatorfromaxisandangle获取所述virtualhandrightprojectdir和所述reallyhandrightprojectdir的夹角以及virtualhandrightprojectdir叉乘reallyhandrightprojectdir所得到的向量;

叠加模块22,用于通过ue4的函数addworldrotation将所述夹角和所述向量叠加到所述骨骼模型中。

关于一种ue4引擎中手拧虚拟物品的信息处理装置的具体限定可以参见上文中对于一种ue4引擎中手拧虚拟物品的信息处理方法的限定,在此不再赘述。上述一种ue4引擎中手拧虚拟物品的信息处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

本发明实施例提供的一种计算机可读存储介质,所述计算机可读存储介质上存储有应用程序,该程序被处理器执行时实现上述实施例中任意一个实施例的一种ue4引擎中手拧虚拟物品的信息处理方法。其中,所述计算机可读存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、cd-rom、和磁光盘)、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随即存储器)、eprom(erasableprogrammableread-onlymemory,可擦写可编程只读存储器)、eeprom(electricallyerasableprogrammableread-onlymemory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储设备包括由设备(例如,计算机、手机)以能够读的形式存储或传输信息的任何介质,可以是只读存储器,磁盘或光盘等。

本发明实施例还提供了一种计算机应用程序,其运行在计算机上,该计算机应用程序用于执行上述中任意一个实施例的一种ue4引擎中手拧虚拟物品的信息处理方法。

此外,图3是本发明实施例中的计算机设备的结构组成示意图。

本发明实施例还提供了一种计算机设备,如图3所示。所述计算机设备包括处理器302、存储器303、输入单元304以及显示单元305等器件。本领域技术人员可以理解,图3示出的设备结构器件并不构成对所有设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件。存储器303可用于存储应用程序301以及各功能模块,处理器302运行存储在存储器303的应用程序301,从而执行设备的各种功能应用以及数据处理。存储器可以是内存储器或外存储器,或者包括内存储器和外存储器两者。内存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦写可编程rom(eeprom)、快闪存储器、或者随机存储器。外存储器可以包括硬盘、软盘、zip盘、u盘、磁带等。本发明所公开的存储器包括但不限于这些类型的存储器。本发明所公开的存储器只作为例子而非作为限定。

输入单元304用于接收信号的输入,以及接收用户输入的关键字。输入单元304可包括触控面板以及其它输入设备。触控面板可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并根据预先设定的程序驱动相应的连接装置;其它输入设备可以包括但不限于物理键盘、功能键(比如播放控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。显示单元305可用于显示用户输入的信息或提供给用户的信息以及终端设备的各种菜单。显示单元305可采用液晶显示器、有机发光二极管等形式。处理器302是终端设备的控制中心,利用各种接口和线路连接整个设备的各个部分,通过运行或执行存储在存储器303内的软件程序和/或模块,以及调用存储在存储器内的数据,执行各种功能和处理数据。

作为一个实施例,所述计算机设备包括:一个或多个处理器302,存储器303,一个或多个应用程序301,其中所述一个或多个应用程序301被存储在存储器303中并被配置为由所述一个或多个处理器302执行,所述一个或多个应用程序301配置用于执行上述实施例中的任意一实施例中的一种ue4引擎中手拧虚拟物品的信息处理方法。

另外,以上对本发明实施例所提供的一种ue4引擎中手拧虚拟物品的信息处理方法、装置、计算机设备和存储介质进行了详细介绍,本文中应采用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1