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

数据存储方法、数据解析方法及3D模型的展示方法与流程

2022-04-27 07:21:53 来源:中国专利 TAG:

数据存储方法、数据解析方法及3d模型的展示方法
技术领域
1.本公开涉及渲染技术领域,具体涉及一种数据存储方法、数据解析方法及3d模型的展示方法。


背景技术:

2.3d模型是更接近现实,能够携带更多的信息的图像模型,但3d模型的数据量远远超过了视频及图像,并且伴随着3d建模工具以及3d扫描软件的飞速发展,3d模型的精度和细节都得到了巨大的提升,3d模型的数据量更是呈几何指数增长,这些导致了3d模型的规模和复杂程度急剧增长。另一方面,数字化技术和internet的发展与普及、3d数据的大量涌现和图形处理器的处理能力大大加强,3d电视转播以及在移动互联网上进行3d会话、3d游戏以及3d娱乐等等,己经开始步入大众视野。然而,3d模型的高数据量及高精度,必然对3d模型的数据存储方式有较高的要求,而目前已有的3d模型的数据存储方式众多,并且这些存储方式在数据存储的文件体积大小、版本兼容性以及可扩展方面都存在各种各样的问题。
3.因此,为了解决已有技术中3d模型的数据存储方式存在的上述问题,有必要提出一种解决方案,用于有效存储3d模型数据。


技术实现要素:

