CN116920410A - 虚拟对象的运动方法、装置、介质及电子设备 - Google Patents
虚拟对象的运动方法、装置、介质及电子设备 Download PDFInfo
- Publication number
- CN116920410A CN116920410A CN202310892291.9A CN202310892291A CN116920410A CN 116920410 A CN116920410 A CN 116920410A CN 202310892291 A CN202310892291 A CN 202310892291A CN 116920410 A CN116920410 A CN 116920410A
- Authority
- CN
- China
- Prior art keywords
- transformation
- virtual object
- determining
- updated
- motion
- 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
Links
- 230000033001 locomotion Effects 0.000 title claims abstract description 167
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000009466 transformation Effects 0.000 claims abstract description 453
- 238000012545 processing Methods 0.000 claims abstract description 51
- 238000006243 chemical reaction Methods 0.000 claims description 70
- 230000008569 process Effects 0.000 claims description 34
- 238000006073 displacement reaction Methods 0.000 claims description 21
- 238000000844 transformation Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 16
- 230000006870 function Effects 0.000 description 12
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 10
- 238000004088 simulation Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 239000011159 matrix material Substances 0.000 description 8
- 241000959638 Geastrum saccatum Species 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 230000001131 transforming effect Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000011426 transformation method Methods 0.000 description 3
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 239000002023 wood Substances 0.000 description 2
- 238000013475 authorization Methods 0.000 description 1
- 238000005314 correlation function Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/55—Controlling game characters or game objects based on the game progress
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/6009—Methods for processing data by generating or executing the game program for importing or creating game content, e.g. authoring tools during game development, adapting content to different platforms, use of a scripting language to create content
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/63—Methods for processing data by generating or executing the game program for controlling the execution of the game in time
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Human Computer Interaction (AREA)
- Processing Or Creating Images (AREA)
Abstract
本公开涉及一种虚拟对象的运动方法、装置、介质及电子设备,所述方法包括:获取虚拟场景中进行变换处理对应的目标对象集;确定变换处理对应的变换步数;在每一变换步数对应的变换中,根据树结构确定目标对象集中的待更新的更新虚拟对象,并确定更新虚拟对象在变换中的运动参数的变换量,更新虚拟对象初始为根节点对应的虚拟对象;基于变换步数下的变换量,对运动参数的参数值进行更新;若在目标对象集的树结构中、更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并返回执行确定更新虚拟对象在变换中的运动参数的变换量的步骤,直至目标对象集中的每一虚拟对象对应的运动参数进行变换。
Description
技术领域
本公开涉及计算机技术领域,具体地,涉及一种虚拟对象的运动方法、装置、介质及电子设备。
背景技术
在网络游戏中,经常需要对虚拟场景中的虚拟对象的运动Transform进行变换,比如将虚拟对象绕自身坐标系的X轴进行顺时针旋转30度,该运动的变化可以是瞬间完成的,且可以通过游戏引擎的相关函数确定。如果该运动的变换需要持续一定时长,相关技术中则可以中间过程进行插值,以保证变换的连续性。
如游戏场景中,进行运动变换的虚拟对象包含父对象和其子对象,如存在父对象和子对象同时进行旋转,如场景中包含太阳元素和地球元素,地球元素为太阳元素的子对象,示例地,该场景下子对象的朝向不仅受自转的影响同时受绕父对象公转的影响。现有的游戏场景中,大多数限制在同一时刻作用在虚拟对象上的运动的变换只能有一个,因为多个变换同时作用时,虚拟对象的运动的最终结果具有不可预测性,因而也无法确定其在中间时刻的变换的中间值。
发明内容
提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。
第一方面,本公开提供一种虚拟对象的运动方法,所述方法包括:
获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;
确定所述变换处理对应的变换步数;
在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;
基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;
若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并返回执行所述确定所述更新虚拟对象在所述变换中的运动参数的变换量的步骤,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
第二方面,本公开提供一种虚拟对象的运动装置,所述装置包括:
获取模块,用于获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;
第一确定模块,用于确定所述变换处理对应的变换步数;
第二确定模块,用于在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;
更新模块,用于基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;
第三确定模块,用于若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并触发所述第二确定模块确定所述更新虚拟对象在所述变换中的运动参数的变换量,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
第三方面,本公开提供一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现第一方面所述方法的步骤。
第四方面,本公开提供一种电子设备,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现第一方面所述方法的步骤。
在上述技术方案中,获取虚拟场景中进行变换处理对应的目标对象集,针对变换处理可以将其切分为分步更新的方式,以确定所述变换处理对应的变换步数。之后在每一步变换中,以根节点的虚拟对象开始通过逐层级的更新方式对目标对象集中的虚拟对象的运动参数进行变换,以实现目标对象集中的虚拟对象运动的变换。由此,本公开中可以在同一时刻对同一虚拟对象的运动的变换处理进行叠加,无需限制变换的数量,从而可以实现更复杂的变换效果。同时由于使用按目标对象集中的虚拟对象同步、且关联变换的虚拟对象之间固定顺序和固定步长进行变换模拟的方式,可以使得在多个客户端可以模拟出与服务端一致的变换结果,使得本公开的方法可以应用于状态同步的游戏应用中,也可以获得如同帧同步一样的准确性。客户端也可以基于目标对象集中的关联变换***虚拟对象的Transform变换,无需等待服务器计算完成后发送的快照信息,也可以有效降低网络延时带来的影响。另外,可以基于该目标对象集中的虚拟对象运动的变换自动实现各个客户端之间的变换同步,有效节省大量中间快照的更新,从而极大的减少网络带宽的使用。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。在附图中:
图1是基于本公开的一种实施方式提供的虚拟对象的运动方法的流程示意图。
图2是关联变换的虚拟对象之间的示意图。
图3是基于本公开的一种实施方式提供的对象树的示意图。
图4是基于本公开的一种实施方式提供的虚拟对象的运动装置的框图。
图5示出了适于用来实现本公开实施例的电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
可以理解的是,在使用本公开各实施例公开的技术方案之前,均应当依据相关法律法规通过恰当的方式对本公开所涉及个人信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
例如,在响应于接收到用户的主动请求时,向用户发送提示信息,以明确地提示用户,其请求执行的操作将需要获取和使用到用户的个人信息。从而,使得用户可以根据提示信息来自主地选择是否向执行本公开技术方案的操作的电子设备、应用程序、服务器或存储介质等软件或硬件提供个人信息。
作为一种可选的但非限定性的实现方式,响应于接收到用户的主动请求,向用户发送提示信息的方式例如可以是弹窗的方式,弹窗中可以以文字的方式呈现提示信息。此外,弹窗中还可以承载供用户选择“同意”或者“不同意”向电子设备提供个人信息的选择控件。
可以理解的是,上述通知和获取用户授权过程仅是示意性的,不对本公开的实现方式构成限定,其它满足相关法律法规的方式也可应用于本公开的实现方式中。
同时,可以理解的是,本技术方案所涉及的数据(包括但不限于数据本身、数据的获取或使用)应当遵循相应法律法规及相关规定的要求。
如上文所述,相关技术中难以实现同一时刻作用在同一虚拟对象的运动的多个变换。除此之外,申请人经过研究发现,在对游戏场景状态进行网络同步时,采用状态同步的游戏客户端通常不进行变换模拟,而是直接利用服务器下发的该虚拟对象前后两次的快照来做中间插值。
在该过程中,服务端发送快照的频率一般会低于客户端的渲染频率,一方面客户端无法准确还原中间状态,而只能按照固定的直线插值或者指数插值等模型来近似还原,另一方面客户端只能依赖服务器下发的快照来进行插值,所以客户端的状态相对于服务器会存在网络延迟。而针对采用帧同步的游戏,对应场景中的虚拟对象的运动Transform的变换模拟通常在客户端进行,而针对多个变换同时作用于同一虚拟对象的情况下,不同客户端中对该多个变换的处理方式可能不同,难以保证多个客户端中显示的该虚拟对象的运动的变换的中间过程保持一致。基于上述问题,本公开提供以下实施例。
如图1所示,为基于本公开的一种实施方式提供的虚拟对象的运动方法的流程示意图,如图1所示,所述方法可以包括:
在步骤11中,获取虚拟场景中进行变换处理对应的目标对象集,其中,目标对象集中包括在虚拟场景中的关联变换的虚拟对象以及每一虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储。
其中,虚拟场景可以是终端显示界面中的相关场景,如游戏环境场景等。关联变换用于表示虚拟场景中的不同虚拟对象之间的变换相关联,如图2所示,场景中可以包含太阳、地球和月球,其中,地球绕着太阳转动,则太阳的变换与地球的变换相关联,月球绕着地球转动,则地球的变换与月球的变换相关联。在一种可能的实施例中,目标对象集中可以包含太阳、地球和月球,并且基于以上关系,可以确定该目标对象集的树结构表示为太阳为地球的父节点,地球为月球的父节点。变换信息用于表示对虚拟对象的运动进行变换的配置信息,如可以包含进行变换处理的参数,以及参数的变换方式等。示例地,本公开的方法可以应用于客户端也可以应用于服务器,若所述方法应用于客户端,则该目标对象集可以从服务器端获取,若所述方法应用于服务器,则可以由服务器基于后台的相关配置信息进行生成。
在步骤12中,确定变换处理对应的变换步数。
其中,如上文所示,运动的变换需要持续一定时长,则在本公开实施例中可以通过多步变换的模拟以实现对持续性运动的模拟。示例地,可以预设变换对应的步长,可以根据实际应用场景对步长进行设置,在服务器和客户端中该步长均是相同的。如可以设置步长为0.02s,则变换处理为1s的运动的话,其可以拆分为50步的变换。
在步骤13中,在每一变换步数对应的变换中,根据树结构确定目标对象集中的待更新的更新虚拟对象,并确定更新虚拟对象在变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象。
其中,在目标对象集中可以先从根节点开始遍历,则在变换过程中可以先进行父节点的虚拟对象的运动的变换,后进行子节点的虚拟对象的运动的变换,以保证相互关联的各个虚拟对象之间的变换一致性。
接上述示例,在当前变换步数中,可以初始将目标对象集中的太阳确定为更新虚拟对象,进行确定太阳在变换中的运动参数的变换量。其中,运动参数可以包含旋转参数Rotate、位移参数Position和缩放参数Scale中的至少一者,更新虚拟对象的运动参数可以基于虚拟对象的变换信息确定。若运动参数不止一个,则可以针对每一运动参数分别进行处理,每一运动参数的处理方式是相同的。
在步骤14中,基于变换步数下的变换量,对运动参数的参数值进行更新。在该实施例中可以基于当前的变换步数对应的变换量,对该变换步数下的变换过程进行模拟更新,以获得经过该变换步数后的目标对象集中的虚拟对象的参数。
作为示例,在所述运动参数为多个且包含旋转参数时,所述基于所述变换步数下的变换量,对所述运动参数的参数值进行更新,包括:
基于所述变换步数下的旋转参数的变换量,对所述旋转参数的参数值进行更新;之后基于所述变换步数下的除所述旋转参数的其他参数的变换量,对该其他参数的参数值进行更新。
在本公开实施例中,若运动参数包含旋转参数和位移参数,则在每一步的变换中,可以先基于旋转参数的变换量进行更新,更新之后再基于位移参数的变换量进行更新。若运动参数包含旋转参数、位移参数和缩放参数,则在每一步的变换中,可以先基于旋转参数的变换量进行更新,更新之后再基于位移参数的变换量进行更新,更新之后再基于缩放参数的变换量进行更新。通过限定不同的运动参数之间的变换顺序,以提高变换的一致性。
在步骤15中,若在目标对象集的树结构中、更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并返回执行确定更新虚拟对象在变换中的运动参数的变换量的步骤13,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换,当前变换步数完成。
作为示例,根据该下一层级的虚拟对象确定新的更新虚拟对象可以是将下一层级的虚拟对象中的每一虚拟对象均作为该更新虚拟对象,以对每一更新虚拟对象分别执行上述步骤13和步骤14,以对该层级下的各个虚拟对象的运动进行变换。例如,该目标对象集中还包括土星,则在该步骤中对太阳对应的参数进行变换后,下一层级的虚拟对象包括土星和地球,则可以将土星和地球分别作为更新虚拟对象,以分别对土星和地球进行变换。进一步地,在对土星和地球进行变换之后,目标对象集中更新虚拟对象存在下一层级的虚拟对象为月球,则可以将月球进一步作为新的更新虚拟对象,以在该步骤中对月球对应的参数进行变换,由此,可以实现该变换步数下目标对象集中的各个虚拟对象的运动变换。
其中,每一变换步数下的变换过程处理方式是相同的,则可以在执行时全部步数的变换后,获得经过变换处理后的目标对象集中的虚拟对象的运动参数的值,以基于此时的运动参数的值形成图像帧。
由上述可知,在第1步的变换中可以通过先对父节点的虚拟对象进行变换之后对子节点的虚拟对象进行变换的方式对目标对象集中的每一虚拟对象均进行变换。则在第1步变换完成后可以执行第2步变换,变换的实现方式与第1步的实现方式相同,其中第2步变换中所需的参数为基于第1步变换后所得的参数,基于变换步数控制不同端中需要进行变换模拟的次数,保证各个端中显示的一致性,对多端中场景显示中的虚拟对象的运动变换的进行一致模拟,同时也可以提高变换的精准度。
在上述技术方案中,获取虚拟场景中进行变换处理对应的目标对象集,针对变换处理可以将其切分为分步更新的方式,以确定所述变换处理对应的变换步数。之后在每一步变换中,以根节点的虚拟对象开始通过逐层级的更新方式对目标对象集中的虚拟对象的运动参数进行变换,以实现目标对象集中的虚拟对象运动的变换。由此,本公开中可以在同一时刻对同一虚拟对象的运动的变换处理进行叠加,无需限制变换的数量,从而可以实现更复杂的变换效果。同时由于使用按目标对象集中的虚拟对象同步、且关联变换的虚拟对象之间固定顺序和固定步长进行变换模拟的方式,可以使得在多个客户端可以模拟出与服务端一致的变换结果,使得本公开的方法可以应用于状态同步的游戏应用中,也可以获得如同帧同步一样的准确性。客户端也可以基于目标对象集中的关联变换***虚拟对象的Transform变换,无需等待服务器计算完成后发送的快照信息,也可以有效降低网络延时带来的影响。另外,可以基于该目标对象集中的虚拟对象运动的变换自动实现各个客户端之间的变换同步,有效节省大量中间快照的更新,从而极大的减少网络带宽的使用。
在一种可能的实施例中,所述目标对象集中的虚拟对象通过以下方式确定:
获取所述虚拟场景中的变换处理的待变换的虚拟对象和所述变换处理的类型,其中可以将虚拟场景中的各个虚拟对象展示在配置界面,则可以通过后台用户在配置界面中对虚拟对象进行配置,则可以将配置了变换信息的虚拟对象作为该待变换的虚拟对象。变换处理的类型可以包含新增和删除。
将所述待变换的虚拟对象与预置的对象树中的节点进行匹配,确定与所述待变换的虚拟对象对应的匹配节点,其中,所述对象树中包含多个预置的虚拟对象之间的以树结构表示的关联关系。
其中,对象树为技术人员基于实际应用场景预先绘制的虚拟场景之间的关联关系。示例地,该对象树可以表示如图3所示,其中可以包含太阳、月球、地球、土星、木星,太阳对应于根节点,其包含子节点地球、土星、木星,地球包含子节点月球。其中该对象树可以包含一个或多个树结构。
若所述类型为新增,则根据所述对象树,将所述待变换的虚拟对象和所述待变换的虚拟对象的变换信息添加至所述匹配节点的根节点对应的目标对象集中;
若所述类型为删除,则根据所述对象树,将所述待变换的虚拟对象的变换信息从所述匹配节点的根节点对应的目标对象集中删除。
若待变换的虚拟对象为地球,其变换处理的类型为新增,则其可以与对象树中的节点进行匹配,节点B为其对应的匹配节点,匹配节点对应的根节点为节点A即太阳,则可以将地球和地球对应的变换信息添加至太阳对应的目标对象集中。在添加时若地球已经添加至该目标对象集中,可以直接将其变换信息添加至目标对象集中,以避免虚拟对象的重复添加。
若所述目标对象集中包含土星的变换,之后接收到一个新的变换处理,该新的待变换处理中待变换的虚拟对象为土星,变换处理的类型为删除,即该新的变换处理为删除土星的变换信息,则可以基于土星和对象树进行匹配,确定节点D为其对应的匹配节点,则可以确定太阳对应的目标对象集为其所属的目标对象集,则可以将土星对应的变换信息从太阳对应的目标对象集中删除。
其中上述生成过程可以在服务器中生成,且目标对象集更新后服务器可以向各个客户端发送更新后的目标对象集,以使得客户端能够基于更新后的目标对象集进行相应的变换处理,保证每一客户端中得出与服务端中一致的变换结果。同时基于上述方式可以在目标对象集进行更新的情况下由服务器和客户端进行通信以同步,无需服务器多次向客户端发送快照,在各端中分别进行计算以自动实现多端之间的变换同步,有效节省大量中间快照的更新,从而极大的减少网络带宽的使用,提升虚拟对象运动变换的同步效率。
在一种可能的实施例中,所述确定所述变换处理对应的变换步数的实现方式如下,该步骤可以包括:
获取所述目标对象集的虚拟对象的最近显示帧对应的第一时刻,以及所述目标对象集中的虚拟对象的待显示帧对应的第二时刻。
其中,由于不同的客户端的帧率可能不同,使得相同的变换在不同的客户端中通过不同数量的图像帧进行显示,则该实施例中,可以获取当前客户端中的最近显示帧对应的时刻作为该第一时刻,并基于当前客户端的帧率,确定待显示帧对应的时刻,作为第二时刻。示例地,若第一时刻为t1,客户端C1的帧率表示1s刷新60帧,则可以确定待显示帧对应的第二时刻为t1+1/60。若客户端C2的帧率表示1s刷新30帧,若第一时刻相同,则客户端C2中待显示帧对应的第二时刻表示为t1+1/30。
根据所述第一时刻、所述第二时刻和变换步长,确定所述变换步数。
相应地,可以将第一时刻和第二时刻之间的时间差与变换步长的比值,确定为该变换步数。
由此,通过上述技术方案,在对虚拟场景中的虚拟对象的运动进行变换时,可以基于其所处的客户端或服务器的变换过程确定其所需要进行变换的步数,从而可以保证在各端中虚拟对象运动变换处理的一致性,可以使得在多端中模拟出一致的变换结果,同时与相关技术中进行插值处理相较,通过上述确定变换步数的方式,也可以一定程度上提高虚拟对象运动变换过程的流畅度和合理性,以便于为用户展示精准的画面显示效果。
在一种可能的实施例中,所述变换包括多个子变换,所述确定所述更新虚拟对象在所述变换中的运动参数的变换量可以包括:
针对每一所述子变换,确定所述更新虚拟对象在所述子变换中的运动参数的变换值。
示例地,以运动参数为旋转为例进行举例说明。所述变换可以包括第一子变换,如虚拟对象绕自身坐标系的X轴进行顺时针旋转30度,以及第二子变换,如虚拟对象绕世界坐标系的Y轴顺时针旋转60度。则该实施例中,可以分别计算第一子变换中每一变换步数对应的变换量,以及计算第二子变换中每一变换步数对应的变换量。
其中,若该旋转过程为匀速旋转,则每一步的旋转量均相等。示例地,变换步数为6步,则第一子变换中每一变换步数下的变换值为虚拟对象绕自身坐标系的X轴进行顺时针旋转5度,第二子变换中每一变换步数下的变换值为虚拟对象绕世界坐标系的Y轴顺时针旋转10度。
作为另一示例,也可以根据游戏场景中的旋转函数确定每一变换步数下的旋转角度。其中,旋转函数可以是游戏引擎中所设置的,在此不做限定。其可以根据每一变换步对应的时间和该旋转函数确定其该变换步下旋转的角度。在确定出相应的旋转角度后,可以基于Vector3()将其转换为向量表示,并基于Quaternion.Euler()将欧拉角转化为四元数,将该四元数作为该变换值,其中,Vector3()和Quaternion.Euler()为本领域中的函数表示,在此不做限定。
基于所述变换值与上一变换步数对应的变换值,确定所述运动参数的变换量。
接上述示例,可以通过如下方式确定第一子变换中第n步的旋转的变换量xn-1 -1*xn,其中,xn-1 -1为第一子变换中第n-1步下的旋转的变换值的逆,xn第一子变换中第n步下的旋转的变换值。通过如下方式确定第二子变换中第n步的旋转的变换量(yn -1*yn-1),其中,yn -1为第二子变换中第n步下的旋转的变换值的逆,yn-1为第二子变换中第n步下的旋转的变换值。其中上述乘法的计算方式可以基于本领域中沿X轴和Y轴旋转过程中的四元数乘法的通用方式进行计算,在此不再赘述。
由此,通过上述技术方案,可以将每一变换步数下的变换量进行表征,从而通过多步模拟变换的方式对虚拟对象的运动过程进行准确的模拟,保证同一虚拟对象的运动在多个客户端和服务器中具有一致的变换过程,保证虚拟对象运动的变换在多端下的同步。
在一种可能的示例中,可以对虚拟对象施加一个变换,如上文所述,可以是虚拟对象绕自身坐标系的X轴进行顺时针旋转30度的局部变换。则可以通过如下公式进行确定:
LocalRotationn=LocalRotation0*(x0 -1*x1)*(x1 -1*x2)...*(xn-1 -1*xn)
=LocalRotation0*xn
xn=Quaternion.Euler(newVector3(30,0,0))
其中,LocalRotatin0用于表示最近显示帧中的本地朝向,x0 -1用于表示该变换处理中初始的变换值的逆,x1用于表示该变换处理中变换步数为1时对应的变换值,即第1步变换对应的变换值,x2表示该变换处理中第2步变换对应的变换值,其他以此类推,不再赘述。
又如,为虚拟对象施加的单一的变换也可以是绕世界坐标系的Y轴顺时针旋转60度的世界变换。则可以通过如下公式进行确定:
WorldRotationn=(yn*yn-1 -1)...(y2*y1 -1)*(y1*y0 -1)*WorldRotation0
=yn*WorldRotation0
yn=Quaternion.Euler(newVector3(0,60,0))
其中,WorldRotation0用于表示最近显示帧中的世界朝向,y0 -1用于该变换处理中初始的变换值的逆,y1用于表示该变换处理中变换步数为1时对应的变换值,即第1步变换对应的变换值,y2表示该变换处理中第2步变换对应的变换值,其他以此类推,不再赘述。
在一种可能的实施例中,可以同时对虚拟对象施加多个变换,所述变换包括局部变换和世界变换,其中,如上文所述旋转参数的变换示例,局部变换用于表示在所述虚拟对象的自身坐标系中的旋转变换,所述世界变换用于表示在所述虚拟对象对应的世界坐标系中的旋转变换。
相应地,所述基于所述变换步数下的变换量,对所述运动参数的参数值进行更新,可以包括:
基于所述变换步数下的变换量,在更新虚拟对象对应的局部坐标系中进行局部变换,获得所述更新虚拟对象的运动参数的局部变换值。
在本公开中实施例中,若同一时刻对同一虚拟对象施加多个变换,则可以首先计算该虚拟对象的局部变换,如上文所述示例,可以先计算虚拟对象绕自身坐标系的X轴进行顺时针旋转的局部变换。
示例地,该步骤中,可以基于当前的变换步数下局部变换对应的变换量进行局部更新,如在第1个变换步中,可以通过如下方式确定出的虚拟对象进行旋转的局部变换值表示为LocalRotatin0*(x0 -1*x1)。
若该虚拟对象对应于多个局部变换,则可以根据每一局部变换对应的添加时间的先后顺序依次进行计算。
之后,基于所述变换步数下的变换量和所述运动参数的局部变换值,在所述更新虚拟对象对应的世界坐标系中进行世界变换,以获得所述运动参数的目标值,其中,所述目标值包含所述运动参数在所述局部坐标系和所述世界坐标系中的值,如上文实施例,该目标值则可以包含当前的变换步数进行变换后所得的局部朝向和世界朝向。
由此,在该实施例中,在虚拟对象运动中的变换包含局部变换和世界变换时,可以先进行局部变换后进行世界变换,一方面使得该变换更贴近真实场景,另一方面也可以控制多个变换之间的变换顺序,保证在虚拟对象运动中具有多个变换时在多端设备中具有一致的执行顺序,保证多端显示的一致性。
作为示例,所述基于所述变换步数下的变换量和所述运动参数的局部变换值,在所述更新虚拟对象对应的世界坐标系中进行世界变换,以获得所述运动参数的目标值的实现方式可以包括:
基于所述变换步数下的所述世界变换的变换量和所述运动参数的局部变换值,在所述更新虚拟对象的世界坐标系中进行世界变换,获得在所述世界坐标系下所述运动参数的目标值。
接上文所述示例,基于上文所述局部变换和世界变换的叠加,可以先计算局部变换,则在局部变换中的第1个变换步,确定出的虚拟对象进行旋转的局部变换值表示为LocalRotatin0*(x0 -1*x1)。之后可以对上述世界变换进行计算,则在第1步变换中,可以通过以下公式进行世界变换,确定在所述世界坐标系下所述运动参数的目标值:
WorldRotation1=(y1*y0 -1)*ParentWorldRotation*LocalRotatin0*(x0 -1*x1)
其中,ParentWorldRotation用于表示更新虚拟对象对应的父节点的虚拟对象的世界朝向,当更新虚拟对象为根节点时,其取值为默认的标准量,标准量乘以任何旋转都等于旋转自身,由此可以确定在经过第1个变换步后虚拟对象在所述世界坐标系下所述运动参数的目标值WorldRotation1,该示例中为在世界坐标系中的世界朝向。
相应地,第n步变换所得的世界坐标系下所述旋转参数的目标值WorldRotationn可以表示如下:
WorldRotationn=(yn*yn-1 -1)*ParentWorldRotation*LocalRotatinn-1*(xn-1 -1*xn)
之后,基于所述世界坐标系下所述运动参数的目标值,确定所述局部坐标系下所述运动参数的目标值。
作为示例,在所述运动参数为旋转参数时,可以通过以下公式,基于所述世界坐标系下所述运动参数的目标值,确定所述局部坐标系下所述运动参数的目标值:
LocalRotationn=Quaternion.Inverse(ParentWorldRotation)*WorldRotationn
其中,LocalRotationn用于表示第n步变换所得的在局部坐标系下所述旋转参数的目标值,在该实施例中,其可以表示局部朝向,即虚拟对象的朝向相对于父坐标系的朝向;
Quaternion.Inverse()用于表示计算四元数的逆的函数;
ParentWorldRotation用于表示所述更新虚拟对象的父节点在世界坐标系下所述旋转参数的目标值。
由此,通过上述技术方案,对于单个虚拟对象可以按照先局部变换后世界变换的方式,确定出运动参数在世界坐标系下的目标值之后,由于虚拟对象在世界坐标系下的旋转朝向WorldRotation与其在父坐标系下的局部朝向LocalRotation有关联,则可以进一步反推出其在局部坐标系下的目标值,由此,可以提高对虚拟对象进行局部变换和世界变换的叠加时与实际场景之间的匹配度,并保证多端变换的同步,提高画面显示的流畅度和效率,提升用户体验。
其中,需要进行说明的是,若对虚拟对象的旋转参数只进行局部变换,则在每一变换步中,可以基于上文所述单一局部变换的方式和变换量计算出该变换步所得的局部朝向,并进一步基于该局部朝向进行转换确定出该变换步对应的世界朝向。若对虚拟对象的旋转参数只进行世界变换,则在每一变换步中,可以基于上文所述单一世界变换的方式和变换量计算出该变换步所得的世界朝向,并进一步基于该世界朝向进行转换确定出该变换步对应的局部朝向。其中,上述局部朝向和世界朝向之间的转换可以通过父节点的虚拟对象的局部转世界的变换矩阵和其逆矩阵进行转换。
示例地,在所述运动参数为位移参数时,如变换为虚拟对象沿自身坐标系X轴移动30单位的局部变换,可以将变换量按照变化速率按步拆分为:
WorldPositionn=WorldPosition0+WorldRotation*((x1-x0)+(x2-x1)...+(xn-xn-1))
=WorldPosition0+WorldRotation*xnxn=Vector3(30,0,0)
其中,WorldPositionn用于表示第n步所得的虚拟对象的世界坐标。该公式中xi用于表示第i步变换中的变换值,xn-xn-1用于表示第n步的位置参数的局部坐标中的变换量,其他以此类推,不再赘述。WorldRotation用于表示在当前的变换步中确定出的世界朝向,若存在旋转参数的变换,则该世界朝向则是在当前变换步中确定出的变换后的世界朝向,若没有旋转参数的变换,则可以使用当前变换步中的世界朝向。
示例地,在本公开中所涉及的对位移参数的局部变换,通常是表示沿着自身坐标系的某个轴来移动,这种移动方式跟其自身的朝向有所关联,基于此,在该实施例中为简化局部坐标的计算方式,则可以先计算对位移参数进行局部变换后的世界坐标,之后再基于该世界坐标反算出相应的局部坐标。其中基于该世界坐标确定出局部坐标的具体转换方式在下文说明。其中,该局部坐标用于表示该虚拟对象在父坐标系下相对于父坐标系原点的位置。
又如,为虚拟对象施加的单一的变换也可以是将虚拟对象沿世界坐标系Y轴移动60单位的世界变换。则可以通过如下公式进行确定:
WorldPositionn=WorldPosition0+(y1-y0)+(y2-y1)...+(yn-yn-1)
=WorldPosition0+yn
yn=Vector3(0,60,0)
其中,WorldPositionn用于表示第n步所得的虚拟对象的世界坐标,该公式中yi用于表示第i步变换中的变换值,yn-yn-1用于表示第n步的位移参数的世界坐标中的变换量,其他以此类推,不再赘述。
如果将上述两个位移参数的变换同时施加在虚拟对象上,那么虚拟对象经过第一步叠加后的坐标为:
WorldPosition1=(y1-y0)+WorldPosition0+WorldRotation1*(x1-x0)
LocalPosition1=ParentLocalToWorldMatrix.inverse.MultiplyVector(WorldPosition1)
其中,LocalPosition1用于表示第1步所得的虚拟对象的局部坐标。ParentLocalToWorldMatrix.inverse是父节点的虚拟对象的局部转世界的变换矩阵的逆矩阵,以将虚拟对象的世界坐标转为该虚拟对象的父坐标系下的局部坐标,从而可以实现基于世界坐标转换得出局部坐标。其中,在计算上述位移变换时,可以忽略ParentLocalToWorldMatrix.inverse矩阵的缩放影响,以避免对向量大小产生影响。
依此类推,经过最后第n步后的该虚拟对象的世界坐标和局部坐标分别为:
WorldPositionn=(yn-yn-1)+WorldPositionn-1+WorldRotationn*(xn-xn-1)
LocalPositionn=ParentLocalToWorldMatrix.inverse.MultiplyVector(WorldPositionn)
其中,需要进行说明的是,若对虚拟对象的位移参数只进行局部变换,则在每一变换步中,可以基于上文所述单一局部变换的方式,结合世界朝向和局部变换的变换量计算出该变换步所得的世界坐标,并进一步基于该世界坐标进行转换确定出该变换步对应的局部坐标。若对虚拟对象的位移参数只进行世界变换,则在每一变换步中,可以基于上文所述单一世界变换的方式和变换量计算出该变换步所得的世界位移,并进一步基于该世界位移进行转换确定出该变换步对应的局部位移。其中,上述局部位移和世界位移之间的转换可以通过父节点的虚拟对象的局部转世界的变换矩阵和其逆矩阵进行转换。
示例地,在所述运动参数为缩放参数时,如变换为虚拟对象沿自身坐标系的X轴缩放30倍的局部变换,则可以将缩放量按照变化速率按步拆分为:
LocalScalen=LocalScale0+(x1-x0)+(x2-x1)...+(xn-xn-1)
=LocalScale0+xn,
xn=Vector3(30,0,0)
其中LocalScalen为第n步所得的虚拟对象的局部缩放。该公式中xi用于表示第i步变换中的变换值,xn-xn-1用于表示第n步的缩放参数的局部缩放中的变换量,其他以此类推,不再赘述。
如果将上述局部变换的缩放参数施加在虚拟对象上,那么虚拟对象经过第一步后虚拟对象的局部缩放可以表示为:
LocalScale1=LocalScale0+(x1-x0)。
相应地,后续的步骤可以基于拆分的公式以此类推,在此不再赘述。
由此,通过上述方式可以在每一步变换对相应的运动参数进行更新。
本公开还提供一种虚拟对象的运动装置,如图4所示,所述装置10包括:
获取模块100,用于获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;
第一确定模块200,用于确定所述变换处理对应的变换步数;
第二确定模块300,用于在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;
更新模块400,用于基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;
第三确定模块500,用于若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并触发所述第二确定模块确定所述更新虚拟对象在所述变换中的运动参数的变换量,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
可选地,所述第一确定模块包括:
获取子模块,用于获取所述目标对象集的虚拟对象的最近显示帧对应的第一时刻,以及所述目标对象集中的虚拟对象的待显示帧对应的第二时刻;
第一确定子模块,用于根据所述第一时刻、所述第二时刻和变换步长,确定所述变换步数。
可选地,所述变换包括多个子变换,所述第二确定模块包括:
第二确定子模块,用于针对每一所述子变换,确定所述更新虚拟对象在所述子变换中的运动参数的变换值;
第三确定子模块,用于基于所述变换值与上一变换步数对应的变换值,确定所述运动参数的变换量。
可选地,所述变换包括局部变换和世界变换;
所述更新模块包括:
第一变换子模块,用于基于所述变换步数下的变换量,在更新虚拟对象对应的局部坐标系中进行局部变换,获得所述更新虚拟对象的运动参数的局部变换值;
第二变换子模块,用于基于所述变换步数下的变换量和所述运动参数的局部变换值,在所述更新虚拟对象对应的世界坐标系中进行世界变换,以获得所述运动参数的目标值,其中,所述目标值包含所述运动参数在所述局部坐标系和所述世界坐标系中的值。
可选地,所述第二变换子模块包括:
第一处理子模块,用于基于所述变换步数下的所述世界变换的变换量和所述运动参数的局部变换值,在所述更新虚拟对象的世界坐标系中进行世界变换,获得在所述世界坐标系下所述运动参数的目标值;
第二处理子模块,用于基于所述世界坐标系下所述运动参数的目标值,确定所述局部坐标系下所述运动参数的目标值。
可选地,所述运动参数包括旋转参数、缩放参数和位移参数中的至少一者;
在所述运动参数为多个且包含旋转参数时,所述更新模块包括:
第一更新子模块,用于基于所述变换步数下的旋转参数的变换量,对所述旋转参数的参数值进行更新;
第二更新子模块,用于基于所述变换步数下的除所述旋转参数的其他参数的变换量,对该其他参数的参数值进行更新。
可选地,所述目标对象集中的虚拟对象通过以下方式确定:
获取所述虚拟场景中的变换处理的待变换的虚拟对象和所述变换处理的类型;
将所述待变换的虚拟对象与预置的对象树中的节点进行匹配,确定与所述待变换的虚拟对象对应的匹配节点,其中,所述对象树中包含多个预置的虚拟对象之间的以树结构表示的关联关系;
若所述类型为新增,则根据所述对象树,将所述待变换的虚拟对象和所述待变换的虚拟对象的变换信息添加至所述匹配节点的根节点对应的目标对象集中;
若所述类型为删除,则根据所述对象树,将所述待变换的虚拟对象的变换信息从所述匹配节点的根节点对应的目标对象集中删除。
下面参考图5,其示出了适于用来实现本公开实施例的电子设备(例如终端设备或服务器)600的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图5示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图5所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图5示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;确定所述变换处理对应的变换步数;在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并返回执行所述确定所述更新虚拟对象在所述变换中的运动参数的变换量的步骤,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取模块还可以被描述为“获取虚拟场景中进行变换处理对应的目标对象集的模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上***(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
根据本公开的一个或多个实施例,示例1提供了一种虚拟对象的运动方法,其中,所述方法包括:
获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;
确定所述变换处理对应的变换步数;
在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;
基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;
若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并返回执行所述确定所述更新虚拟对象在所述变换中的运动参数的变换量的步骤,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
根据本公开的一个或多个实施例,示例2提供了示例1的方法,其中,
所述确定所述变换处理对应的变换步数,包括:
获取所述目标对象集的虚拟对象的最近显示帧对应的第一时刻,以及所述目标对象集中的虚拟对象的待显示帧对应的第二时刻;
根据所述第一时刻、所述第二时刻和变换步长,确定所述变换步数。
根据本公开的一个或多个实施例,示例3提供了示例1的方法,其中,
所述变换包括多个子变换,所述确定所述更新虚拟对象在所述变换中的运动参数的变换量,包括:
针对每一所述子变换,确定所述更新虚拟对象在所述子变换中的运动参数的变换值;
基于所述变换值与上一变换步数对应的变换值,确定所述运动参数的变换量。
根据本公开的一个或多个实施例,示例4提供了示例1的方法,其中,所述变换包括局部变换和世界变换;
所述基于所述变换步数下的变换量,对所述运动参数的参数值进行更新,包括:
基于所述变换步数下的变换量,在更新虚拟对象对应的局部坐标系中进行局部变换,获得所述更新虚拟对象的运动参数的局部变换值;
基于所述变换步数下的变换量和所述运动参数的局部变换值,在所述更新虚拟对象对应的世界坐标系中进行世界变换,以获得所述运动参数的目标值,其中,所述目标值包含所述运动参数在所述局部坐标系和所述世界坐标系中的值。
根据本公开的一个或多个实施例,示例5提供了示例4的方法,其中,所述基于所述变换步数下的变换量和所述运动参数的局部变换值,在所述更新虚拟对象对应的世界坐标系中进行世界变换,以获得所述运动参数的目标值,包括:
基于所述变换步数下的所述世界变换的变换量和所述运动参数的局部变换值,在所述更新虚拟对象的世界坐标系中进行世界变换,获得在所述世界坐标系下所述运动参数的目标值;
基于所述世界坐标系下所述运动参数的目标值,确定所述局部坐标系下所述运动参数的目标值。
根据本公开的一个或多个实施例,示例6提供了示例1的方法,其中,所述运动参数包括旋转参数、缩放参数和位移参数中的至少一者;
在所述运动参数为多个且包含旋转参数时,所述基于所述变换步数下的变换量,对所述运动参数的参数值进行更新,包括:
基于所述变换步数下的旋转参数的变换量,对所述旋转参数的参数值进行更新;
基于所述变换步数下的除所述旋转参数的其他参数的变换量,对该其他参数的参数值进行更新。
根据本公开的一个或多个实施例,示例7提供了示例1的方法,其中,所述目标对象集中的虚拟对象通过以下方式确定:
获取所述虚拟场景中的变换处理的待变换的虚拟对象和所述变换处理的类型;
将所述待变换的虚拟对象与预置的对象树中的节点进行匹配,确定与所述待变换的虚拟对象对应的匹配节点,其中,所述对象树中包含多个预置的虚拟对象之间的以树结构表示的关联关系;
若所述类型为新增,则根据所述对象树,将所述待变换的虚拟对象和所述待变换的虚拟对象的变换信息添加至所述匹配节点的根节点对应的目标对象集中;
若所述类型为删除,则根据所述对象树,将所述待变换的虚拟对象的变换信息从所述匹配节点的根节点对应的目标对象集中删除。
根据本公开的一个或多个实施例,示例8提供了一种虚拟对象的运动装置,所述装置包括:
获取模块,用于获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;
第一确定模块,用于确定所述变换处理对应的变换步数;
第二确定模块,用于在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;
更新模块,用于基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;
第三确定模块,用于若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并触发所述第二确定模块确定所述更新虚拟对象在所述变换中的运动参数的变换量,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
根据本公开的一个或多个实施例,示例9提供了一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理装置执行时实现示例1-7中任一项所述方法的步骤。
根据本公开的一个或多个实施例,示例10提供了一种电子设备,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现示例1-7中任一项所述方法的步骤。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
Claims (10)
1.一种虚拟对象的运动方法,其特征在于,所述方法包括:
获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;
确定所述变换处理对应的变换步数;
在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;
基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;
若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并返回执行所述确定所述更新虚拟对象在所述变换中的运动参数的变换量的步骤,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
2.根据权利要求1所述的方法,其特征在于,所述确定所述变换处理对应的变换步数,包括:
获取所述目标对象集的虚拟对象的最近显示帧对应的第一时刻,以及所述目标对象集中的虚拟对象的待显示帧对应的第二时刻;
根据所述第一时刻、所述第二时刻和变换步长,确定所述变换步数。
3.根据权利要求1所述的方法,其特征在于,所述变换包括多个子变换,所述确定所述更新虚拟对象在所述变换中的运动参数的变换量,包括:
针对每一所述子变换,确定所述更新虚拟对象在所述子变换中的运动参数的变换值;
基于所述变换值与上一变换步数对应的变换值,确定所述运动参数的变换量。
4.根据权利要求1所述的方法,其特征在于,所述变换包括局部变换和世界变换;
所述基于所述变换步数下的变换量,对所述运动参数的参数值进行更新,包括:
基于所述变换步数下的变换量,在更新虚拟对象对应的局部坐标系中进行局部变换,获得所述更新虚拟对象的运动参数的局部变换值;
基于所述变换步数下的变换量和所述运动参数的局部变换值,在所述更新虚拟对象对应的世界坐标系中进行世界变换,以获得所述运动参数的目标值,其中,所述目标值包含所述运动参数在所述局部坐标系和所述世界坐标系中的值。
5.根据权利要求4所述的方法,其特征在于,所述基于所述变换步数下的变换量和所述运动参数的局部变换值,在所述更新虚拟对象对应的世界坐标系中进行世界变换,以获得所述运动参数的目标值,包括:
基于所述变换步数下的所述世界变换的变换量和所述运动参数的局部变换值,在所述更新虚拟对象的世界坐标系中进行世界变换,获得在所述世界坐标系下所述运动参数的目标值;
基于所述世界坐标系下所述运动参数的目标值,确定所述局部坐标系下所述运动参数的目标值。
6.根据权利要求1所述的方法,其特征在于,所述运动参数包括旋转参数、缩放参数和位移参数中的至少一者;
在所述运动参数为多个且包含旋转参数时,所述基于所述变换步数下的变换量,对所述运动参数的参数值进行更新,包括:
基于所述变换步数下的旋转参数的变换量,对所述旋转参数的参数值进行更新;
基于所述变换步数下的除所述旋转参数的其他参数的变换量,对该其他参数的参数值进行更新。
7.根据权利要求1所述的方法,其特征在于,所述目标对象集中的虚拟对象通过以下方式确定:
获取所述虚拟场景中的变换处理的待变换的虚拟对象和所述变换处理的类型;
将所述待变换的虚拟对象与预置的对象树中的节点进行匹配,确定与所述待变换的虚拟对象对应的匹配节点,其中,所述对象树中包含多个预置的虚拟对象之间的以树结构表示的关联关系;
若所述类型为新增,则根据所述对象树,将所述待变换的虚拟对象和所述待变换的虚拟对象的变换信息添加至所述匹配节点的根节点对应的目标对象集中;
若所述类型为删除,则根据所述对象树,将所述待变换的虚拟对象的变换信息从所述匹配节点的根节点对应的目标对象集中删除。
8.一种虚拟对象的运动装置,其特征在于,所述装置包括:
获取模块,用于获取虚拟场景中进行变换处理对应的目标对象集,其中,所述目标对象集中包括在所述虚拟场景中的关联变换的虚拟对象以及每一所述虚拟对象的变换信息,所述目标对象集中的各个虚拟对象以树结构存储;
第一确定模块,用于确定所述变换处理对应的变换步数;
第二确定模块,用于在每一所述变换步数对应的变换中,根据所述树结构确定所述目标对象集中的待更新的更新虚拟对象,并确定所述更新虚拟对象在所述变换中的运动参数的变换量,其中,所述更新虚拟对象初始为根节点对应的虚拟对象;
更新模块,用于基于所述变换步数下的变换量,对所述运动参数的参数值进行更新;
第三确定模块,用于若在所述目标对象集的树结构中、所述更新虚拟对象存在下一层级的虚拟对象,则根据该下一层级的虚拟对象确定新的更新虚拟对象,并触发所述第二确定模块确定所述更新虚拟对象在所述变换中的运动参数的变换量,直至所述目标对象集中的每一虚拟对象对应的运动参数进行变换。
9.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理装置执行时实现权利要求1-7中任一项所述方法的步骤。
10.一种电子设备,其特征在于,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现权利要求1-7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310892291.9A CN116920410A (zh) | 2023-07-19 | 2023-07-19 | 虚拟对象的运动方法、装置、介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310892291.9A CN116920410A (zh) | 2023-07-19 | 2023-07-19 | 虚拟对象的运动方法、装置、介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116920410A true CN116920410A (zh) | 2023-10-24 |
Family
ID=88376960
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310892291.9A Pending CN116920410A (zh) | 2023-07-19 | 2023-07-19 | 虚拟对象的运动方法、装置、介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116920410A (zh) |
-
2023
- 2023-07-19 CN CN202310892291.9A patent/CN116920410A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114863214A (zh) | 图像生成模型训练、图像生成方法、装置、介质及设备 | |
CN111652675A (zh) | 展示方法、装置和电子设备 | |
WO2022033444A1 (zh) | 动态流体效果处理方法、装置、电子设备和可读介质 | |
CN111833459B (zh) | 一种图像处理方法、装置、电子设备及存储介质 | |
CN110134905B (zh) | 一种页面更新显示方法、装置、设备及存储介质 | |
CN116596748A (zh) | 图像风格化处理方法、装置、设备、存储介质和程序产品 | |
CN114234984B (zh) | 基于差分矩阵的室内定位轨迹平滑方法、***及设备 | |
US20240220406A1 (en) | Collision processing method and apparatus for virtual object, and electronic device and storage medium | |
CN116920410A (zh) | 虚拟对象的运动方法、装置、介质及电子设备 | |
CN115049537A (zh) | 图像处理方法、装置、电子设备及存储介质 | |
CN113709573B (zh) | 配置视频特效方法、装置、设备及存储介质 | |
CN111738415B (zh) | 模型同步更新方法、装置及电子设备 | |
CN114139731A (zh) | 纵向联邦学习建模优化方法、设备、介质及程序产品 | |
CN116266206A (zh) | 页面显示方法、装置和电子设备 | |
CN114066722A (zh) | 用于获取图像的方法、装置和电子设备 | |
CN112926735B (zh) | 深度强化学习模型的更新方法、装置、框架、介质及设备 | |
CN112395826B (zh) | 文字特效处理方法及装置 | |
CN116301482B (zh) | 3d空间的窗口显示方法和头戴式显示设备 | |
CN112926629B (zh) | 超参数确定方法、装置、深度强化学习框架、介质及设备 | |
CN115761248B (zh) | 图像处理方法、装置、设备及存储介质 | |
WO2023246468A1 (zh) | 视觉定位参数更新方法、装置、电子设备及存储介质 | |
CN110517341B (zh) | 视图的物理动画效果实现方法和装置 | |
CN116185201A (zh) | 扩展现实交互方法、装置、电子设备和存储介质 | |
CN115525852A (zh) | 网页的渲染方法、装置、设备及存储介质 | |
CN115619918A (zh) | 图像渲染方法、装置、设备及存储介质 |
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 |