弧线蓝图Spline轨道及SplineMesh的生成方法与流程

文档序号:32055927发布日期:2022-11-04 21:24阅读:269来源:国知局
弧线蓝图Spline轨道及SplineMesh的生成方法与流程
弧线蓝图spline轨道及splinemesh的生成方法
技术领域
1.本发明涉及计算机技术技术领域,具体涉及一种弧线spline轨道的splinemesh的生成方法。
技术背景
2.样条组件是一条可用于定义和使用位置数据的路径。可以让场景中的角色(或其他组件)沿样条线移动,或者沿着样条线放置一系列角色(或其他组件)。它们可以直接在蓝图视口和关卡编辑器中编辑,包括添加/删除/复制样条点,改变切线类型,甚至实现逐帧动画。
3.splinemesh是虚幻的splinemeshcomponent是可以根据组件属性,将保存的staticmesh模型,按要求缩放拉伸成指定的形状。虚幻引擎中spline轨道工具有很多应用,但当前并没有根据两个可移动点生成弧线splinemesh的蓝图spline轨道。


技术实现要素:

4.针对上述存在的拘束局限性,本发明提出了一种弧线spline轨道的生成与缩放方法,通过实现蓝图对象来生成弧线蓝图spline轨道并以此生成弧线轨道splinemesh。
5.为实现上述目的,本发明采用了以下技术方案:
6.弧线蓝图spline轨道及splinemesh的生成方法,所述方法包括以下步骤:
7.步骤1、创建实现蓝图对象,根据目标起始点与目标结束点计算中点世界位置并将实现蓝图对象的世界位置设置为所述中点世界位置;
8.步骤2、计算本地中点位置;
9.步骤3、根据目标弧线的形状及目标缩放比例,计算目标弧线所对应圆的圆心距离中点长度centerdistance及半径长度realradius;
10.步骤4、根据目标缩放比例计算本地起始点位置与本地结束点位置;
11.步骤5、根据所述本地起始点位置、所述本地结束点位置计算本地圆心位置,并根据所述本地圆心位置计算第一蓝图样条组件数据;
12.步骤6、分别计算起始角度、结束角度;
13.步骤7、生成弧线所有点的位置数据并添加至所述第一蓝图样条组件数据中得到第二蓝图样条组件数据;
14.步骤8、以第二蓝图样条组件数据生成splinemesh组件。
15.所述实现蓝图对象需要经过贴附处理后才可用于生成所述第一蓝图样条组件,所述贴附处理包括以下步骤:
16.(1)计算起始点指向结束点的向量linevector;
17.(2)调用rotationfromxvector方法传入linevector,得到第一目标旋转值;
18.(3)调用getactorrotation获得所述实现蓝图对象的第二目标旋转值;
19.(4)创建旋转值,将所述第一目标旋转值的y轴及z轴数据赋值给所创建旋转值的
y、z轴,将所述第二目标旋转值的x轴数据赋值给所创建旋转值的x轴,得到第三目标旋转值;
20.(5)调用setactorrotation方法根据所述第三目标旋转值实现针对所述实现蓝图对象的贴附处理。
21.本发明与现有技术相对比,本发明具有以下优点:
22.(1)实现了根据两个可移动点生成弧线蓝图spline轨道;
23.(2)根据弧线蓝图spline轨道生成的splinemesh可进行缩放,且缩放该splinemesh时可保持轨迹在开始点与结束点位置上。
24.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
25.图1为本发明实施例提供的一种弧线蓝图spline轨道及splinemesh的生成方法的步骤流程图。
26.图2为本发明实施例提供的起始点、结束点与centerdistance、realradius及弧线形状的关系示意图。
27.图3为本发明实施例提供的目标弧线形状的说明图。
28.图4为本发明实施例提供的起始角度与结束角度的位置示意图。
具体实施方式
29.以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了进一步了解本发明,下面结合最佳实施例对本发明作进一步的详细说明。
30.如下为本发明实施例中涉及名词术语的解释:
31.spline:样条组件,即虚幻引擎的splinecomponent。
32.splinemesh:即虚幻引擎的splinemeshcomponent,可以根据组件属性将保存的staticmesh模型,按要求缩放拉伸成指定的形状;其主要属性有:静态网格体(staticmesh)、样条网格体。
33.actor:虚幻引擎中的数据类型。
34.实现蓝图对象:实现本方法的蓝图actor类的实例对象。
35.下面结合前述名词术语具体介绍本发明的实现方式:
36.本发明的发明点是提供一种弧线蓝图spline轨道及splinemesh的生成方法,用于实现根据两个可移动点生成弧线蓝图spline轨道并根据弧线蓝图spline轨道生成可缩放的splinemesh;
37.参考图1所示,所述方法包括以下步骤:
38.步骤1、创建实现蓝图对象并根据目标起始点与目标结束点设置实现蓝图对象的
世界位置,具体方法为:
39.根据目标起始点的起始点actor对象、目标结束点的结束点actor对象计算目标起始点与目标结束点连线中点的世界位置,得到中点世界位置halfpoint,并将创建的实现蓝图对象的世界位置设置为halfpoint;
40.步骤2、计算所述中点的本地位置的得到本地中点位置halfpoint_ls;
41.步骤3、根据目标弧线的形状及目标缩放比例,计算弧线所对应圆的圆心距离所述中点长度centerdistance及所述圆的半径长度realradius;
42.步骤4、根据目标缩放比例计算所述起始点与所述结束点缩放后的世界位置位置,并转换到本地空间,得到本地起始点位置startpoint_ls与本地结束点位置endpoint_ls;
43.步骤5、根据所述本地起始点位置、所述本地结束点位置计算本地圆心位置centerlocation_ls,并根据所述本地圆心位置计算第一蓝图样条组件数据;
44.步骤6、分别计算起始角度、结束角度;
45.所述起始角度为所述目标起始点相对圆心x轴负方向的角度值;所述结束角度为所述目标结束点相对圆心x轴负方向的角度值;
46.所述起始点、所述结束点相对圆心x轴负方向的角度值startdegree、enddegree;
47.步骤7、生成弧线所有点的位置数据并添加至所述第一蓝图样条组件数据中得到第二蓝图样条组件数据;
48.步骤8、以第二蓝图样条组件数据生成splinemesh组件。
49.作为一种实施例,步骤1包括以下步骤:
50.步骤11、创建实现蓝图对象;
51.步骤12、调用getactorlocation方法分别传入目标起始点的起始点actor对象、目标结束点的结束点actor对象,获得起始点世界位置startlocation与结束点世界位置endlocation;
52.步骤13、根据startlocation与endlocation计算起始点与结束点连线中点的世界位置,得到中点世界位置halfpoint;
53.步骤14、调用setactorlocation方法将实现蓝图对象的世界位置设置为所述中点世界位置halfpoint。
54.getactorlocation方法用于获得actor当前的世界位置,传入参数为目标actor对象,输出值为目标actor对象的世界位置,所述世界位置为fvector向量数据类型。
55.setactorlocation方法用于设置actor的世界位置,传入参数包括:目标actor、新位置参数、是否被挡住时停下(sweep参数)、是否传送物理状态(teleport参数);在步骤13中调用setactorlocation方法时,目标actor为默认当前actor、新位置参数为中点世界位置halfpoint,sweep参数与teleport参数均为false。
56.作为一种实施例,步骤13中,所述中点世界位置halfpoint的计算方法包括以下步骤:
57.步骤131、计算中点向量halfvector,计算方法为:
58.halfvector=(endlocation-startlocation)*0.5;
59.步骤132、halfvector调用vectorlength方法获取中点向量halfvector的长度halflength;
60.步骤133、计算中点世界位置halfpoint,计算方法为:
61.halfpoint=startlocation+halfvector。
62.作为一种实施例,步骤2包括以下步骤:
63.步骤21、调用getactortransform方法,获得实现蓝图对象的空间矩阵;
64.步骤22、调用inversetransformlocation方法,传入步骤21得到的所述空间矩阵及中点世界位置halfpoint,得到本地中点位置halfpoint_ls。
65.getactortransform方法用于获得目标actor对象的本地空间矩阵,传入参数为所述实现蓝图对象,输出值为所述实现蓝图对象的空间矩阵;
66.inversetransformlocation方法用于将指定位置根据目标矩阵变换到新位置;该方法的传入参数包括目标转换矩阵、待转换对象;步骤22中调用inversetransformlocation方法时,目标转换矩阵为步骤21中得到的空间矩阵,待转换对象为步骤1中得到的中点世界位置halfpoint。
67.需要说明的是,由于步骤1已将实现蓝图对象的世界位置设置于中点世界位置halfpoint处,故本地中点位置应当为(0,0,0)。
68.作为一种实施例,参考图2,当弧线起始点与结束点位置确定时,目标弧线的形状通过圆心距离所述中点长度centerdistance决定;显然,当centerdistance取值为0时将生成半圆弧线,当centerdistance取值大于0时将生成劣弧弧线。
69.centerdistance的计算方法为:
70.其中halflength为所述起始点与所述中点的距离;splinemeshscale为splinemesh模型的目标缩放比例;arcscale为弧线角度比例,控制圆心到中点的距离。
71.圆半径realradius的计算方法为:
72.其中halflength为所述起始点与所述中点的距离;splinemeshscale为splinemesh模型的目标缩放比例,centerdistance为圆心与起始点结束点连线中点的距离。
73.当起始点与结束点确定时,centerdistance由arcscale及splinemeshscale两个参数决定,realradius由centerdistance及splinemeshscale两个参数决定。
74.参考图3所示,arcscale的取值说明如下:
75.当arcscale取值为0时,生成半圆弧线;
76.当arcscale取值大于0时,圆心就开始向y轴负方向移动,此生成劣弧弧线;
77.当arcscale取值小于0时,此时生成优弧弧线。
78.例如,参考图3,作为一种实施例,步骤4中,本地起始点位置与本地结束点位置计算方法为:
79.步骤41、计算缩放起始点世界位置tempstartpoint、缩放结束点世界位置
tempendpoint,计算方法为:tempendpoint,计算方法为:其中,startlocation为起始点世界位置,endlocation为结束点世界位置;splinemeshscale为splinemesh模型的目标缩放比例;
80.步骤42、针对所述起始点与所述结束点分别调用getactortransform方法获得起始点空间矩阵t
start
、结束点空间矩阵t
end