4.本公开实施例提供一种数据存储方法、数据解析方法及3d模型的展示方法。
5.第一方面,本公开实施例中提供了一种数据存储方法,其中,包括:
6.获取3d模型的原始数据;
7.基于所述3d模型的原始数据确定所述3d模型中的至少一个场景;
8.基于所述场景对应的原始数据生成存储所述场景对应的数据段;其中,所述数据段包括数据段头部及与数据类型对应的信息段,所述信息段包括信息段头部和数据本体,所述信息段头部包括所述信息段对应的数据类型以及信息段长度;所述数据段头部包括所述数据段类型以及数据段长度;
9.将所述场景对应的数据段存储至3d模型文件中。
10.进一步地,所述3d模型包括多个场景时,将所述场景对应的数据段存储至3d模型文件中,包括:
11.基于所述多个场景对应的多个所述数据段,生成3d模型文件的文件头部;所述文件头部包括所述3d模型文件的类型以及所述3d模型文件的长度;
12.将所述文件头部以及所述多个场景对应的多个所述数据段一起存储至所述3d模型文件中。
13.进一步地,所述数据段头部还包括场景的设计坐标系、场景包围盒信息、当前使用的动画信息、所述数据段对应的场景在场景树中的根节点信息、所述信息段在所述数据段中的位置偏移。
14.进一步地,所述信息段中的存储数据包括相机数据、材质数据、节点数据、动画数据和网格数据;其中,所述材质数据包括材质的基本信息以及基于物理的渲染信息;所述动画数据中包括关键帧信息以及用于描述动画过程中不同阶段的动画动作的序列片段信息;所述节点数据包括描述所述场景的场景树结构信息和指向至少一个关键帧信息的指针;所述网格数据包括对应的材质数据、网格所在节点数据和顶点数据。
15.进一步地,所述信息段长度为字节的整数倍。
16.进一步地,所述方法还包括:
17.接收用户输入的模型编辑信息;
18.基于所述模型编辑信息确定当前的场景;
19.基于所述场景确定所述3d模型文件中对应的目标数据段;
20.基于所述模型编辑信息对所述3d模型文件中的所述目标数据段进行更新。
21.进一步地,基于所述模型编辑信息对所述3d模型文件中的所述目标数据段进行更新,包括:
22.基于所述模型编辑信息确定对所述目标数据段的编辑方式;
23.在所述编辑方式为新增加数据类型时,基于所述模型编辑信息生成所述新增加数据类型对应的新信息段,并将所述新信息段添加在所述目标数据段中;
24.在所述编辑方式为更新信息段时,基于所述模型编辑信息从所述目标数据段中定位被更新的目标信息段,并对所述目标信息段进行更新。
25.第二方面,本公开实施例中提供了一种数据解析方法,其中,包括:
26.获取3d模型文件;
27.解析所述3d模型文件中数据段的数据段头部;所述数据段头部包括数据段类型、数据段长度以及所述数据段中存储的信息段对应的数据类型以及位置偏移;
28.基于所述数据段类型以及数据段长度从所述3d模型文件中获取所要解析的场景对应的目标数据段;
29.基于所述信息段对应的数据类型以及位置偏移从所述目标数据段中获取各信息段中存储的数据。
30.进一步地,基于所述信息段对应的数据类型以及位置偏移从所述目标数据段中获取各信息段中存储的数据,包括:
31.基于所述位置偏移确定目标信息段的存储位置;
32.基于所述信息段对应的数据类型调用对应的信息段解析器从所述存储位置解析得到所述目标信息段中存储的数据。
33.第三方面,本公开实施例中提供了一种3d模型的展示方法,包括:利用第一方面所述的方法从3d模型文件中解析数据,并基于所解析的数据展示所述3d模型。
34.第四方面,本公开实施例中提供了一种数据存储装置,其中,包括:
35.第一获取模块,被配置为获取3d模型的原始数据;
36.第一确定模块,被配置为基于所述3d模型的原始数据确定所述3d模型中的至少一个场景;
37.生成模块,被配置为基于所述场景对应的原始数据生成存储所述场景对应的数据段;其中,所述数据段包括数据段头部及与数据类型对应的信息段,所述信息段包括信息段
头部和数据本体,所述信息段头部包括所述信息段对应的数据类型以及信息段长度;所述数据段头部包括所述数据段类型以及数据段长度;
38.存储模块,被配置为将所述场景对应的数据段存储至3d模型文件中。
39.第五方面,本公开实施例中提供了一种数据解析装置,其中,包括:
40.第二获取模块,被配置为获取3d模型文件;
41.解析模块,被配置为解析所述3d模型文件中数据段的数据段头部;所述数据段头部包括数据段类型、数据段长度以及所述数据段中存储的信息段对应的数据类型以及位置偏移;
42.第三获取模块,被配置为基于所述数据段类型以及数据段长度从所述3d模型文件中获取所要解析的场景对应的目标数据段;
43.第四获取模块,被配置为基于所述信息段对应的数据类型以及位置偏移从所述目标数据段中获取各信息段中存储的数据。
44.第六方面,本公开实施例中提供了一种3d模型的展示装置,包括:利用第五方面所述的装置从3d模型文件中解析数据,并基于所解析的数据展示所述3d模型。
45.所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
46.在一个可能的设计中,上述装置的结构中包括存储器和处理器,所述存储器用于存储一条或多条支持上述装置执行上述对应方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。上述装置还可以包括通信接口,用于上述装置与其他设备或通信网络通信。
47.第七方面,本公开实施例提供了一种电子设备,包括存储器、处理器以及存储在存储器上的计算机程序,其中,所述处理器执行所述计算机程序以实现上述任一方面所述的方法。
48.第八方面,本公开实施例提供了一种计算机可读存储介质,用于存储上述任一装置所用的计算机指令,该计算机指令被处理器执行时用于实现上述任一方面所述的方法。
49.第九方面,本公开实施例提供了一种计算机程序产品,其包含计算机指令,该计算机指令被处理器执行时用于实现上述任一方面所述的方法。
50.本公开实施例提供的技术方案可以包括以下有益效果:
51.本公开实施例中,在存储3d模型的数据时,将每个场景下的数据生成对应的数据段,该数据段包括与数据类型对应的信息段以及数据段头部,数据段头部包括数据段类型以及数据段长度,而信息段包括数据本体以及信息段头部,信息段头部包括信息段对应的数据类型以及信息段长度,并将每个场景对应的数据段存储至3d模型文件中。通过这种方式,可以将同一个场景下的所有数据存储在一个3d模型文件中,并且由于每个场景对应的数据段中存储了各种数据的数据类型以及长度,易于扩展以及维护,并且能够在多个版本之间相互兼容,且能够提高3d模型数据的存储便捷性以及灵活性。
52.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
53.结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
54.图1示出根据本公开一实施方式的数据存储方法的流程图;
55.图2(a)-图2(c)示出根据本公开一实施方式中3d模型文件中的数据存储格式的结构示意图;
56.图3示出根据本公开一实施方式的数据解析方法的流程图;
57.图4示出了根据本公开一实施方式的3d模型文件的应用示意图;
58.图5示出根据本公开一实施方式的数据存储装置的结构框图;
59.图6示出根据本公开一实施方式的数据解析装置的结构框图;
60.图7是适于用来实现根据本公开一实施方式的数据存储方法、数据解析方法和/或3d模型的展示方法的电子设备的结构示意图。
具体实施方式
61.下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
62.在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
63.另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
64.下面通过具体实施例详细介绍本公开实施例的细节。
65.图1示出根据本公开一实施方式的数据存储方法的流程图。如图1所示,该数据存储方法包括以下步骤:
66.在步骤s101中,获取3d模型的原始数据;
67.在步骤s102中,基于所述3d模型的原始数据确定所述3d模型中的至少一个场景;
68.在步骤s103中,基于所述场景对应的原始数据生成存储所述场景对应的数据段;其中,所述数据段包括数据段头部及与数据类型对应的信息段,所述信息段包括信息段头部和数据本体,所述信息段头部包括所述信息段对应的数据类型以及信息段长度;所述数据段头部包括所述数据段类型以及数据段长度;
69.在步骤s104中,将所述场景对应的数据段存储至3d模型文件中。
70.本实施例中,3d模型由一组三维空间的多边形面片组成,每组面片包括多个相互连接的多边形。多边形是指三条或三条以上的线段首尾顺次连接所组成的封闭图形。在一些实施例中,3d模型中多边形为三角形。3d模型呈现的可以是真实的物体,也可以是虚构的物体,包括但不限于三维地图、三维设备、三维人物和三维游戏等。
71.3d模型中的顶点是指多面体中三个或更多的面的连接处,在3d模型中,每个多边形的顶点就是该3d模型的顶点,顶点坐标为三维坐标。
72.目前常见的3d模型的文件格式包括obj、fbx等,但是这些格式每种都有其优势,亦
有劣势。比如obj格式,其存储方式简单明了,但无法存储动画信息。而fbx格式,虽然其可存储复杂的模型信息,但用户无法直观的看到其内容。此外,这些格式将一个3d模型存储成多个文件,图片和其他数据分开存储,可扩展性差,难以维护,并且多个版本之间前后无法兼容。
73.本公开实施例提出的3d模型的数据存储方法中,从3d模型的原始数据确定3d模型中的部分或所有场景,并针对每个场景生成一个数据段。3d模型的原始数据可以包括但不限于采用其他格式存储的文件,例如obj文件、fbx文件以及对应的本地图片等。
74.一个3d模型可以包括一个或多个场景,本公开实施例针对每一个场景可以生成一个数据段,而多个场景对应的数据段可以按照预设的顺序存储在同一个3d模型文件中。
75.其他格式存储的3d模型文件中,通常情况下一个场景会被存储为一个文件,因此可以针对其他格式存储的一个文件生成一个数据段。当然,可以理解的是不同格式有不同的存储方式,只要在其他格式的文件的解析方式已知的情况下,可以从其他格式存储的3d模型的原始数据中解析出一个场景下的所有数据。
76.本公开实施例中,存储一个场景下所有信息的数据段可以包括数据段头部以及与数据类型对应的信息段,数据段头部用于存储该数据段中所存储信息的属性数据,比如该数据段类型以及该数据段长度等。数据段类型例如可以是对应的场景类型,如果场景是基于骨骼的场景,则数据段类型可以为骨骼类型,如果场景是基于粒子的场景,则数据段类型可以是粒子类型。数据段长度可以是该数据段的总字节长度。当然,可以理解的是,数据段头部除了类型和长度,还可以存储其他有用信息。
77.一个数据段可以包括多个信息段,而每个信息段又可以包括数据本体以及信息段头部。信息段头部用于存储该信息段中数据本体的属性数据,比如该信息段对应的数据类型以及信息段长度等。信息段对应的数据类型可以是该信息段中所存储的数据本体的数据类型,例如相机数据、材质数据、节点数据、动画数据和网格数据等不同类型。信息段长度可以是信息段中总字节长度。
78.针对每个场景生成对应的数据段之后,可以将该数据段存储至3d模型文件中,不同场景对应的不同数据段可以共同存储在该同一个3d模型文件中。
79.在一些实施例中,将数据段存储至3d模型文件中之前,可以对数据段进行压缩处理,通过这种方式可以减少数据存储量,并且在进行网络传输时,能够减少数据传输量。此外,本公开实施例中生产的数据段中无冗余字段(已有的obj文件中存在一些特殊字段),能够使得数据存储量尽可能小。
80.本公开实施例中,在存储3d模型的数据时,将每个场景下的数据生成对应的数据段,该数据段包括与数据类型对应的信息段以及数据段头部,数据段头部包括数据段类型以及数据段长度,而信息段包括数据本体以及信息段头部,信息段头部包括信息段对应的数据类型以及信息段长度,并将每个场景对应的数据段存储至3d模型文件中。通过这种方式,可以将同一个场景下的所有数据存储在一个3d模型文件中,并且由于每个场景对应的数据段中存储了各种数据的数据类型以及长度,易于扩展以及维护,并且能够在多个版本之间相互兼容,且能够提高3d模型数据的存储便捷性以及灵活性。
81.在本实施例的一个可选实现方式中,所述3d模型包括多个场景时,步骤s104,即将所述场景对应的数据段存储至3d模型文件中的步骤,进一步包括以下步骤:
82.基于所述多个场景对应的多个所述数据段,生成3d模型文件的文件头部;所述文件头部包括所述3d模型文件的类型以及所述3d模型文件的长度;
83.将所述文件头部以及所述多个场景对应的多个所述数据段一起存储至所述3d模型文件中。
84.该可选的实现方式中,一个3d模型可以包括多个场景,而本公开实施例可以针对每个场景生成一个数据段,由于每个数据段均包括数据段头部,该数据段头部包括数据段类型以及数据段长度,因此可以将多个数据段简单组合一起存储至一个3d模型文件中,并且针对所有数据段生成一个3d模型文件的文件头部,并在文件头部存储3d模型文件的类型以及整个文件的长度,通过这种方式可以将同一个3d模型中所有场景都存储在同一个3d模型文件,并且在解析时可以基于3d模型文件的文件头部、各个数据段头部、各个信息段头部方便地解析出各种数据,存储时由于各个数据段、各个信息段之间都是松耦合存储方式,可扩展性强,并且不同版本之间能够相互兼容。
85.在本实施例的一个可选实现方式中,所述数据段头部还包括场景的设计坐标系、场景包围盒信息、当前使用的动画信息、所述数据段对应的场景在场景树中的根节点信息、所述信息段在所述数据段中的位置偏移。
86.该可选的实现方式中,数据段头部除了存储数据段类型以及数据段长度之外,还可以包括其他信息,比如存储场景的设计坐标系、场景包围盒信息、当前使用的动画信息、数据段对应的场景在场景树中的根节点信息、信息段在数据段中的位置偏移等。其中,场景的设计坐标系可以是场景的原始坐标系。场景包围盒信息可以包括包围场景的最大立方体的坐标信息。当前使用的动画信息可以理解为该场景对应的动画,不同场景可以对应不同的动画。场景树中的根节点信息可以是该场景在场景树中对应的根节点,该场景可以是从场景树的根节点经过各种变换而得到的;根节点信息例如可以包括根节点的名称、从根节点至当前场景的序列变换操作以及用户施加在根节点的变换,比如缩放、旋转、平移变换等。
87.在本实施例的一个可选实现方式中,所述信息段中的存储数据包括相机数据、材质数据、节点数据、动画数据和网格数据;其中,所述材质数据包括材质的基本信息以及基于物理的渲染信息;所述动画数据中包括关键帧信息以及用于描述动画过程中不同阶段的动画动作的序列片段信息;所述节点数据包括描述所述场景的场景树结构信息和指向至少一个关键帧信息的指针;所述网格数据包括对应的材质数据、网格所在节点数据和顶点数据。
88.该可选的实现方式中,一个数据段中可以存储多个信息段,而每个信息段可以存储一种类型的存储数据,多个信息段可以存储相同类型的存储数据或者不同类型的存储数据。
89.信息段中的存储数据可以包括但不限于相机数据、材质数据、节点信息、动画数据和网格数据。也就是说,同一个场景下的所有类型的数据均可以存储至同一个数据段的不同信息段中,易于扩展以及维护,同时还便于解析。
90.其中,相机数据包括3d模型中使用的图片数据;材质数据包括3d模型中使用的材质的基本信息(如纹理)以及pbr(physicallly-based rendering,基于物理渲染)信息,pbr指在不同程度上基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。
由于本公开实施例中的3d模型文件中还扩充存储了pbr信息,因此可以实现更接近真实世界的渲染效果。
91.动画数据中存储了关键帧信息以及用于描述动画过程中不同阶段的动画动作的序列片段信息。也就是说,本公开实施例的3d模型文件中对于每个场景,除了存储基本的关键帧信息之外,还额外存储了动画序列片段,用于描述每个阶段的具体动作,通过这种存储方式,通过将一个完整的动画切分成多个动画片段进行存储,在显示模型的时候,可以指定这些动画片段的播放次数,持续的时间帧数,以达到自定义动画的效果。动画数据中还可以存储帧率、总帧数以及各骨骼动画节点,该骨骼动画节点包括名称(与骨骼/节点的名称相同)和关键帧信息,关键帧信息包括平移向量数组、旋转向量数组以及缩放向量数组,节点数据中存储的关键帧信息的指针可以指向该关键帧信息。
92.节点数据中存储主要用于描述场景的场景树结构,该场景树结构包括节点名称、节点id、相对于父节点的变换矩阵、子节点序列、网格信息(例如网格个数、网格数据指针或id)、是否是骨骼(骨骼偏移矩阵或蒙皮逆矩阵等)。本公开实施例中节点数据中除了场景树结构之外,还存储了指向某个动画数据中至少一个关键帧信息的指针,也就是说对于动画节点,还将该动画节点与同名称的动画数据绑定,只要更新节点数据中绑定的动画节点的id可以实现在多个动画片段之间进行切换。
93.网格数据包括该网格对应的材质数据、网格的顶点数据以及网格所在的节点数据。对于骨骼类型的数据段,网格数据中的顶点数据包括相应的骨骼顶点信息。网格数据还包括索引数据。
94.在本实施例的一个可选实现方式中,所述信息段长度为字节的整数倍。
95.该可选的实现方式中,针对3d模型的每个场景生成对应的数据段时,可以将其中每个信息段进行字节对齐,也即在每个信息段的信息生成之后,可以进行字节补齐,以便该信息段的总字节长度为一个字节的整数倍。通过这种方式,在解析该数据段中的每个信息段时可以加快数据解析效率。
96.在本实施例的一个可选实现方式中,所述方法进一步还包括以下步骤:
97.接收用户输入的模型编辑信息;
98.基于所述模型编辑信息确定当前的场景;
99.基于所述场景确定所述3d模型文件中对应的目标数据段;
100.基于所述模型编辑信息对所述3d模型文件中的所述目标数据段进行更新。
101.该可选的实现方式中,在3d模型文件生成后,本公开实施例提出的存储方式还支持用户对该3d模型文件的编辑。本公开实施例还可以提供3d模型文件的用户编辑界面,该用户编辑界面可以展示该3d模型文件中存储的3d模型的效果图,并且还提供对3d模型中各种信息进行编辑的编辑接口。
102.用户可以在用户编辑界面上查看3d模型的展示效果,并且在展示效果不符合需求时,通过编辑接口进行编辑。
103.在接收到用户通过编辑接口输入的模型编辑信息后,可以基于模型编辑信息确定用户针对模型的哪个场景进行修改,进而基于被修改的场景确定需要编辑的目标数据段,之后再基于用户提供的编辑信息更新3d模型文件中的目标数据段。在实现过程中,可以从3d模型文件中读出目标数据段的内容,并将其暂存在内存缓冲区进行修改,修改后的目标
数据段再存储至3d模型文件中。当然可以理解的是,也可以将整个3d模型文件的内容全部读取到内存缓冲区中,并对目标数据段进行修改后,重新存储至3d模型文件中。需要说明的是,目标数据段的修改除了基于用户输入的模型编辑信息对具体数据进行修改之外,还需要根据具体的修改结果修改对应的数据段头部、信息段头部、文件头部等。
104.在本实施例的一个可选实现方式中,基于所述模型编辑信息对所述3d模型文件中的所述目标数据段进行更新的步骤,进一步包括以下步骤:
105.基于所述模型编辑信息确定对所述目标数据段的编辑方式;
106.在所述编辑方式为新增加数据类型时,基于所述模型编辑信息生成所述新增加数据类型对应的新信息段,并将所述新信息段添加在所述目标数据段中;
107.在所述编辑方式为更新信息段时,基于所述模型编辑信息从所述目标数据段中定位被更新的目标信息段,并对所述目标信息段进行更新。
108.该可选的实现方式中,用户对3d模型的编辑通常包括对3d模型中各信息段(例如相机数据、材质数据、动画数据等)的编辑,可以在原有信息段的基础上进行更新,或者增加信息段,例如用户可以在某个场景下增加一个动画,此时可以在该场景对应的数据段中增加一个动画信息段;因此在确定用户所编辑的场景之后,还可以进一步确定用户的编辑方式,该编辑方式可以包括但不限于用户所编辑的目标信息段以及编辑操作。
109.在编辑方式为用户新添加数据类型时,可以基于用户新添加的数据类型生产对应的新信息段,进而将该新信息段添加至目标数据段中,此外还可以适应性修改目标数据段的数据段头部,以体现所新添加的该新信息段;在用户新添加的数据类型为动画数据时,还可以适应性修改节点数据中指向该动画数据的关键帧指针等。
110.在编辑方式为更新信息段时,基于用户所修改的数据类型定位对应的目标信息段,进而对目标信息段中的相应内容进行修改。例如,在数据长度有变化的情况下,还可以修改数据段头部,以便更新该目标信息段的下一信息段的位置偏移等;还可以修改信息段头部,以更新该信息段的长度。
111.图2(a)-图2(c)示出根据本公开一实施方式中3d模型文件中的数据存储格式的结构示意图。由于数据存储格式占用篇幅较大,无法在一张图中完整又清晰的示出完整的结构,因此使用了图2(a)-图2(c)三张附图,这三张附图按照图2(a)、图2(b)、图2(c)的顺序组合一起完整的表示了该数据存储格式的整个结构。如图2(a)-图2(c)所示,为了方便描述,该3d模型文件的存储格式被命名为dat格式,该dat格式包括3d模型文件的标识、文件头部以及数据。如上文中所述,文件头部包括该3d模型文件的文件类型、总字节长度、校验码和填充位。该校验码可以是基于整个3d模型文件中的数据信息生成的校验码,用于校验该3d模型文件中的内容安全性。填充位可以是预留的字节位,便于后续进行扩充使用。
112.数据包括多个数据段,每个数据段对应一个动画场景,例如骨骼动画场景、粒子动画场景等。每个数据段包括数据段头部以及存储不同类型的数据本体的多个信息段,数据段头部包括公共头部(也即包括类型和长度的头部)、设计坐标系、数据类型(骨骼/粒子)、场景包围盒(使用node变换信息获得)、当前使用的动画数据(默认为0,表示第一个动画)、根节点信息(包括名称、变换操作顺序和用户施加于根节点的缩放/旋转/平移等变换)、各类型数据也即各信息段的偏移(可以包括类型及位置偏移)。
113.信息段可以对应存储不同类型的数据本体,包括相机、材质、动画、节点和mesh(也
即网格)。一个数据段可以包括多种类型的信息段,一个数据段中也可以存在同一种类型的多个信息段。
114.相机数据包括公共头部(类型及长度)及相机数据的具体信息;材质数据包括公共头部、材质名称、材质id、纹理和pbr信息。动画数据包括公共头部、动画名称、帧率、总帧数、动画序列片段、各骨骼动画节点(包括与骨骼/节点相同的名称以及关键帧信息)。节点信息包括公共头部、节点名称、节点id、相对于父节点的变化矩阵、子节点序列、mesh信息(包括个数以及mesh数据指针或id)、是否是骨骼(骨骼偏移矩阵/蒙皮逆矩阵)、关键帧信息指针(可更新指针指向使用不同的动画数据)。mesh数据包括公共头部、mesh名称、对应材质id、节点id序列、顶点数据以及索引数据。
115.图3示出根据本公开一实施方式的数据解析方法的流程图。如图3所示,该数据解析方法包括以下步骤:
116.在步骤s301中,获取3d模型文件;
117.在步骤s302中,解析所述3d模型文件中数据段的数据段头部;所述数据段头部包括数据段类型、数据段长度以及所述数据段中存储的信息段对应的数据类型以及位置偏移;
118.在步骤s303中,基于所述数据段类型以及数据段长度从所述3d模型文件中获取所要解析的场景对应的目标数据段;
119.在步骤s304中,基于所述信息段对应的数据类型以及位置偏移从所述目标数据段中获取各信息段中存储的数据。
120.如上文所述,本实施例中将3d模型按照在自定义格式进行存储。在3d模型的数据存储过程中,从3d模型的原始数据确定3d模型中的部分或所有场景,并针对每个场景生成一个数据段。3d模型的原始数据可以包括但不限于采用其他格式存储的文件,例如obj文件、fbx文件以及对应的本地图片等。
121.一个3d模型可以包括一个或多个场景,本公开实施例针对每一个场景可以生成一个数据段,而多个场景对应的数据段可以按照预设的顺序存储在同一个3d模型文件中。
122.其他格式存储的3d模型文件中,通常情况下一个场景会被存储为一个文件,因此可以针对其他格式存储的一个文件生成一个数据段。当然,可以理解的是不同格式有不同的存储方式,只要在其他格式的文件的解析方式已知的情况下,可以从其他格式存储的3d模型的原始数据中解析出一个场景下的所有数据。
123.本公开实施例中,存储一个场景下所有信息的数据段可以包括数据段头部以及与数据类型对应的信息段,数据段头部用于存储该数据段中所存储信息的属性数据,比如该数据段类型以及该数据段长度等。数据段类型例如可以是对应的场景类型,如果场景是基于骨骼的场景,则数据段类型可以为骨骼类型,如果场景是基于粒子的场景,则数据段类型可以是粒子类型。数据段长度可以是该数据段的总字节长度。当然,可以理解的是,数据段头部除了类型和长度,还可以存储其他有用信息。
124.一个数据段可以包括多个信息段,而每个信息段又可以包括数据本体以及信息段头部。信息段头部用于存储该信息段中数据本体的属性数据,比如该信息段对应的数据类型以及信息段长度等。信息段对应的数据类型可以是该信息段中所存储的数据本体的数据类型,例如相机数据、材质数据、节点数据、动画数据和网格数据等不同类型。信息段长度可
以是信息段中总字节长度。
125.针对每个场景生成对应的数据段之后,可以将该数据段存储至3d模型文件中,不同场景对应的不同数据段可以共同存储在该同一个3d模型文件中。
126.针对上述方式存储的3d模型文件,本公开实施例还提出一种数据解析方法,该数据解析过程中,先从3d模型文件中读取数据段头部,数据段头部中由于存储有数据段类型以及数据段长度,因此可以基于所要解析的场景类型从3d模型文件找出类型相匹配的目标数据段以及目标数据段在3d模型文件中的位置,进而从3d模型文件获取该目标数据段对应的数据信息,之后可以从目标数据段的数据段头部信息确定各个信息段对应的数据类型以及位置偏移,并基于该信息段对应的数据类型以及位置偏移获取各信息段中存储的数据。需要说明的是,对于包括多个数据段的3d模型文件,可以先解析出3d文件头部,之后再基于3d文件头部中的内容以及长度等获取数据段头部。在一些实施例中,文件头部通常为固定长度,因此可以直接从3d模型文件的起始位置读取固定长度的字节数即可获得文件头部。
127.由于对应于场景的数据段、数据段中各个信息段中均包含了头部数据,该头部数据中记录了数据段类型、数据段长度、信息段对应的数据类型以及信息段长度,因此基于这些信息可以直接从3d模型文件中定位所要解析的场景的数据以及场景中各种不同类型的数据,进而完成相应的数据解析。
128.本公开实施例中,在存储3d模型的数据时,将每个场景下的数据生成对应的数据段,该数据段包括与数据类型对应的信息段以及数据段头部,数据段头部包括数据段类型以及数据段长度,而信息段包括数据本体以及信息段头部,信息段头部包括信息段对应的数据类型以及信息段长度,并将每个场景对应的数据段存储至3d模型文件中;而在数据解析时,从数据段头部以及信息段头部获取数据段类型、数据段长度、信息段对应的数据类型以及信息段长度等信息,进而可以完成对数据的解析。通过这种方式,由于在数据存储时将同一个场景下的所有数据存储在一个3d模型文件中,并且由于每个场景对应的数据段中存储了各种数据的数据类型以及长度,因此在解析时能够提高解析效率。
129.在本实施例的一个可选实现方式中,步骤s304,即基于所述信息段对应的数据类型以及位置偏移从所述目标数据段中获取各信息段中存储的数据的步骤,进一步包括以下步骤:
130.基于所述位置偏移确定目标信息段的存储位置;
131.基于所述信息段对应的数据类型调用对应的信息段解析器从所述存储位置解析得到所述目标信息段中存储的数据。
132.该可选的实现方式中,由于数据段头部存储了数据段类型(也即场景类型)以及数据段长度,基于该数据段类型以及数据段长度可以从3d模型文件中定位其中一个数据段的存储位置,进而基于该存储位置读取该数据段的内容。而数据段存储的各信息段又各自包括信息段头部,该信息段头部存储了信息段对应的数据类型以及信息段长度,此外,数据段头部还存储了各信息段对应的数据类型以及各信息段之间的位置偏移,因此基于该信息段对应的数据类型以及信息段偏移可以容易地定位到需要解析的信息段的存储位置,进而将信息段中的数据读取出来,并基于信息段头部中的信息段对应的数据类型以及长度进行解析。在本公开实施例中,针对不同的信息段设置了相应的信息段解析器,在信息段对应的数据类型已知的情况下,可以调用对应的信息段解析器解析该信息段中的数据,最终获得信
息段中的数据。
133.根据本公开一实施方式的3d模型的展示方法,该3d模型的展示方法利用上述数据解析方法从3d模型文件中解析数据,并基于所解析的数据展示所述3d模型。
134.本实施例中,3d模型文件可以基于上述数据存储方法得到,该3d模型文件存储有3d模型的数据,该数据基于上述数据存储方法中的存储格式存储。因此,在展示该3d模型文件中的3d模型时,可以基于上述数据解析方法从该3d模型文件中解析出当前所要展示的3d模型的数据,进而再基于该解析得到的数据展示该3d模型。
135.图4示出了根据本公开一实施方式的3d模型文件的应用示意图。如图4所示,用户在模型效果展示的客户端请求展示包括obj格式的3d模型文件的3d模型;客户端将该请求发送至服务器,服务器调用obj文件的解析器解析该3d模型对应的obj格式的3d模型文件以及图片等,并从中获得对应的场景数据,服务器将原obj格式的模型文件中的冗余数据(也即obj格式特有的数据)删除,并基于其他信息以及图像信息生成对应的数据段,基于生成的数据段可以生成新的3d模型文件,该新的3d模型文件可以返回给客户端。
136.在客户端可以部署新的3d模型文件的解析器,客户端基于上文中的数据解析方法对该细内的3d模型文件进行解析,并基于解析出的数据进行3d模型的展示。
137.下述为本公开装置实施例,可以用于执行本公开方法实施例。
138.图5示出根据本公开一实施方式的数据存储装置的结构框图。该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图5所示,该数据存储装置包括:
139.第一获取模块501,被配置为获取3d模型的原始数据;
140.第一确定模块502,被配置为基于所述3d模型的原始数据确定所述3d模型中的至少一个场景;
141.生成模块503,被配置为基于所述场景对应的原始数据生成存储所述场景对应的数据段;其中,所述数据段包括数据段头部及与数据类型对应的信息段,所述信息段包括信息段头部和数据本体,所述信息段头部包括所述信息段对应的数据类型以及信息段长度;所述数据段头部包括所述数据段类型以及数据段长度;
142.存储模块504,被配置为将所述场景对应的数据段存储至3d模型文件中。
143.本实施例中,3d模型由一组三维空间的多边形面片组成,每组面片包括多个相互连接的多边形。多边形是指三条或三条以上的线段首尾顺次连接所组成的封闭图形。在一些实施例中,3d模型中多边形为三角形。3d模型呈现的可以是真实的物体,也可以是虚构的物体,包括但不限于三维地图、三维设备、三维人物和三维游戏等。
144.3d模型中的顶点是指多面体中三个或更多的面的连接处,在3d模型中,每个多边形的顶点就是该3d模型的顶点,顶点坐标为三维坐标。
145.目前常见的3d模型的文件格式包括obj、fbx等,但是这些格式每种都有其优势,亦有劣势。比如obj格式,其存储方式简单明了,但无法存储动画信息。而fbx格式,虽然其可存储复杂的模型信息,但用户无法直观的看到其内容。此外,这些格式将一个3d模型存储成多个文件,图片和其他数据分开存储,可扩展性差,难以维护,并且多个版本之间前后无法兼容。
146.本公开实施例提出的3d模型的数据存储装置中,从3d模型的原始数据确定3d模型
中的部分或所有场景,并针对每个场景生成一个数据段。3d模型的原始数据可以包括但不限于采用其他格式存储的文件,例如obj文件、fbx文件以及对应的本地图片等。
147.一个3d模型可以包括一个或多个场景,本公开实施例针对每一个场景可以生成一个数据段,而多个场景对应的数据段可以按照预设的顺序存储在同一个3d模型文件中。
148.其他格式存储的3d模型文件中,通常情况下一个场景会被存储为一个文件,因此可以针对其他格式存储的一个文件生成一个数据段。当然,可以理解的是不同格式有不同的存储方式,只要在其他格式的文件的解析方式已知的情况下,可以从其他格式存储的3d模型的原始数据中解析出一个场景下的所有数据。
149.本公开实施例中,存储一个场景下所有信息的数据段可以包括数据段头部以及与数据类型对应的信息段,数据段头部用于存储该数据段中所存储信息的属性数据,比如该数据段类型以及该数据段长度等。数据段类型例如可以是对应的场景类型,如果场景是基于骨骼的场景,则数据段类型可以为骨骼类型,如果场景是基于粒子的场景,则数据段类型可以是粒子类型。数据段长度可以是该数据段的总字节长度。当然,可以理解的是,数据段头部除了类型和长度,还可以存储其他有用信息。
150.一个数据段可以包括多个信息段,而每个信息段又可以包括数据本体以及信息段头部。信息段头部用于存储该信息段中数据本体的属性数据,比如该信息段对应的数据类型以及信息段长度等。信息段对应的数据类型可以是该信息段中所存储的数据本体的数据类型,例如相机数据、材质数据、节点数据、动画数据和网格数据等不同类型。信息段长度可以是信息段中总字节长度。
151.针对每个场景生成对应的数据段之后,可以将该数据段存储至3d模型文件中,不同场景对应的不同数据段可以共同存储在该同一个3d模型文件中。
152.在一些实施例中,将数据段存储至3d模型文件中之前,可以对数据段进行压缩处理,通过这种方式可以减少数据存储量,并且在进行网络传输时,能够减少数据传输量。此外,本公开实施例中生产的数据段中无冗余字段(已有的obj文件中存在一些特殊字段),能够使得数据存储量尽可能小。
153.本公开实施例中,在存储3d模型的数据时,将每个场景下的数据生成对应的数据段,该数据段包括与数据类型对应的信息段以及数据段头部,数据段头部包括数据段类型以及数据段长度,而信息段包括数据本体以及信息段头部,信息段头部包括信息段对应的数据类型以及信息段长度,并将每个场景对应的数据段存储至3d模型文件中。通过这种方式,可以将同一个场景下的所有数据存储在一个3d模型文件中,并且由于每个场景对应的数据段中存储了各种数据的数据类型以及长度,易于扩展以及维护,并且能够在多个版本之间相互兼容,且能够提高3d模型数据的存储便捷性以及灵活性。
154.在本实施例的一个可选实现方式中,所述3d模型包括多个场景时,所述存储模块,包括:
155.第一生成子模块,被配置为基于所述多个场景对应的多个所述数据段,生成3d模型文件的文件头部;所述文件头部包括所述3d模型文件的类型以及所述3d模型文件的长度;
156.存储子模块,被配置为将所述文件头部以及所述多个场景对应的多个所述数据段一起存储至所述3d模型文件中。
157.该可选的实现方式中,一个3d模型可以包括多个场景,而本公开实施例可以针对每个场景生成一个数据段,由于每个数据段均包括数据段头部,该数据段头部包括数据段类型以及数据段长度,因此可以将多个数据段简单组合一起存储至一个3d模型文件中,并且针对所有数据段生成一个3d模型文件的文件头部,并在文件头部存储3d模型文件的类型以及整个文件的长度,通过这种方式可以将同一个3d模型中所有场景都存储在同一个3d模型文件,并且在解析时可以基于3d模型文件的文件头部、各个数据段头部、各个信息段头部方便地解析出各种数据,存储时由于各个数据段、各个信息段之间都是松耦合存储方式,可扩展性强,并且不同版本之间能够相互兼容。
158.在本实施例的一个可选实现方式中,所述数据段头部还包括场景的设计坐标系、场景包围盒信息、当前使用的动画信息、所述数据段对应的场景在场景树中的根节点信息、所述信息段在所述数据段中的位置偏移。
159.该可选的实现方式中,数据段头部除了存储数据段类型以及数据段长度之外,还可以包括其他信息,比如存储场景的设计坐标系、场景包围盒信息、当前使用的动画信息、数据段对应的场景在场景树中的根节点信息、信息段在数据段中的位置偏移等。其中,场景的设计坐标系可以是场景的原始坐标系。场景包围盒信息可以包括包围场景的最大立方体的坐标信息。当前使用的动画信息可以理解为该场景对应的动画,不同场景可以对应不同的动画。场景树中的根节点信息可以是该场景在场景树中对应的根节点,该场景可以是从场景树的根节点经过各种变换而得到的;根节点信息例如可以包括根节点的名称、从根节点至当前场景的序列变换操作以及用户施加在根节点的变换,比如缩放、旋转、平移变换等。
160.在本实施例的一个可选实现方式中,所述信息段中的存储数据包括相机数据、材质数据、节点数据、动画数据和网格数据;其中,所述材质数据包括材质的基本信息以及基于物理的渲染信息;所述动画数据中包括关键帧信息以及用于描述动画过程中不同阶段的动画动作的序列片段信息;所述节点数据包括描述所述场景的场景树结构信息和指向至少一个关键帧信息的指针;所述网格数据包括对应的材质数据、网格所在节点数据和顶点数据。
161.该可选的实现方式中,一个数据段中可以存储多个信息段,而每个信息段可以存储一种类型的存储数据,多个信息段可以存储相同类型的存储数据或者不同类型的存储数据。
162.信息段中的存储数据可以包括但不限于相机数据、材质数据、节点信息、动画数据和网格数据。也就是说,同一个场景下的所有类型的数据均可以存储至同一个数据段的不同信息段中,易于扩展以及维护,同时还便于解析。
163.其中,相机数据包括3d模型中使用的图片数据;材质数据包括3d模型中使用的材质的基本信息(如纹理)以及pbr(physicallly-based rendering,基于物理渲染)信息,pbr指在不同程度上基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。由于本公开实施例中的3d模型文件中还扩充存储了pbr信息,因此可以实现更接近真实世界的渲染效果。
164.动画数据中存储了关键帧信息以及用于描述动画过程中不同阶段的动画动作的序列片段信息。也就是说,本公开实施例的3d模型文件中对于每个场景,除了存储基本的关
键帧信息之外,还额外存储了动画序列片段,用于描述每个阶段的具体动作,通过这种存储方式,通过将一个完整的动画切分成多个动画片段进行存储,在显示模型的时候,可以指定这些动画片段的播放次数,持续的时间帧数,以达到自定义动画的效果。动画数据中还可以存储帧率、总帧数以及各骨骼动画节点,该骨骼动画节点包括名称(与骨骼/节点的名称相同)和关键帧信息,关键帧信息包括平移向量数组、旋转向量数组以及缩放向量数组,节点数据中存储的关键帧信息的指针可以指向该关键帧信息。
165.节点数据中存储主要用于描述场景的场景树结构,该场景树结构包括节点名称、节点id、相对于父节点的变换矩阵、子节点序列、网格信息(例如网格个数、网格数据指针或id)、是否是骨骼(骨骼偏移矩阵或蒙皮逆矩阵等)。本公开实施例中节点数据中除了场景树结构之外,还存储了指向某个动画数据中至少一个关键帧信息的指针,也就是说对于动画节点,还将该动画节点与同名称的动画数据绑定,只要更新节点数据中绑定的动画节点的id可以实现在多个动画片段之间进行切换。
166.网格数据包括该网格对应的材质数据、网格的顶点数据以及网格所在的节点数据。对于骨骼类型的数据段,网格数据中的顶点数据包括相应的骨骼顶点信息。网格数据还包括索引数据。
167.在本实施例的一个可选实现方式中,所述信息段长度为字节的整数倍。
168.该可选的实现方式中,针对3d模型的每个场景生成对应的数据段时,可以将其中每个信息段进行字节对齐,也即在每个信息段的信息生成之后,可以进行字节补齐,以便该信息段的总字节长度为一个字节的整数倍。通过这种方式,在解析该数据段中的每个信息段时可以加快数据解析效率。
169.在本实施例的一个可选实现方式中,所述装置进一步还包括以下步骤:
170.接收模块,被配置为接收用户输入的模型编辑信息;
171.第二确定模块,被配置为基于所述模型编辑信息确定当前的场景;
172.第三确定模块,被配置为基于所述场景确定所述3d模型文件中对应的目标数据段;
173.更新模块,被配置为基于所述模型编辑信息对所述3d模型文件中的所述目标数据段进行更新。
174.该可选的实现方式中,在3d模型文件生成后,本公开实施例提出的存储方式还支持用户对该3d模型文件的编辑。本公开实施例还可以提供3d模型文件的用户编辑界面,该用户编辑界面可以展示该3d模型文件中存储的3d模型的效果图,并且还提供对3d模型中各种信息进行编辑的编辑接口。
175.用户可以在用户编辑界面上查看3d模型的展示效果,并且在展示效果不符合需求时,通过编辑接口进行编辑。
176.在接收到用户通过编辑接口输入的模型编辑信息后,可以基于模型编辑信息确定用户针对模型的哪个场景进行修改,进而基于被修改的场景确定需要编辑的目标数据段,之后再基于用户提供的编辑信息更新3d模型文件中的目标数据段。在实现过程中,可以从3d模型文件中读出目标数据段的内容,并将其暂存在内存缓冲区进行修改,修改后的目标数据段再存储至3d模型文件中。当然可以理解的是,也可以将整个3d模型文件的内容全部读取到内存缓冲区中,并对目标数据段进行修改后,重新存储至3d模型文件中。需要说明的
是,目标数据段的修改除了基于用户输入的模型编辑信息对具体数据进行修改之外,还需要根据具体的修改结果修改对应的数据段头部、信息段头部、文件头部等。
177.在本实施例的一个可选实现方式中,所述更新模块,包括:
178.第一确定子模块,被配置为基于所述模型编辑信息确定对所述目标数据段的编辑方式;
179.第二生成子模块,被配置为在所述编辑方式为新增加数据类型时,基于所述模型编辑信息生成所述新增加数据类型对应的新信息段,并将所述新信息段添加在所述目标数据段中;
180.更新子模块,被配置为在所述编辑方式为更新信息段时,基于所述模型编辑信息从所述目标数据段中定位被更新的目标信息段,并对所述目标信息段进行更新。
181.该可选的实现方式中,用户对3d模型的编辑通常包括对3d模型中各信息段(例如相机数据、材质数据、动画数据等)的编辑,可以在原有信息段的基础上进行更新,或者增加信息段,例如用户可以在某个场景下增加一个动画,此时可以在该场景对应的数据段中增加一个动画信息段;因此在确定用户所编辑的场景之后,还可以进一步确定用户的编辑方式,该编辑方式可以包括但不限于用户所编辑的目标信息段以及编辑操作。
182.在编辑方式为用户新添加数据类型时,可以基于用户新添加的数据类型生产成对应的新信息段,进而将该新信息段添加至目标数据段中,此外还可以适应性修改目标数据段的数据段头部,以体现所新添加的该新信息段;在用户新添加的数据类型为动画数据时,还可以适应性修改节点数据中指向该动画数据的关键帧指针等。
183.在编辑方式为更新信息段时,基于用户所修改的数据类型定位对应的目标信息段,进而对目标信息段中的相应内容进行修改。例如,在数据长度有变化的情况下,还可以修改数据段头部,以便更新该目标信息段的下一信息段的位置偏移等;还可以修改信息段头部,以更新该信息段的长度。
184.图6示出根据本公开一实施方式的数据解析装置的结构框图。该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图6所示,该数据解析装置包括:
185.第二获取模块601,被配置为获取3d模型文件;
186.解析模块602,被配置为解析所述3d模型文件中数据段的数据段头部;所述数据段头部包括数据段类型、数据段长度以及所述数据段中存储的信息段对应的数据类型以及位置偏移;
187.第三获取模块603,被配置为基于所述数据段类型以及数据段长度从所述3d模型文件中获取所要解析的场景对应的目标数据段;
188.第四获取模块604,被配置为基于所述信息段对应的数据类型以及位置偏移从所述目标数据段中获取各信息段中存储的数据。
189.如上文所述,本实施例中将3d模型按照在自定义格式进行存储。在3d模型的数据存储过程中,从3d模型的原始数据确定3d模型中的部分或所有场景,并针对每个场景生成一个数据段。3d模型的原始数据可以包括但不限于采用其他格式存储的文件,例如obj文件、fbx文件以及对应的本地图片等。
190.一个3d模型可以包括一个或多个场景,本公开实施例针对每一个场景可以生成一
个数据段,而多个场景对应的数据段可以按照预设的顺序存储在同一个3d模型文件中。
191.其他格式存储的3d模型文件中,通常情况下一个场景会被存储为一个文件,因此可以针对其他格式存储的一个文件生成一个数据段。当然,可以理解的是不同格式有不同的存储方式,只要在其他格式的文件的解析方式已知的情况下,可以从其他格式存储的3d模型的原始数据中解析出一个场景下的所有数据。
192.本公开实施例中,存储一个场景下所有信息的数据段可以包括数据段头部以及与数据类型对应的信息段,数据段头部用于存储该数据段中所存储信息的属性数据,比如该数据段类型以及该数据段长度等。数据段类型例如可以是对应的场景类型,如果场景是基于骨骼的场景,则数据段类型可以为骨骼类型,如果场景是基于粒子的场景,则数据段类型可以是粒子类型。数据段长度可以是该数据段的总字节长度。当然,可以理解的是,数据段头部除了类型和长度,还可以存储其他有用信息。
193.一个数据段可以包括多个信息段,而每个信息段又可以包括数据本体以及信息段头部。信息段头部用于存储该信息段中数据本体的属性数据,比如该信息段对应的数据类型以及信息段长度等。信息段对应的数据类型可以是该信息段中所存储的数据本体的数据类型,例如相机数据、材质数据、节点数据、动画数据和网格数据等不同类型。信息段长度可以是信息段中总字节长度。
194.针对每个场景生成对应的数据段之后,可以将该数据段存储至3d模型文件中,不同场景对应的不同数据段可以共同存储在该同一个3d模型文件中。
195.针对上述方式存储的3d模型文件,本公开实施例还提出一种数据解析装置,该数据解析过程中,先从3d模型文件中读取数据段头部,数据段头部中由于存储有数据段类型以及数据段长度,因此可以基于所要解析的场景类型从3d模型文件找出类型相匹配的目标数据段以及目标数据段在3d模型文件中的位置,进而从3d模型文件获取该目标数据段对应的数据信息,之后可以从目标数据段的数据段头部信息确定各个信息段对应的数据类型以及位置偏移,并基于该信息段对应的数据类型以及位置偏移获取各信息段中存储的数据。需要说明的是,对于包括多个数据段的3d模型文件,可以先解析出3d文件头部,之后再基于3d文件头部中的内容以及长度等获取数据段头部。在一些实施例中,文件头部通常为固定长度,因此可以直接从3d模型文件的起始位置读取固定长度的字节数即可获得文件头部。
196.由于对应于场景的数据段、数据段中各个信息段中均包含了头部数据,该头部数据中记录了数据段类型、数据段长度、信息段对应的数据类型以及信息段长度,因此基于这些信息可以直接从3d模型文件中定位所要解析的场景的数据以及场景中各种不同类型的数据,进而完成相应的数据解析。
197.本公开实施例中,在存储3d模型的数据时,将每个场景下的数据生成对应的数据段,该数据段包括与数据类型对应的信息段以及数据段头部,数据段头部包括数据段类型以及数据段长度,而信息段包括数据本体以及信息段头部,信息段头部包括信息段对应的数据类型以及信息段长度,并将每个场景对应的数据段存储至3d模型文件中;而在数据解析时,从数据段头部以及信息段头部获取数据段类型、数据段长度、信息段对应的数据类型以及信息段长度等信息,进而可以完成对数据的解析。通过这种方式,由于在数据存储时将同一个场景下的所有数据存储在一个3d模型文件中,并且由于每个场景对应的数据段中存储了各种数据的数据类型以及长度,因此在解析时能够提高解析效率。
198.在本实施例的一个可选实现方式中,所述第四获取模块,包括:
199.第二确定子模块,被配置为基于所述位置偏移确定目标信息段的存储位置;
200.解析子模块,被配置为基于所述信息段对应的数据类型调用对应的信息段解析器从所述存储位置解析得到所述目标信息段中存储的数据。
201.该可选的实现方式中,由于数据段头部存储了数据段类型(也即场景类型)以及数据段长度,基于该数据段类型以及数据段长度可以从3d模型文件中定位其中一个数据段的存储位置,进而基于该存储位置读取该数据段的内容。而数据段存储的各信息段又各自包括信息段头部,该信息段头部存储了信息段对应的数据类型以及信息段长度,此外,数据段头部还存储了各信息段对应的数据类型以及各信息段之间的位置偏移,因此基于该信息段对应的数据类型以及信息段偏移可以容易地定位到需要解析的信息段的存储位置,进而将信息段中的数据读取出来,并基于信息段头部中的信息段对应的数据类型以及长度进行解析。在本公开实施例中,针对不同的信息段设置了相应的信息段解析器,在信息段对应的数据类型已知的情况下,可以调用对应的信息段解析器解析该信息段中的数据,最终获得信息段中的数据。
202.根据本公开一实施方式的3d模型的展示装置,该3d模型的展示装置利用上述数据解析装置从3d模型文件中解析数据,并基于所解析的数据展示所述3d模型。
203.本实施例中,3d模型文件可以基于上述数据存储装置得到,该3d模型文件存储有3d模型的数据,该数据基于上述数据存储装置中的存储格式存储。因此,在展示该3d模型文件中的3d模型时,可以基于上述数据解析装置从该3d模型文件中解析出当前所要展示的3d模型的数据,进而再基于该解析得到的数据展示该3d模型。
204.图7是适于用来实现根据本公开实施方式的数据存储方法、数据解析方法和/或3d模型的展示方法的电子设备的结构示意图。
205.如图7所示,电子设备700包括处理单元701,其可实现为cpu、gpu、fpga、npu等处理单元。处理单元701可以根据存储在只读存储器(rom)702中的程序或者从存储部分708加载到随机访问存储器(ram)703中的程序而执行本公开上述任一方法的实施方式中的各种处理。在ram703中,还存储有电子设备700操作所需的各种程序和数据。处理单元701、rom702以及ram703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。
206.以下部件连接至i/o接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至i/o接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
207.特别地,根据本公开的实施方式,上文参考本公开实施方式中的任一方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行本公开实施方式中任一方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。
208.附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机
程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
209.描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
210.作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
211.以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献