一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种虚拟引擎中距离测量的方法及其系统与流程

2023-01-05 17:16:20 来源:中国专利 TAG:


1.本技术涉及虚拟技术领域,具体地,涉及一种虚拟引擎中距离测量的方法及其系统。


背景技术:

2.虚幻引擎是一个面向下一代游戏机和个人电脑的完整的游戏开发平台,其中包含了游戏开发者需要的大量的核心技术、数据生成工具和基础支持。虚幻引擎同时也是一款功能完善的游戏制作引擎,它囊括了场景制作、灯光渲染、动作镜头、粒子特效、材质蓝图,可以帮助各种规模的工作室高效地制作不同种类的游戏,构建大量的虚拟3d场景,在虚拟引擎中,往往会出现需要进行虚拟3d场景的距离测量的需求,但是现有虚幻引擎中的测量大多基于spline,交互性与易用性都比较差,因此测量距离的功能也并不能十分便利的实现。
3.因此,如何提供一种能够实现在虚拟3d场景中快速便捷的进行距离测量的方法,是本领域技术人员急需解决的问题。


技术实现要素:

4.本技术提供了一种虚拟引擎中距离测量的方法,其特征在于,具体包括以下子步骤:获取位置信息;确定位置信息之间的不可视距离;将位置信息之间的不可视距离转化为可视化距离。
5.如上的,其中,位置信息为一组或多组位置信息,获取的每组位置信息中包括获取世界空间中的起点和终点位置信息。
6.如上的,其中,基于射线检测方法,确定世界空间中的起点位置信息和终点位置信息。
7.如上的,其中,确定世界空间中的起点位置信息和终点位置信息具体包括,通过射线检测方法判断是否碰撞到物体,若碰撞到物体则将其作为起点位置,若再碰到物体则将其作为终点位置。
8.如上的,其中,计算位置信息之间的不可视距离为,确定一组或多组位置信息中,每组位置信息中的起点和终点位置距离。
9.如上的,其中,确定位置信息之间的不可视距离,具体包括:根据起点和终点位置信息确定生成点,生成点能够确认每组位置信息中起点和终点的顺序。
10.如上的,其中,响应于确定生成点,将起点和终点的坐标放入预先设置的vector类型数组内,得到起点和终点之间不可视距离。
11.如上的,其中,通过蓝图通信,调用蓝图中的字符串变量,将不可视距离转化为可视距离。
12.一种虚拟引擎中距离测量系统,具体包括位置信息获取单元、不可视距离确定单元、可视距离确定单元;获取单元用于获取位置信息;不可视距离确定单元,用于确定位置
信息之间的不可视距离;可视距离确定单元,用于将位置信息之间的不可视距离转化为可视化距离。
13.如上的,其中,不可视距离确定单元具体包括以下模块:生成点确定模块、不可视距离获取模块;其中生成点确定模块,用于根据起点和终点位置信息确定生成点;不可视距离获取模块,用于将起点和终点的坐标放入预先设置的vector类型数组内,得到起点和终点之间不可视距离。
14.本技术具有以下有益效果:本技术可实现虚幻引擎下,用于各种游戏场景以及虚拟3d的场景测量,可实现自由点击自由生成距离。并且本技术中采用双浮点计算,可在虚拟引擎的世界空间中,随意点击精准绘制,具有更强的易用性,能够即点即测,最终使虚拟3d场景中进行距离测量更加快速便捷。
附图说明
15.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
16.图1是根据本技术实施例提供的虚拟引擎中距离测量的方法的流程图;图2是根据本技术实施例提供的虚拟引擎中距离测量系统的结构示意图;图3是根据本技术实施例提供的虚拟引擎中距离测量系统的另一结构示意图。
具体实施方式
17.下面结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
18.实施例一如图1所示,为本技术提供的一种虚拟引擎中距离测量的方法,其中本技术在进行距离测量方法之前,需要用到蓝图和虚拟引擎。
19.其中蓝图是于c 封装的可视化程序编辑器,用它可以在虚幻引擎中实现各种程序需求,最简单的方式可以把蓝图视为ue引擎里面内置的程序语言。
20.具体地,蓝图中的数据类似,数组,float类型等。本实施例中使用的蓝图编辑器为现有技术中的蓝图编辑器。但是值得注意的是,由于不同的蓝图类型用于不同的使用场景。因此本实施例将主要使用蓝图中的character这个来制作蓝图从而实现距离测量。
21.此外蓝图编辑器还提供大量节点与函数方便创建蓝图。
22.因此,本实施例提供的蓝图文件中,材质启用输出属性如下:bp_thirdpersoncharacter:最终的操作模式bp_point:点击位置所生成的标注点bp_distance:调用ui
bp_ui:根据长度生成ui参数bp_ui_total:绘制测量线的总长度基于上述材质启用输出属性,其中蓝图中的内置变量使用的数据类型如表1下:表1完成上述设置后,本技术进行距离测量,其中虚拟引擎中距离测量的方法具体包括以下步骤:步骤s110:获取位置信息。
23.其中获取位置信息包括获取起点和终点位置信息,具体包括:获取角色位置信息,根据角色位置信息将鼠标的屏幕空间转化为世界空间,并基于射线检测方法,确定世界空间中的起点位置坐标信息和终点位置坐标信息。
24.其中将鼠标的屏幕空间转化为世界空间可使用现有技术中本领域惯用的方法进行转化。
25.以下为对起点位置坐标和终点位置坐标信息进行具体解释:其中起点和重点坐标为标准化设备坐标,即每个顶点的x,y,z坐标都应该在-1.0到1.0之间,超出这个坐标范围的顶点都将不可见。将坐标变换为标准化设备坐标,接着再转化为屏幕坐标,这个过程通常是分步进行的,也就是类似于流水线那样子。在流水线中,物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统(coordinate system)。将物体的坐标变换到几个过渡坐标系(intermediate coordinate system)的优点在于,在特定的坐标系统中,一些操作或运算更加方便和容易。
26.对我们来说比较重要的总共有5个不同的坐标系统:局部空间(local space,或者称为物体空间(object space))、世界空间(world space)、观察空间(view space,或者称为视觉空间(eye space))、裁剪空间(clip space)、屏幕空间(screen space)。这就是一个顶点在最终被转化为片段之前需要经历的所有不同状态。
27.为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(model)矩阵、观察(view)矩阵、投影(projection)矩阵。联合起来就是我们常说的mvp矩阵。
28.我们的顶点坐标起始于局部空间(local space),在这里它称为局部坐标(local coordinate),它在之后会变为世界坐标(world coordinate),观察坐标(view coordinate),裁剪坐标(clip coordinate),并最后以屏幕坐标(screen coordinate)的形式结束。
29.局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标。
30.世界空间坐标是处于一个更大的空间范围的。这些坐标相对于世界的全局原点,它们会和其它物体一起相对于世界的原点进行摆放。将世界坐标变换为观察空间坐标,使得每个坐标都是从摄像机或者说观察者的角度进行观察的。
31.坐标到达观察空间之后,我们需要将其投影到裁剪坐标。裁剪坐标会被处理至-1.0到1.0的范围内,并判断哪些顶点将会出现在屏幕上。最后,将裁剪坐标变换为屏幕坐标,我们将使用一个叫做视口变换(viewport transform)的过程。
32.视口变换将位于-1.0到1.0范围的坐标变换到由glviewport函数所定义的坐标范围内。最后变换出来的坐标将会送到光栅器,将其转化为片段。
33.上述的局部空间,可以理解为,拿拍照来举例,给一群人拍照,里面每个人都会调整各自的仪容仪表,各自调整就是在局部空间。局部空间是指物体所在的坐标空间,即对象最开始所在的地方。在一个软件中创建了一个立方体,创建的立方体的原点有可能位于(0, 0, 0),即便它有可能最后在程序中处于完全不同的位置。有可能创建的所有模型都以(0, 0, 0)为初始位置(译注:然而它们会最终出现在世界的不同位置)。所以,模型的所有顶点都是在局部空间中,它们相对于物体来说都是局部的。
34.上述的世界空间/模型矩阵可以理解为:给一群人拍个照片,我们要把他们各自整理好后,我们要把他们先集中起来,然后调整站位,角度。集中起来调整,这一过程就是模型矩阵,所在的空间就是世界空间。如果我们将我们所有的物体导入到程序当中,它们有可能会全挤在世界的原点(0, 0, 0)上,这并不是我们想要的结果。我们想为每一个物体定义一个位置,从而能在更大的世界当中放置它们。世界空间中的坐标正如其名:是指顶点相对于(游戏)世界的坐标。如果想将物体分散在世界上摆放,这个空间就是我们希望物体变换到的空间。
35.物体的坐标将会从局部变换到世界空间;该变换是由模型矩阵(model matrix)实现的。模型矩阵是一种变换矩阵,它能通过对物体进行位移、缩放、旋转来将它置于它本应该在的位置或朝向。上述的观察空间/观察矩阵可以理解为,找一群人拍个照片,一切顺利后,摄像机对好方位。摄像机也就是观察空间,而调整摄影机的过程,就是观察矩阵。观察空间经常被人们称之opengl的摄像机(camera)(所以有时也称为摄像机空间(camera space)或视觉空间(eye space))。观察空间是将世界空间坐标转化为用户视野前方的坐标而产生的结果。因此观察空间就是从摄像机的视角所观察到的空间。
36.这通常是由一系列的位移和旋转的组合来完成,平移/旋转场景从而使得特定的对象被变换到摄像机的前方。这些组合在一起的变换通常存储在一个观察矩阵(view matrix)里,它被用来将世界坐标变换到观察空间。
37.具体地,获取起点和终点位置信息的方法具体基于ue蓝图中的射线检测功能判断是否碰撞到物体,若碰撞到物体则将其作为起点位置,若再碰到物体则将其作为终点位置。该起点位置和终点位置为一组位置信息,若再次点击鼠标,则继续生成起点位置和终点位
置。响应于确定了一组或多组起点信息和终点信息后,执行步骤s120。
38.其中基于是否碰撞到物体进行起点和终点的确定可以理解为,当点击鼠标时,若碰撞到物体,则点击鼠标后生成一个起点或终点。
39.其中射线检测功能中碰撞到物体时的位置的坐标是基于图形学中的世界位置坐标,也可以说是ue引擎内的坐标。通过该坐标从而能够确定具体的起点坐标和终点坐标。
40.其中将一个起点坐标和对应的终点坐标视为一组位置信息,本实施例可检测多组位置信息之间的距离,即本实施例可以获取一组或多组的位置信息,从而检测每组位置信息中的起点和终点位置之间的距离。
41.具体地,其中判断射线是否碰撞到物体可以理解为射线进行命中判定,其中命定即为碰撞。
42.游戏中可能存在这样的情况:需要确定玩家角色是否在看着某件物体;如是,则以某种方式调整游戏状态(例如在玩家看着某件物体时将其高亮显示)。或者需要确定敌人是否能看到玩家角色;如是,则开始射击或以其他方式攻击。使用追踪(or光线投射)可实现这两种情况——"发射"一道不可见的光线检测两点之间的几何体;如命中几何体,返回被击中的内容,以便对其进行操作。
43.运行追踪时有数个不同的可用选项。您可运行追踪,检查和任意目标发生的碰撞(命中的对象将被返回);或者按追踪通道运行追踪,只有在对象被设为响应特定的追踪通道时(可通过 collision settings 进行设置)命中的对象才返回命中信息。
44.除按对象或追踪通道运行追踪外,您还可运行追踪检测单次命中或多次命中,单次追踪只返回单次命中结果,多次追踪返回追踪造成的多次命中。也可通过追踪指定使用的光线类型:直线、方块、胶囊体或球体。
45.其中追踪提供了一种在关卡中获取有关线段上存在内容的反馈的方法。使用方法是提供两个端点(一个开始位置和一个结束位置),物理系统将"追踪"两个点之间的线段,报告它命中的任何actor(带碰撞)。本质上,追踪和其他软件包中的光线投射或光线追踪相同。
46.无论你是需要知晓一个actor是否能"看见"另一个actor,确定特定多边形的法线,模拟高速武器,还是需要知晓actor是否已进入一个空间,都可以使用追踪这种可靠而计算开销低的解决方案。本实施例将介绍虚幻引擎5(ue5)中追踪的基本功能集。
47.其中包括按信道或对象类型追踪,因为追踪使用物理系统,你可以定义需要进行追踪的对象类别。可在两个大类中进行选择:信道和对象类型。信道用于可视性和摄像机等事物,且几乎只和追踪相关。对象类型是场景中带碰撞的actor物理类型,如pawn、载具、可破坏物actor等等。可根据需要添加更多信道和对象类型。有关具体操作的更多信息,请参阅为项目添加自定义物体类型。
48.追踪时,可以选择返回与条件匹配且被追踪命中的第一个项,也可返回与条件匹配且被追踪命中的所有项。需要特别注意按信道多重追踪(multi trace by channel)和按对象多重追踪(multi trace for objects)的区别。使用按信道多重追踪(muli trace by channel)时,追踪将返回包含第一个阻挡(block)在内的所有重叠(overlaps)。想象射击的子弹穿过高高的草丛,然后击中墙壁。按对象多重追踪(multi trace for objects)将返回与追踪查找的对象类型匹配的所有对象,假定组件设置为返回追踪查询。因此它很适合于
计算追踪开始和结束之间的对象数量。
49.根据追踪能够获取uv坐标,如果使用trace complex,追踪可以返回它命中的actor的uv坐标。从4.14版起,此功能仅在静态网格体组件、程序式网格体组件和bsp上有效。它无法在骨架网格体组件上正常工作,因为你追踪的是物理资源,而物理资源不具备uv坐标(即使你选择trace complex)。使用此功能将增大cpu内存使用率,因为虚幻引擎需要在主内存中保留顶点位置和uv坐标的额外副本。
50.追踪还拥有一些小功能,可用于限制其返回的内容,这简化了调试它们的过程。它们能够追踪复杂碰撞(complex collision)(如果静态网格体或程序式网格体启用了它)。如果从actor调用它们,可以通过让actor追踪自身来告知它们忽略所有连接的组件。最后,它们拥有以红色或绿色线条代表追踪的选项,较大的框则代表命中。
51.以上为一种通过追踪获取坐标的方式,另外追踪还可以使用单线跟踪方法,具体包括以下子步骤:步骤d1:在虚拟引擎中创建新项目并打开。
52.具体地,在虚拟引擎中使用包括 starter content的blueprint first person模版创建新项目并打开项目。
53.在firstperson/blueprints文件夹中,打开bp_firstpersoncharacter蓝图。在图形中点击,搜索并添加一个事件点差。这会导致追踪每帧运行。执行追寻t连线出赛,然后从bychannel寻找。
54.步骤d2:根据打开的项目进行追踪。
55.其中按键控制相机,拖键入第一组件,开始追踪。
56.具体地,第一人称相机节点连接出线,从添加一个获取世界位置节点,然后将其追踪到追踪的开始。然后从第一人称相机旁边连出一条线索,添加一个get world rotation节点。
57.我们从firstpersoncamera的位置开始追踪,然后获得firstpersoncamera的旋转。在getworld rotation连出节点并添加一个get forward vector,然后再从这里连出一个节点并添加一个vector * float,设为1500。
58.获得未来的胜利和未来,然后将其向前延伸。
59.获取world location节点连出节点并从添加一个vector vector,然后(点击显示到追踪节点的end)。
60.我们在此使用personcamera的位置将其抢先展示了1500个(基于其旋转和向前移动)。
61.在追踪节点上将绘制调试类型设为一帧。
62.进行查看游戏线路追踪时,即可查看调试线路。
63.追踪的执行输出连出并添加一个打印字符串。
64.搜索出hitreak连出结果,然后添加一个hitbreak hit result。
65.从(从演员到他连接到结果的连接处)添加一个到字符串对象(打印字符串对象)并打印字符串节点。这可以让我们调试输出追踪目标对象。
66.步骤d3:完成追踪,获取命中结果。
67.其中通过编译按钮,然后在编辑器中开始,点击查看关卡中的游戏方块。通过射线
是否碰撞到该游戏方块查看最终是否命中。若碰到方块则视为命中。
68.步骤s120:确定位置信息之间的不可视距离。
69.其中计算位置信息之间的不可视距离为,具体为得到一组或多组位置信息中的起点和终点位置距离,如果碰撞到物体则计算当前位置,具体可以通过debug模式可视化具体的射线碰撞位置。值得注意的是,本步骤中计算的起点和终点位置信息之间的距离是不可视化的。
70.具体地,其中步骤s120具体包括以下子步骤:步骤s1201:根据起点和终点位置信息确定生成点。
71.其中根据碰撞到物体时的位置的坐标,可以理解为一个生成点,生成点是位于起点和终点之间的一个点。
72.进一步地,此时生成的生成点是不可见的,所以本实施例在蓝图中通过点击鼠标的方式指定一个生成点,同时生成一个可视化的圆球作为参考,从而明确生成点的位置坐标。
73.其中由于位置信息可能为多组位置信息,通过该生成点,能够确认每组位置信息中起点和终点的顺序,例如在一组位置信息中,鼠标点击第一下的生成的是起点,第二下点击生成的是终点,由此能够避免每组位置信息中的起点和终点产生混淆。
74.步骤s1202:响应于确定生成点,将起点和终点的坐标放入预先设置的vector类型数组内,得到起点和终点之间不可视距离。
75.具体地,响应于将一组或多组中的起点和终点顺序确定后,将每组位置信息中的起点和终点的坐标放入vector类型数组内,由于vector类是在java 中可以实现自动增长的对象数组,因此通过该数组能够得到起点和终点坐标之间的向量,并通过向量获取长度从而得到起点和终点之间的不可视距离。
76.步骤s130:将位置信息之间的不可视距离转化为可视化距离。
77.其中本步骤是将步骤s120中的不可视距离,生成ui并可视化。
78.具体地,通过蓝图通信在ui蓝图中生成ui,并调用字符串变量distance,来生成场景中测量所得长度数据,即将不可视距离转化为可视距离。
79.实施例二如图2所示,本实施例提供了虚拟引擎中距离测量系统,包括位置信息获取单元210、不可视距离确定单元220、可视距离确定单元230。
80.获取单元210用于获取位置信息。
81.不可视距离确定单元220与获取单元210连接,用于确定位置信息之间的不可视距离。
82.其中不可视距离确定单元220具体包括以下模块:生成点确定模块310、不可视距离获取模块320。
83.其中生成点确定模块310用于根据起点和终点位置信息确定生成点。
84.不可视距离获取模块320与生成点确定模块310连接,用于将起点和终点的坐标放入预先设置的vector类型数组内,得到起点和终点之间不可视距离。
85.可视距离确定单元230与不可视距离确定单元220连接,用于将位置信息之间的不可视距离转化为可视化距离。
86.本技术具有以下有益效果:本技术可实现虚幻引擎下,用于各种游戏场景以及虚拟3d的场景测量,可实现自由点击自由生成距离。并且本技术中采用双浮点计算,可在虚拟引擎的世界空间中,随意点击精准绘制,具有更强的易用性,能够即点即测,最终使虚拟3d场景中进行距离测量更加快速便捷。
87.虽然当前申请参考的示例被描述,其只是为了解释的目的而不是对本技术的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本技术的范围。
88.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献