81.步骤43、针对所述起始点与所述结束点分别调用inversetransformlocation方法,分别传入tempstartpoint、t
start
及tempendpoint、t
end
得到本地起始点位置startpoint_ls、本地结束点位置endpoint_ls。
82.getactortransform方法与inversetransformlocation方法的作用及参数在前述实施例中已说明,此处不再赘述。
83.作为一种实施例,步骤5包括以下步骤:
84.步骤51、计算归一化圆心方向向量c,计算方法为:
85.c=normalize(a
×
b)
86.其中a代表中点指向结束点的向量,a=endpoint_ls-halfpoint_ls;b代表垂直向量,b=halfpoint_ls+(0,0,1);
87.步骤52、根据归一化圆心方向向量计算本地圆心位置centerlocation_ls,计算方法为:
88.centerlocation_ls=halfpoint_ls+centerdistance*c;
89.步骤53、创建初始spline组件并调用setrelativelocation函数传入本地圆心位置centerlocation_ls的y、z轴数据,得到第一蓝图样条组件数据。
90.setrelativelocation方法用于设置spline组件的相对位置,传入参数包括:场景组件、新位置参数(fvector类型)、是否被挡住时停下(sweep参数)、是否传送物理状态(teleport参数);在步骤53中调用setactorlocation方法时,场景组件参数传入所述初始spline组件,新位置参数传入centerlocation_ls,sweep参数与teleport参数均为false。
91.作为一种实施例,起始角度startdegree、结束角度enddegree与起始点、结束点的位置关系如图4所示;
92.当所述目标弧线为劣弧时,起始角度startdegree、结束角度enddegree的计算方法为:法为:
93.当所述目标弧线为优弧时,起始角度startdegree、结束角度enddegree的计算方法为:
其中,splinelocation_x为所述第一蓝图样条组件数据的相对位置的x轴数值;startpoint_ls_x为startpoint_ls的x轴数值;endpoint_ls_x为endpoint_ls的x轴数值。
94.例如,当arcscale为1时,生成劣弧,若centerlength为200,计算出srartangle为45、endangle为135;当arcscale为-1时,生成优弧,若centerlength为200,计算出srartangle为135,endangle为45。
95.作为一种实施例,步骤7包括以下以下步骤:
96.步骤71、调用clearsplinepoints方法清空第一蓝图样条组件数据中的所有点数据;
97.步骤72、计算角度增加步长localstepangle;
98.步骤73、通过addsplinepoint方法向清空后的第一蓝图样条组件数据中循环添加点数据得到第二蓝图样条组件数据;
99.所述点数据为点坐标;
100.所述点坐标的x轴坐标为(x+realradius*cos(localcurangle);
101.所述点坐标的y轴坐标为(y+realradius*sin(localcurangle);
102.其中x、y分别为圆心坐标的x轴值、y轴值;localcurangle的计算方法为:localcurangle=startdegree+index*localstepangle其中index为当前循环次数。所述角度增加步长localstepangle的计算方法如下:当生成劣弧弧线时:当生成优弧弧线时:
103.其中segmentnum为段数。
104.作为一种实施例,所述实现蓝图对象需要经过贴附处理后才可用于生成所述第一蓝图样条组件,所述贴附处理包括以下步骤:
105.(1)计算起始点指向结束点的向量linevector,计算方法为:linevector=endlocation-startlocation其中,startlocation为起始点世界位置(fvector类型),endlocation为结束点世界位置(fvector类型);startlocation与endlocation均在步骤1中求得;
106.(2)调用rotationfromxvector方法传入linevector,得到第一目标旋转值;
107.(3)调用getactorrotation获得所述实现蓝图对象的第二目标旋转值;
108.(4)创建旋转值,将所述第一目标旋转值的y轴及z轴数据赋值给所创建旋转值的
y、z轴,将所述第二目标旋转值的x轴数据赋值给所创建旋转值的x轴,得到第三目标旋转值;
109.(5)调用setactorrotation方法根据所述第三目标旋转值实现针对所述实现蓝图对象的贴附处理。
110.rotationfromxvector方法可用于获得待转换fvector向量的旋转值,当用于获得第一目标旋转值时,输入参数为起始点指向结束点的向量linevector。
111.getactorrotation方法可用于获得输入actor对象的旋转值,当用语获得第二目标旋转值时,输入参数为所述实现蓝图对象。
112.setactorrotation方法可用于设置输入actor的旋转值,该方法的参数包括:目标对象参数、新旋转值参数(newrotation参数)、是否传送物理状态(teleportphysics参数);上述(5)中实现贴附处理时,目标对象参数为所述实现蓝图对象,newrotation参数传入所述第三目标旋转值。
113.作为一种实施例,步骤8包括:
114.步骤81、创建splinemesh组件列表splinemeshcomplist并调用destroycomponent方法清空所述splinemesh组件列表;
115.步骤82、设置循环参数,具体设置方法为:当前循环次数index设置为1;循环开始索引firstindex设置为1;循环结束索引lastindex为所述第二蓝图样条组件数据的点数组元素数量减1;
116.步骤83、创建splinemesh组件并调用addsplinemeshcomponent方法获得第一临时splinemesh组件firstlocalsplinemesh;
117.步骤84、设置所述第一临时splinemesh组件的staticmesh属性,得到第二临时splinemesh组件secondlocalsplinemesh;
118.所述第一临时splinemesh组件的staticmesh属性的具体设置方法为:
119.location属性设置为(0,0,0),rotation属性设置为(0,0,0),scale属性设置为(splinemeshscale,splinemeshscale,splinemeshscale),其中splinemeshscale为所述目标缩放比例。
120.步骤85、设置第二临时splinemesh组件secondlocalsplinemesh的起始点与结束点属性,得到生成splinemesh组件localsplinemesh,并将localsplinemesh添加至所述splinemesh组件列表;与此同时,所述当前循环次数index增加1;
121.所述置第二临时splinemesh组件secondlocalsplinemesh的起始点属性与结束点属性的具体设置方法为:
122.所述起始点属性包括开始点位置、开始点切线两个参数;
123.所述开始点位置设置为localstartlocation;所述开始点切线属性设置为localstarttangent;
124.所述结束点属性包括结束点位置、结束点切线两个参数;
125.所述结束点位置熟悉设置为localendlocation;所述结束点切线属性设置为localendtangent;
126.步骤85、判断当前所述当前循环次数index是否大于所述循环结束索引lastindex;若判断结果为false,则返回步骤83继续执行;
127.步骤86、输出所述splinemesh组件列表splinemeshcomplist。
128.localstartlocation、localstarttangent、localendlocation、localendtangent的计算方法为:
129.调用getlocationandtangentatsplinepoint方法,传入所述第二蓝图样条组件数据及index-1的值,得到的输出值分别为localstartlocation、localstarttangent;
130.调用getlocationandtangentatsplinepoint方法,传入所述第二蓝图样条组件数据及index的值,得到的输出值分别为localendlocation、localendtangent。
131.作为一种实施例,本发明所述方法可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用计算机或任何其他类似硬件设备来实现。
132.本发明所述的方法可以软件程序的形式实施,所述软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,所述软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。
133.另外,本发明所述方法的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
134.另外,本发明所述的方法的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本技术的方法和/或技术方案。而调用本发明所述方法的程序指令,可被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。
135.作为一种实施例,本发明还提供一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述的多个实施例的方法和/或技术方案。
136.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本技术所必须的。
137.最后,需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
138.以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1