CN115237251A - 一种在虚拟现实环境中实现拧螺丝的方法 - Google Patents

一种在虚拟现实环境中实现拧螺丝的方法 Download PDF

Info

Publication number
CN115237251A
CN115237251A CN202210734587.3A CN202210734587A CN115237251A CN 115237251 A CN115237251 A CN 115237251A CN 202210734587 A CN202210734587 A CN 202210734587A CN 115237251 A CN115237251 A CN 115237251A
Authority
CN
China
Prior art keywords
screwdriver
screw
component
player
arrow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210734587.3A
Other languages
English (en)
Inventor
罗威
许秋子
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Realis Multimedia Technology Co Ltd
Original Assignee
Shenzhen Realis Multimedia Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Realis Multimedia Technology Co Ltd filed Critical Shenzhen Realis Multimedia Technology Co Ltd
Priority to CN202210734587.3A priority Critical patent/CN115237251A/zh
Publication of CN115237251A publication Critical patent/CN115237251A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/011Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/40Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment
    • A63F13/42Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment by mapping the input signals into game commands, e.g. mapping the displacement of a stylus on a touch screen to the steering angle of a virtual vehicle

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Human Computer Interaction (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本发明公开了一种在虚拟现实环境中实现拧螺丝的方法,包括以下步骤:在虚幻引擎中添加一个螺丝刀类ScrewDiver和一个螺丝类Screw;当检测到螺丝刀和螺丝发生碰撞时,将第一组件Arrow附着到玩家的手上,经过一帧时间后,获取组件Arrow的方向向量,计算组件Arrow和组件ArrowNoMove当前的方向向量在SD平面上的投影的夹角LocalRot;判断玩家的手的旋转方向,使螺丝旋转一个角度LocalRot;判断当前螺丝是否拧完,若否,继续进行下一帧的拧螺丝步骤,若是,结束。本发明实现了玩家在虚拟现实环境中模拟出较真实的螺丝刀拧螺丝的感觉,即使玩家中途改变握姿,也可以正常旋转螺丝刀。

Description

一种在虚拟现实环境中实现拧螺丝的方法
技术领域
本发明涉及虚拟现实环境的动作捕捉领域,特别涉及一种在虚拟现实环境中实现拧螺丝的方法。
背景技术
虚幻引擎4(UE4)是美国Epic游戏公司研发的一款3A级次时代游戏引擎,渲染效果强大,采用物理材质系统,是开发者最喜爱的引擎之一。UE4画面效果完全达到3A游戏水准,光照和物理渲染效果强大。
当前技术在虚拟现实的应用中,模拟用手拧物品等动作,比如拧旋钮,螺丝等,基本都是玩家用手去触碰该物品,在碰撞检测事件中播放物品旋转的动画,直接完成整个拧物品的操作。这样的方式,模拟手拧虚拟物品的效果不真使得玩家并没有身临其境的感受。
发明内容
为了克服现有技术的上述缺点与不足,本发明的目的在于提供一种在虚拟现实环境中实现拧螺丝的方法,玩家在虚拟现实环境中可以模拟出较为真实的螺丝刀拧螺丝的感觉,且拧螺丝刀的时候玩家的握姿方向都可以改变。
本发明的目的通过以下技术方案实现:
一种在虚拟现实环境中实现拧螺丝的方法,包括以下步骤:
在虚幻引擎中添加一个螺丝刀类ScrewDiver和一个螺丝类Screw;
所述螺丝刀类ScrewDiver包括第一组件Arrow和第二组件ArrowNoMove;所述组件ArrowNoMove固定在螺丝刀上;所述第一组件Arrow初始位置和初始方向均与第二组件ArrowNoMove的位置和方向一致;
当检测到螺丝刀和螺丝发生碰撞时,进行拧螺丝步骤:将第一组件Arrow 附着到玩家的手上,经过一帧时间后,获取第一组件Arrow的方向向量,计算第一组件Arrow和第二组件ArrowNoMove当前的方向向量在垂直于螺丝刀方向轴的平面上的投影的夹角LocalRot;判断玩家的手的旋转方向为顺时针还是逆时针,根据判断的结果使螺丝旋转一个角度LocalRot;
判断当前螺丝是否拧完,若否,继续进行下一帧的拧螺丝步骤,若是,结束。
优选地,在计算得到第一组件Arrow和第二组件ArrowNoMove当前的方向向量在垂直于螺丝刀方向轴的平面上的投影的夹角LocalRot后,把第一组件 Arrow重置到螺丝刀上。
具体地,当检测到螺丝刀和螺丝发生碰撞时,调用虚幻引擎自带的碰撞框碰撞调用函数BeginOverlap,使螺丝刀接收到BeginOverlap事件,接着调用箭头附着函数SetLastVecPoint,将第一组件Arrow附着到玩家手上。
所述判断玩家的手的旋转方向,具体为:
令第一组件Arrow当前在垂直于螺丝刀方向轴的平面的上的投影向量为向量ArrowProjection,第二组件ArrowNoMove当前的向量为向量ArrowNoMove;
将向量ArrowNoMove和向量ArrowProjection进行叉乘得出的向量与螺丝刀方向进行比较,如果方向一致则玩家的手在这一帧的旋转方向是顺时针,如果方向相反则玩家的手在这一帧方向的旋转方向为逆时针。
优选地,当玩家的手的旋转方向为逆时针时,将角度LocalRot的值乘上-1 后,对角度LocalRot重新赋值。
优选地,一种在虚拟现实环境中实现拧螺丝的方法,还包括以下步骤:
设置螺丝刀的转动有效范围值,当角度LocalRot超出转动有效范围值的范围时,将LocalRot的值设置为0。
优选地,一种在虚拟现实环境中实现拧螺丝的方法,还包括以下步骤:
在判断玩家的手的旋转方向步骤之后,判断玩家的手的旋转方向是否与螺丝实际需要的旋转方向一致,若否,结束执行该帧的任务。
所述根据判断的结果使螺丝旋转一个角度LocalRot,具体为:
调用虚幻引擎自带的增量旋转的函数AddLocalRotation使螺丝旋转一个角度LocalRot。
所述判断当前螺丝是否拧完,具体为:
令从头到尾完成螺丝的松紧需要旋转的角度为SuccessAngle,令螺丝的当前进度为CurrentProgress,螺丝每次转动后更新CurrentProgress的值,判断 CurrentProgress的值是否大于SuccessAngle的值,若是,则表示螺丝已拧完。
与现有技术相比,本发明具有以下优点和有益效果:
本发明的在虚拟现实环境中实现拧螺丝的方法,实现了玩家在虚拟现实环境中模拟出较为真实的螺丝刀拧螺丝的感觉,通过每一帧Arrow组件重新重置回到螺丝刀上,然后再附着到玩家手上,可实现即使玩家中途改变握姿,也可以正常旋转螺丝刀。
附图说明
图1为本发明的实施例的一种在虚拟现实环境中实现拧螺丝的方法的流程图。
具体实施方式
下面结合实施例,对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例
本发明的实施例的一种在虚拟现实环境中实现拧螺丝的方法,包括以下步骤:
步骤S1:在虚幻引擎4中添加一个螺丝刀类ScrewDiver和一个螺丝类Screw。
其中,螺丝刀类ScrewDiver上有以下核心组件和成员属性函数:
根组件RootMesh:UStaicMeshComponent类型,螺丝刀根组件,螺丝刀模型与基础物理碰撞组件;
组件ScrewDiverBox:UBoxComponent类型,用于判断是否触碰到螺丝;
组件Arrow:UArrowComponent类型,螺丝刀转动算法核心组件,在拧螺丝刀的时候每一帧都会回到螺丝刀上并重新附着到玩家手上,默认垂直于螺丝刀方向轴;
组件ArrowNoMove:UArrowComponent类型,组件ArrowNoMove初始方向和位置与组件Arrow的初始方向和位置是重叠的,但是组件ArrowNoMove并不会附着到玩家手上,一直固定在螺丝刀上,用于与附着之后的Arrow对比计算旋转;
float变量MaxRot,MinRot,螺丝刀转动有效值范围,当一帧计算出来的螺丝刀的旋转角度大于MaxRot或者小于MinRot;则认为转动无效,否则为有效;
float变量EnableAngle,螺丝刀碰撞到螺丝时,螺丝刀方向与螺丝孔的角度小于EnableAngle才判断螺丝刀放到了螺丝上;
函数UpdateRot,每帧更新螺丝刀的旋转,在tick(虚幻引擎4自带的帧函数) 函数里面调用;
函数SetLastVecPoint,让组件Arrow附着到玩家的手上,附着的时候保持当前的世界旋转和世界位置附着上去。
螺丝类Screw上有以下核心组件和成员属性函数:
根组件ScrewMesh,UStaicMeshComponent类型,螺丝根组件,螺丝模型与基础物理碰撞组件;
组件ScrewBox,UBoxComponent类型,判断是否触碰到螺丝刀;
bool类型变量bNeedLoose,表示螺丝是需要松还是需要紧(为了方便玩家拧,本实施例默认不可往错误方向拧,需要松的时候玩家必须逆时针,需要紧必须顺时针,否则不会动);
float类型变量SuccessAngle,表示从头到尾完成螺丝的松紧需要旋转的角度,成功后调用一个委托;
float类型变量CurrentProgress,表示当前螺丝的松紧进度;
函数void SDAction(float Action),转动函数,由螺丝刀进行调用。
步骤S2:当检测到螺丝刀和螺丝发生碰撞时,进行拧螺丝步骤:将组件Arrow 附着到玩家的手上,经过一帧时间后,获取组件Arrow的方向向量,计算组件 Arrow和组件ArrowNoMove当前的方向向量在垂直于螺丝刀方向轴的平面上的投影的夹角LocalRot;判断玩家的手的旋转方向为顺时针还是逆时针,根据判断的结果使螺丝旋转一个角度LocalRot;
判断当前螺丝是否拧完,若否,继续进行下一帧的拧螺丝步骤,若是,结束拧螺丝。
步骤S2的更为具体的实现过程如下:
首先进行碰撞的判断,当检测到螺丝刀的组件ScrewDiverBox和螺丝上的组件ScrewBox发生碰撞的时候,调用虚幻引擎自带的碰撞框碰撞调用函数 BeginOverlap,螺丝刀上接收到BeginOverlap事件,此时让螺丝刀对准螺丝孔 AttachToComponet函数附着到螺丝的根组件ScrewMesh上,接着调用箭头附着函数SetLastVecPoint,让组件Arrow先附着到玩家手上,经过一帧时间后,在 tick里面,螺丝刀调用UpdateRot函数进行核心的旋转计算,具体的计算过程为:首先,Arrow组件此时是附着到了玩家手上,且已经经过一帧时间,这一帧时间里面组件Arrow跟着玩家的手旋转了,获取到组件Arrow当前的方向向量,然后投影在垂直于螺丝刀方向轴的平面(后面简称“SD平面”)上获得 ArrowProjection,此时向量ArrowNoMove(组件ArrowNoMove当前的向量)和向量ArrowProjection在都在SD平面上,用虚幻引擎自带的向量点积函数Dot 计算出两个向量夹角的Cos值,然后由反三角函数计算出夹角的度数LocalRot, LocalRot就是玩家的手在上一帧时间内在SD平面上的旋转值。
得到LocalRot之后还需要判断顺时针逆时针,将向量ArrowNoMove和向量ArrowProjection进行叉乘得到的向量与螺丝刀方向进行比较,如果方向是一致则这一帧的旋转方向是顺时针,如果方向相反则这一帧方向为逆时针。若为逆时针时,LocalRot需要乘上-1,重新对LocalRot赋值,然后判断再是否LocalRot 在MaxRot和MinRot的区间内,如果不在区间内则将LocalRot设置为0(为了避免玩家在轻微的旋转误差需要最小值判断,为了避免玩家手非正常操作的原因导致的大幅度转动需要最大值判断)。计算出需要的LocalRot之后,把组件 Arrow重置回到螺丝刀上(与组件ArrowNoMove一致),然后再附着到玩家手上(每一帧都重新让箭头附着,目的是即使玩家中途改变握姿,也可以正常旋转螺丝刀),附着的时候需要保持箭头当前的世界坐标世界旋转,因为只需要一帧的差值,然后调用螺丝的SDAction函数,以LocalRot为实际参数,首先判断逆时针顺时针是否与bNeedLoose相符,不相符则结束执行任务,相符继续执行,调用虚幻引擎自带的增量旋转的函数让螺丝旋转LocalRot度,然后当前进度 CurrentProgress增加LocalRot,更新CurrentProgress的值,然后再进行判断是否大于SuccessAngle,大于表示已经拧完,螺丝刀离开螺丝,调用螺丝刀成功的委托和事件,否则,继续执行下一帧的拧螺丝步骤。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受所述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (9)

1.一种在虚拟现实环境中实现拧螺丝的方法,其特征在于,包括以下步骤:
在虚幻引擎中添加一个螺丝刀类ScrewDiver和一个螺丝类Screw;
所述螺丝刀类ScrewDiver包括第一组件Arrow和第二组件ArrowNoMove;所述组件ArrowNoMove固定在螺丝刀上;所述第一组件Arrow初始位置和初始方向均与第二组件ArrowNoMove的位置和方向一致;所述组件ArrowNoMove不会附着到玩家手上,一直固定在螺丝刀上,用于与附着之后的Arrow对比计算旋转;
当检测到螺丝刀和螺丝发生碰撞时,进行拧螺丝步骤:将第一组件Arrow附着到玩家的手上,经过一帧时间后,获取第一组件Arrow的方向向量,计算第一组件Arrow和第二组件ArrowNoMove当前的方向向量在垂直于螺丝刀方向轴的平面上的投影的夹角LocalRot;判断玩家的手的旋转方向为顺时针还是逆时针,根据判断的结果使螺丝旋转一个角度LocalRot;
判断当前螺丝是否拧完,若否,继续进行下一帧的拧螺丝步骤,若是,结束。
2.根据权利要求1所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,在计算得到第一组件Arrow和第二组件ArrowNoMove当前的方向向量在垂直于螺丝刀方向轴的平面上的投影的夹角LocalRot后,把第一组件Arrow重置到螺丝刀上。
3.根据权利要求1所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,当检测到螺丝刀和螺丝发生碰撞时,调用虚幻引擎自带的碰撞框碰撞调用函数BeginOverlap,使螺丝刀接收到BeginOverlap事件,接着调用箭头附着函数SetLastVecPoint,将第一组件Arrow附着到玩家手上。
4.根据权利要求1所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,所述判断玩家的手的旋转方向,具体为:
令第一组件Arrow当前在垂直于螺丝刀方向轴的平面的上的投影向量为向量ArrowProjection,第二组件ArrowNoMove当前的向量为向量ArrowNoMove;
将向量ArrowNoMove和向量ArrowProjection进行叉乘得出的向量与螺丝刀方向进行比较,如果方向一致则玩家的手在这一帧的旋转方向是顺时针,如果方向相反则玩家的手在这一帧方向的旋转方向为逆时针。
5.根据权利要求4所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,当玩家的手的旋转方向为逆时针时,将角度LocalRot的值乘上-1后,对角度LocalRot重新赋值。
6.根据权利要求1或5所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,还包括以下步骤:
设置螺丝刀的转动有效范围值,当角度LocalRot超出转动有效范围值的范围时,将LocalRot的值设置为0。
7.根据权利要求1所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,还包括以下步骤:
在判断玩家的手的旋转方向步骤之后,判断玩家的手的旋转方向是否与螺丝实际需要的旋转方向一致,若否,结束执行该帧的任务。
8.根据权利要求1所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,所述根据判断的结果使旋转一个角度LocalRot,具体为:
调用虚幻引擎自带的增量旋转的函数AddLocalRotation使螺丝旋转一个角度LocalRot。
9.根据权利要求1所述的在虚拟现实环境中实现拧螺丝的方法,其特征在于,所述判断当前螺丝是否拧完,具体为:
令从头到尾完成螺丝的松紧需要旋转的角度为SuccessAngle,令螺丝的当前进度为CurrentProgress,螺丝每次转动后更新CurrentProgress的值,判断CurrentProgress的值是否大于SuccessAngle的值,若是,则表示螺丝已拧完。
CN202210734587.3A 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法 Pending CN115237251A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210734587.3A CN115237251A (zh) 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202011250635.9A CN112433605B (zh) 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法
CN202210734587.3A CN115237251A (zh) 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN202011250635.9A Division CN112433605B (zh) 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法

Publications (1)

Publication Number Publication Date
CN115237251A true CN115237251A (zh) 2022-10-25

Family

ID=74699581

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202210734587.3A Pending CN115237251A (zh) 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法
CN202011250635.9A Active CN112433605B (zh) 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202011250635.9A Active CN112433605B (zh) 2020-11-10 2020-11-10 一种在虚拟现实环境中实现拧螺丝的方法

Country Status (1)

Country Link
CN (2) CN115237251A (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10423234B2 (en) * 2015-03-27 2019-09-24 Lucasfilm Entertainment Company Ltd. Facilitate user manipulation of a virtual reality environment
EP3323036A4 (en) * 2015-07-13 2019-05-29 Quan Xiao APPARATUS AND METHOD FOR BUTTONS / KEYS HYBRID INPUT TYPE AND "FINGER WRITING", AND LOW PROFILE / VARIABLE GEOMETRY MANUAL CONTROLLER
CN107045389A (zh) * 2017-04-14 2017-08-15 腾讯科技(深圳)有限公司 一种实现控制固定被控物的方法及装置
CN108986583A (zh) * 2018-08-15 2018-12-11 郑州精铖电力设备有限公司 一种基于vr的电力仿真教学系统和教学方法
CN111045511B (zh) * 2018-10-15 2022-06-07 华为技术有限公司 基于手势的操控方法及终端设备
CN111508080B (zh) * 2020-06-08 2023-06-30 深圳市瑞立视多媒体科技有限公司 基于ue4引擎的胶带缠绕仿真的实现方法及相关设备

Also Published As

Publication number Publication date
CN112433605B (zh) 2022-10-04
CN112433605A (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
US9050538B2 (en) Collision detection and motion simulation in game virtual space
US9165392B2 (en) Image generating device, image generating method, and non-transitory information storage medium
US20020196258A1 (en) Rendering collisions of three-dimensional models
WO2006102599A2 (en) Computer simulation of body dynamics including a solver that solves in linear time for a set of constraints
WO2006102623A2 (en) Computer simulation of body dynamics including a solver that solves in linear time for a set of constraints using vector processing
WO2006102655A2 (en) Computer simulation of body dynamics including a solver that solves for position-based constraints
CN110850961A (zh) 一种头戴式显示设备的校准方法及头戴式显示设备
KR20090084900A (ko) 3d 표면에 대하여 입력 장치의 위치를 제공하기 위한 방법, 3d표면에 위치된 2d성분과의 상호작용을 가능하게 하는 방법 및 컴퓨터 판독 가능 매체
KR101865282B1 (ko) 가상현실 스켈레톤 시뮬레이터 모션제어 장치 및 통합제어 방법
CN110969687A (zh) 一种碰撞检测方法、装置、设备和介质
US20200034011A1 (en) Menu processing method, device and storage medium in virtual scene
Khattak et al. A real-time reconstructed 3D environment augmented with virtual objects rendered with correct occlusion
CN112433605B (zh) 一种在虚拟现实环境中实现拧螺丝的方法
CN112015269A (zh) 头显设备的显示校正方法、设备及存储介质
CN111494945A (zh) 虚拟对象处理方法及装置、存储介质、电子设备
CN111080755A (zh) 一种运动解算方法、装置、存储介质及电子设备
CN111467799B (zh) 一种坐标转换方法、装置、电子设备和存储介质
CN110096134B (zh) 一种vr手柄射线抖动矫正方法、装置、终端和介质
CN112206525B (zh) Ue4引擎中手拧虚拟物品的信息处理方法和装置
CN105260227B (zh) 一种数据修正方法及电子设备
CN111773674A (zh) 游戏中的指令处理方法以及电子设备
CN111603773A (zh) 基于ue4引擎的物体同步方法、装置、设备及存储介质
CN110363841B (zh) 一种虚拟驾驶环境中手部运动跟踪方法
CN108803872B (zh) 在虚幻引擎中调用力反馈硬件的插件系统
CN107463257B (zh) 一种虚拟现实vr系统的人机交互方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination