CN110021070B - FBX三维模型转换为glTF三维模型的方法、设备以及系统 - Google Patents

FBX三维模型转换为glTF三维模型的方法、设备以及系统 Download PDF

Info

Publication number
CN110021070B
CN110021070B CN201810021607.6A CN201810021607A CN110021070B CN 110021070 B CN110021070 B CN 110021070B CN 201810021607 A CN201810021607 A CN 201810021607A CN 110021070 B CN110021070 B CN 110021070B
Authority
CN
China
Prior art keywords
data
array
node
storing
dimensional model
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.)
Active
Application number
CN201810021607.6A
Other languages
English (en)
Other versions
CN110021070A (zh
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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201810021607.6A priority Critical patent/CN110021070B/zh
Publication of CN110021070A publication Critical patent/CN110021070A/zh
Application granted granted Critical
Publication of CN110021070B publication Critical patent/CN110021070B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/32Image data format

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Geometry (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本申请提供了一种FBX三维模型转换为glTF三维模型的方法、设备以及系统,涉及模型转换技术领域。所述方法包括:对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括关系数据,贴图数据,资源数据,节点数据,网格数据,骨骼数据,材质数据,动画数据;分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;根据所述处理结果构建所述FBX三维模型对应的glTF三维模型。通过本申请的技术方案,可以自动将FBX模型转换为glTF模型,方便嵌入到网页中,并且能方便的用代码交互。

Description

FBX三维模型转换为glTF三维模型的方法、设备以及系统
技术领域
本申请属于模型转换技术领域,尤其涉及一种FBX三维模型转换为glTF三维模型的方法、计算设备、计算机可读存储介质以及系统。
背景技术
现有技术中,FBX是一种由Kaydara开发的专有文件格式(.fbx),自2006年以来由Autodesk拥有,是一种非常流行的三维模型格式,广泛应用于制造业、工程建设行业和传媒娱乐等行业,帮助各行业用户进行三维可视化设计。
但是,设计师使用的三维模型处理软件(诸如Maya,3DS Max等),在这些软件上完成三维可视化设计以后无法直接导出glTF模型(glTF是一种可以减少三维模型格式中与渲染无关的冗余数据并且更加适合OpenGL簇加载的一种三维模型文件格式),一般导出的都是FBX模型。然而,FBX三维模型无法直接在网页上使用,无法直接嵌入至网页中,降低了工作效率,增加了设计成本,对用户进行三维可视化设计造成了不便。
因此,如何研究和开发出一种新的方案以克服上述技术问题是本领域亟待解决的技术难题。
发明内容
有鉴于此,本申请提供一种FBX三维模型转换为glTF三维模型的方法、计算设备、计算机可读存储介质以及系统,实现了自动将FBX三维模型转换为glTF三维模型,方便嵌入到网页中。
为实现上述目的,本申请提供技术方案如下:
根据本申请的第一方面,提出了一种FBX三维模型转换为glTF三维模型的系统,包括模型解析设备、数据处理设备以及模型构建设备,
其中,所述模型解析设备用于:对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
所述数据处理设备用于:分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
所述模型构建设备用于:根据所述处理结果构建所述FBX三维模型对应的glTF三维模型;
当所述FBX三维模型为二进制格式时,所述模型解析设备还包括:
标识信息读取模块,用于读取所述FBX三维模型的头部标示信息;
属性名保存模块,还用于按照字符串的方式读取属性名,并压入所述栈中;
属性数据保存模块,还用于通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度,当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据,将所述属性数据根据所述栈的属性名层次保存至所述对象。
根据本申请的第二方面,提出了一种FBX三维模型转换为glTF三维模型的方法,包括:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型;
当所述FBX三维模型为二进制格式时,对待转换的FBX三维模型进行解析包括:
获取初始化的栈以及对象;
读取所述FBX三维模型的头部标示信息;
按照字符串的方式读取属性名,并压入所述栈中;
通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度;
当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据;将所述属性数据根据所述栈的属性名层次保存至所述对象。
根据本申请的第三方面,提出了一种算设备,所述计算设备包括:适于实现各指令的处理器以及存储设备,所述存储设备存储有多条指令,所述指令适于由处理器加载并执行:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型。根据本申请的第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型;
当所述FBX三维模型为二进制格式时,对待转换的FBX三维模型进行解析包括:
获取初始化的栈以及对象;读取所述FBX三维模型的头部标示信息;按照字符串的方式读取属性名,并压入所述栈中;通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度;当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据;将所述属性数据根据所述栈的属性名层次保存至所述对象。
由以上技术方案可见,本申请通过脚本解析并读取FBX模型文件中的数据,转换为glTF模型文件,可以自动将FBX模型转换为glTF模型,方便嵌入到网页中,并且能方便的用代码交互。
为让本申请的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统的示意图;
图2示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统中模型解析设备的示意图;
图3示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统中数据处理设备的示意图;
图4示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统中模型构建设备的示意图;
图5示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的方法的流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面首先介绍本申请涉及的术语。
三维模型:物体的多边形表示,通常用计算机或者其它视频设备进行显示。显示的物体可以是现实世界的实体,也可以是虚构的物体。任何物理自然界存在的东西都可以用三维模型表示。
FBX:一种由Kaydara开发的专有文件格式(.fbx),自2006年以来由Autodesk拥有,是一种非常流行的三维模型格式。
glTF:一种可以减少三维模型格式中与渲染无关的冗余数据并且在更加适合OpenGL簇加载的一种三维模型文件格式。
具体的,图1示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统的示意图,请参阅图1,一种FBX三维模型转换为glTF三维模型的系统包括模型解析设备100、数据处理设备200以及模型构建设备300,也即本申请实施例的技术方案在模型解析设备、数据处理设备以及模型构建设备之间实现,将FBX三维模型转换为glTF三维模型,其中:
所述模型解析设备100用于:对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据。
在本申请的另一种实施方式中,所述属性数据包括关系数据、贴图数据、资源数据、节点数据、网格数据、骨骼数据、材质数据以及动画数据。
所述数据处理设备200用于:分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中。
所述模型构建设备300用于:根据所述处理结果构建所述FBX三维模型对应的glTF三维模型。
本申请实施例的技术方案可以在模型解析设备、数据处理设备以及模型构建设备之间实现。现有技术中,设计师使用的三维模型处理软件(Maya,3DS Max等)无法直接导出glTF模型,一般都是导出FBX模型,而FBX模型无法直接在网页上使用,本申请的系统提供模型解析设备、数据处理设备以及模型构建设备,可以自动将FBX模型转换为glTF模型,方便嵌入到网页中,并且能方便的用代码交互。
通过模型解析设备、数据处理设备以及模型构建设备进行FBX三维模型转换为glTF三维模型的的方案的首选实施方案,将参考图2至图4在下文中进行说明。
图2示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统中模型解析设备的示意图,请参阅图2,在本申请实施例中,以所述FBX三维模型为纯文本格式为例说明本申请实施例的技术内容。在申请实施例中,模型解析设备包括:
对象获取模块101,用于获取初始化的栈以及对象。也即,在该实施方式中,所述FBX三维模型为纯文本格式,是一种类似JSON的格式,首先读取初始化的一个栈,用于保存属性名的层次信息,读取初始化的一个对象,用于保存属性数据。
属性名保存模块102,用于逐行读入所述FBX三维模型,将冒号前的属性名压入所述栈;
属性数据保存模块103,用于判断冒号后的属性数据是否为块数据,当判断为否时,将所述属性数据根据所述栈的属性名层次保存至所述对象。
也即,FBX三维模型的解析过程在该实施方式中具体为:读取三维模型的一行内容,分号开始的行表示注释,可以不处理直接丢弃。冒号分隔属性名和属性数据,左大括号表示一个块数据的开始,右大括号表示一个块数据的结束。将读到的冒号前的属性名压入栈中,如果属性数据不是块数据的话,将属性数据根据当前栈的属性名层次保存到对象中,保存结束后执行退栈操作。如果属性数据是块数据的话,则再次读取一行内容,直到文件结束,遍历FBX三维模型的所有行。
在本申请的另一种实施方式中,当FBX三维模型为二进制格式时,所述模型解析设备还包括:
标识信息读取模块,用于读取所述FBX三维模型的头部标示信息。FBX的二进制格式是基于块来来存储的,其文件开头一定是字符串“Kaydara FBX Binary”,可以用来判断是否为二进制文件。读取的头部标示信息,如果标识不是”Kaydara FBX Binary”,或者版本低于7.0则结束读取,则提示错误,否则,执行属性名保存模块。
属性名保存模块,还用于按照字符串的方式读取属性名,并压入所述栈中;
属性数据保存模块,还用于通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度,当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据,将所述属性数据根据所述栈的属性名层次保存至所述对象。
当属性数据数组长度为0时,表示其属性数据是一个块数据,则遍历下一个块。在具体的实施例中,属性名及属性数据读取方法,每个数据的第一个字节表示数据长度,第二个字节表示数据类型,下面是类型标识对应的表:
66 8位整数
67 布尔类型
68 64位浮点数
70 32位浮点数
73 32位整数
76 64位整数
82 二进制数据
83 字符串
89 16位整数
98 8位整数数组
99 布尔数组
100 64位浮点数数组
102 32位浮点数数组
105 32位整数数组
108 64位整数数组
121 16位整数数组
解析完后的对象中会包含以下数据:关系数据,贴图数据,资源数据,节点数据,网格数据,骨骼数据,材质数据,动画数据。
图3示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统中数据处理设备的示意图,请参阅图3,数据处理设备200在处理贴图数据时包括:
贴图对象获取模块201,用于获取初始化的贴图数据对象,即初始化一个贴图数据对象。
贴图数据遍历模块202,用于遍历所述贴图数据,根据所述关系数据查找关联的资源数据,当查找到关联的资源数据且所述资源数据上有二进制数据时,将所述二进制数据保存为图片文件,当未查找到关联的资源数据或所述资源数据上没有二进制数据时,根据所述资源数据以及所述贴图数据中的相对路径信息获取贴图文件的真实路径;
贴图数据保存模块203,用于以所述贴图数据的ID为属性名,所述贴图文件的真实路径为值,保存至所述贴图数据对象中。
也即,数据处理设备在处理每个贴图数据时,利用关系数据找到关联的资源数据,如果资源数据上带有原始的二进制数据,就表示贴图是以二进制数据存储在这里,需要将原始的二进制数据保存成一个图片文件。如果没有找到资源数据或资源数据上没有原始的二进制数据则表示贴图是一个外部的文件,根据资源数据和贴图数据中的相对路径信息获取贴图文件的真实路径。然后以贴图数据的ID为属性名,贴图文件的真实路径为值,保存到贴图数据对象中。
在本申请的另一种实施方式中,所述数据处理设备在处理网格数据时还包括:
网格对象获取模块,用于获取初始化的网格数据对象以及材质数据对象,即初始化一个网格数据对象和一个材质数据对象。
网格数据遍历模块,用于遍历所述对象中的网格数据,根据所述关系数据获取关联的节点数据、骨骼数据以及材质数据,获取所述网格数据上的顶点数据、法向量数据、贴图坐标数据以及面索引数组,根据所述骨骼数据获取骨骼索引数组以及骨骼权重数组;
数组名保存模块,用于将所述骨骼索引数组、骨骼权重数组以及材质数据ID以所述网格数据的ID为属性名保存至所述网格数据对象中;
参数表保存模块,用于将所述材质数据转换为模型渲染参数表,将所述模型渲染参数表以材质数据ID为属性名保存至所述材质数据对象中。
也即,数据处理设备在处理每个网格数据时,根据关系数据获取关联的节点数据、骨骼数据、材质数据。获取网格数据上的顶点数组,法向量数组,贴图坐标数组,面索引数组,如果有骨骼数据则获取其骨骼索引数组,骨骼权重数组,然后将这些数组及材质数据ID以网格数据的ID为属性名保存到网格数据对象中。根据获取到的材质数据,将其转换为模型渲染参数表,然后将参数表以材质数据ID为属性名保存到材质数据对象中。
在本申请的另一种实施方式中,所述数据处理设备在处理节点数据时还包括:
节点对象获取模块,用于获取初始化的节点数据对象,即初始化一个节点数据对象。
节点数据遍历模块,用于遍历所述对象中的节点数据,将所述节点数据上的缩放信息、旋转信息以及位移信息转换为变换矩阵;根据所述关系数据查找所述节点数据所有的子节点ID,保存为子节点ID数组;根据所述关系数据查找所述节点数据对应的骨骼数据ID、网格数据ID;
骨骼ID保存模块,用于以所述节点数据的ID为属性名,将变换矩阵、子节点ID数组、网格数据ID以及骨骼数据ID保存至所述节点数据对象中。
也即,数据处理设备在处理每个节点数据时,将节点数据上的缩放信息,旋转信息及位移信息转换成一个变换矩阵。并根据关系数据找到其所有的子节点ID,保存为子节点ID数组。并根据关系数据找到其对应的骨骼数据。并根据关系数据找到其对应的网格数据ID。然后以节点数据的ID为属性名,将变换矩阵、子节点ID数组、网格数据ID和骨骼数据ID保存到节点数据对象中。
在本申请的另一种实施方式中,所述数据处理设备在处理动画数据时还包括:
动画对象获取模块,用于获取初始化的动画数据对象,也即初始化一个动画数据对象。
动画数据遍历模块,用于遍历所述对象中的动画数据,根据所述关系数据获取关联的节点数据;
节点ID保存模块,用于将所述动画数据中的时间数组、帧旋转数组、帧位移数组、帧缩放数组以及节点数据的ID以所述动画数据的ID为属性名保存至所述动画数据对象中。
也即,数据处理设备在处理每个动画数据时,根据关系数据获取关联的节点数据。将动画数据中时间数组,帧旋转数组,帧位移数组,帧缩放数组及节点数据的ID以动画数据的ID为属性名保存到动画数据对象中。
图4示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的系统中模型构建设备的示意图,请参阅图4,所述模型构建设备包括:
模型对象获取模块401,用于获取初始化的glTF模型对象以及二进制数据对象,初始化的glTF模型对象包含空的节点数组(nodes)、网格数组(meshes)、材质数组(materials)、贴图数组(textures)、贴图资源数组(images)、骨骼数组(skins)、动画数组(animations)、二进制数据数组(buffers)、二进制数据访问信息数组(accessors)。
贴图数组保存模块402,用于将所述贴图数据对象转换为贴图数组,保存至所述glTF模型对象的贴图数组中,并将所述贴图数据对象对应的索引保存至所述贴图数据对象;
材质数据保存模块403,用于将所述材质数据对象转换成为材质数组,保存至所述glTF模型对象的材质数组中,并将所述材质数据对象对应的索引保存至所述材质数据对象;
网格数组保存模块404,用于将所述网格数据对象转换为网格数组,保存至所述glTF模型对象的网格数组中,并将所述网格数据对象对应的索引保存至所述网格数据对象上;
索引保存模块405,用于将所述网格数据对象关联的材质数据ID根据所述材质数据对象转换为材质数组的索引,并将所述网格数据对象中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组转换为二进制保存至所述二进制数据对象中,生成对应的二进制数据访问信息,保存到所述二进制访问信息数组中;将所述网格数据中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组替换为对应的二进制访问信息数组的索引;
骨骼数组保存模块406,用于将所述骨骼数据转换为骨骼数组,保存至所述glTF模型对象的骨骼数组中,并将所述骨骼数据对应的索引保存至所述骨骼数据上;
节点数组保存模块407,用于将所述节点数据对象转换为节点数组,保存至所述glTF模型对象的节点数组中,并将所述节点数据对应的索引保存至所述节点数据对象上,根据所述节点数据对象中的骨骼数据ID查找到骨骼数据,将所述骨骼数据转换为骨骼数组中的索引,将所述网格数据ID转换为网格数组索引,将节点数组的每个节点字节的数组中的节点数据ID转换为节点数组的索引;
动画数组保存模块408,用于将所述动画数据对象转换为动画数组,保存至所述glTF模型对象的动画数组中,并将所述动画数据对应的索引保存至所述动画数据对象上,将所述动画数据的时间数组、帧旋转数组、帧位移数组以及帧缩放数组转换成二进制保存所述二进制数据对象中,生成对应的二进制数据访问信息,保存至所述二进制访问信息数组中,将所述动画数据中的时间数组、帧旋转数组、帧位移数组以及帧缩放数组替换为对应的二进制访问信息数组的索引;
二进制文件保存模块409,用于将所述二进制数据对象保存为.bin的二进制文件,将文件路径及文件字节数保存至所述glTF模型对象的二进制数据数组的第一个元素;
三维模型确定模块410,用于将所述glTF模型对象以JSON方式保存为.gltf后缀的文件,得到所述FBX三维模型对应的glTF三维模型。
如上所述,现有技术在各种互动平台上有很多3D及AR需求,但是却没有一个好用的方法将设计师导出的FBX模型转换为网页支持的glTF模型,尤其不支持动画,本方案通过脚本解析并读取FBX模型文件中的数据,转换为glTF模型文件,能导出所有模型,支持动画,而且没有各种异常问题。
在介绍了本申请的系统之后,接下来,参考附图对本申请的一种FBX三维模型转换为glTF三维模型的方法进行介绍。该方法的实施可以参见上述装置的实施,重复之处不再赘述。
图5示出了根据本申请一示例性实施例的一种FBX三维模型转换为glTF三维模型的方法的流程图,请参阅图5,所述方法包括:
S101:对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据。
在本申请的另一种实施方式中,所述属性数据包括关系数据、贴图数据、资源数据、节点数据、网格数据、骨骼数据、材质数据以及动画数据。
S102:分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中。
S103:根据所述处理结果构建所述FBX三维模型对应的glTF三维模型。
现有技术中,设计师使用的三维模型处理软件(Maya,3DS Max等)无法直接导出glTF模型,一般都是导出FBX模型,而FBX模型无法直接在网页上使用,本申请的方法可以自动将FBX模型转换为glTF模型,方便嵌入到网页中,并且能方便的用代码交互。
在本申请的一种实施方式中,当所述FBX三维模型为纯文本格式时,对待转换的FBX三维模型进行解析包括:
用于获取初始化的栈以及对象。也即,在该实施方式中,所述FBX三维模型为纯文本格式,是一种类似JSON的格式,首先读取初始化的一个栈,用于保存属性名的层次信息,读取初始化的一个对象,用于保存属性数据。
逐行读入所述FBX三维模型,将冒号前的属性名压入所述栈;
判断冒号后的属性数据是否为块数据,当判断为否时,将所述属性数据根据所述栈的属性名层次保存至所述对象。
也即,FBX三维模型的解析过程在该实施方式中具体为:读取三维模型的一行内容,分号开始的行表示注释,可以不处理直接丢弃。冒号分隔属性名和属性数据,左大括号表示一个块数据的开始,右大括号表示一个块数据的结束。将读到的冒号前的属性名压入栈中,如果属性数据不是块数据的话,将属性数据根据当前栈的属性名层次保存到对象中,保存结束后执行退栈操作。如果属性数据是块数据的话,则再次读取一行内容,直到文件结束,遍历FBX三维模型的所有行。
在本申请的另一种实施方式中,当FBX三维模型为二进制格式时,对待转换的FBX三维模型进行解析包括:
获取初始化的栈以及对象;
读取所述FBX三维模型的头部标示信息。FBX的二进制格式是基于块来来存储的,其文件开头一定是字符串“Kaydara FBX Binary”,可以用来判断是否为二进制文件。读取的头部标示信息,如果标识不是”Kaydara FBX Binary”,或者版本低于7.0则结束读取,则提示错误,否则,执行属性名保存模块。
按照字符串的方式读取属性名,并压入所述栈中;
通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度,当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据,将所述属性数据根据所述栈的属性名层次保存至所述对象。
当属性数据数组长度为0时,表示其属性数据是一个块数据,则遍历下一个块。在具体的实施例中,属性名及属性数据读取方法,每个数据的第一个字节表示数据长度,第二个字节表示数据类型。
解析完后的对象中会包含以下数据:关系数据,贴图数据,资源数据,节点数据,网格数据,骨骼数据,材质数据,动画数据。
在本申请的一种实施方式中,对所述对象中的贴图数据处理包括:
获取初始化的贴图数据对象,即初始化一个贴图数据对象。
遍历所述贴图数据,根据所述关系数据查找关联的资源数据,当查找到关联的资源数据且所述资源数据上有二进制数据时,将所述二进制数据保存为图片文件,当未查找到关联的资源数据或所述资源数据上没有二进制数据时,根据所述资源数据以及所述贴图数据中的相对路径信息获取贴图文件的真实路径;
以所述贴图数据的ID为属性名,所述贴图文件的真实路径为值,保存至所述贴图数据对象中。
也即,数据处理设备在处理每个贴图数据时,利用关系数据找到关联的资源数据,如果资源数据上带有原始的二进制数据,就表示贴图是以二进制数据存储在这里,需要将原始的二进制数据保存成一个图片文件。如果没有找到资源数据或资源数据上没有原始的二进制数据则表示贴图是一个外部的文件,根据资源数据和贴图数据中的相对路径信息获取贴图文件的真实路径。然后以贴图数据的ID为属性名,贴图文件的真实路径为值,保存到贴图数据对象中。
在本申请的另一种实施方式中,对所述对象中的网格数据进行处理包括:
获取初始化的网格数据对象以及材质数据对象,即初始化一个网格数据对象和一个材质数据对象。
遍历所述对象中的网格数据,根据所述关系数据获取关联的节点数据、骨骼数据以及材质数据,获取所述网格数据上的顶点数据、法向量数据、贴图坐标数据以及面索引数组,根据所述骨骼数据获取骨骼索引数组以及骨骼权重数组;
将所述骨骼索引数组、骨骼权重数组以及材质数据ID以所述网格数据的ID为属性名保存至所述网格数据对象中;
将所述材质数据转换为模型渲染参数表,将所述模型渲染参数表以材质数据ID为属性名保存至所述材质数据对象中。
也即,数据处理设备在处理每个网格数据时,根据关系数据获取关联的节点数据、骨骼数据、材质数据。获取网格数据上的顶点数组,法向量数组,贴图坐标数组,面索引数组,如果有骨骼数据则获取其骨骼索引数组,骨骼权重数组,然后将这些数组及材质数据ID以网格数据的ID为属性名保存到网格数据对象中。根据获取到的材质数据,将其转换为模型渲染参数表,然后将参数表以材质数据ID为属性名保存到材质数据对象中。
在本申请的另一种实施方式中,对所述对象中的节点数据进行处理包括:
获取初始化的节点数据对象,即初始化一个节点数据对象。
遍历所述对象中的节点数据,将所述节点数据上的缩放信息、旋转信息以及位移信息转换为变换矩阵;根据所述关系数据查找所述节点数据所有的子节点ID,保存为子节点ID数组;根据所述关系数据查找所述节点数据对应的骨骼数据ID、网格数据ID;
以所述节点数据的ID为属性名,将变换矩阵、子节点ID数组、网格数据ID以及骨骼数据ID保存至所述节点数据对象中。
也即,数据处理设备在处理每个节点数据时,将节点数据上的缩放信息,旋转信息及位移信息转换成一个变换矩阵。并根据关系数据找到其所有的子节点ID,保存为子节点ID数组。并根据关系数据找到其对应的骨骼数据。并根据关系数据找到其对应的网格数据ID。然后以节点数据的ID为属性名,将变换矩阵、子节点ID数组、网格数据ID和骨骼数据ID保存到节点数据对象中。
在本申请的另一种实施方式中,对所述对象中的动画数据进行处理包括:
获取初始化的动画数据对象,也即初始化一个动画数据对象。
遍历所述对象中的动画数据,根据所述关系数据获取关联的节点数据;
将所述动画数据中的时间数组、帧旋转数组、帧位移数组、帧缩放数组以及节点数据的ID以所述动画数据的ID为属性名保存至所述动画数据对象中。
也即,数据处理设备在处理每个动画数据时,根据关系数据获取关联的节点数据。将动画数据中时间数组,帧旋转数组,帧位移数组,帧缩放数组及节点数据的ID以动画数据的ID为属性名保存到动画数据对象中。
图5中的步骤S301根据所述处理结果构建所述FBX三维模型对应的glTF三维模型包括:
获取初始化的glTF模型对象以及二进制数据对象,初始化的glTF模型对象包含空的节点数组(nodes)、网格数组(meshes)、材质数组(materials)、贴图数组(textures)、贴图资源数组(images)、骨骼数组(skins)、动画数组(animations)、二进制数据数组(buffers)、二进制数据访问信息数组(accessors)。
将所述贴图数据对象转换为贴图数组,保存至所述glTF模型对象的贴图数组中,并将所述贴图数据对象对应的索引保存至所述贴图数据对象;
将所述材质数据对象转换成为材质数组,保存至所述glTF模型对象的材质数组中,并将所述材质数据对象对应的索引保存至所述材质数据对象;
将所述网格数据对象转换为网格数组,保存至所述glTF模型对象的网格数组中,并将所述网格数据对象对应的索引保存至所述网格数据对象上;
将所述网格数据对象关联的材质数据ID根据所述材质数据对象转换为材质数组的索引,并将所述网格数据对象中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组转换为二进制保存至所述二进制数据对象中,生成对应的二进制数据访问信息,保存到所述二进制访问信息数组中;将所述网格数据中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组替换为对应的二进制访问信息数组的索引;
将所述骨骼数据转换为骨骼数组,保存至所述glTF模型对象的骨骼数组中,并将所述骨骼数据对应的索引保存至所述骨骼数据上;
将所述节点数据对象转换为节点数组,保存至所述glTF模型对象的节点数组中,并将所述节点数据对应的索引保存至所述节点数据对象上,根据所述节点数据对象中的骨骼数据ID查找到骨骼数据,将所述骨骼数据转换为骨骼数组中的索引,将所述网格数据ID转换为网格数组索引,将节点数组的每个节点字节的数组中的节点数据ID转换为节点数组的索引;
将所述动画数据对象转换为动画数组,保存至所述glTF模型对象的动画数组中,并将所述动画数据对应的索引保存至所述动画数据对象上,将所述动画数据的时间数组、帧旋转数组、帧位移数组以及帧缩放数组转换成二进制保存所述二进制数据对象中,生成对应的二进制数据访问信息,保存至所述二进制访问信息数组中,将所述动画数据中的时间数组、帧旋转数组、帧位移数组以及帧缩放数组替换为对应的二进制访问信息数组的索引;
将所述二进制数据对象保存为.bin的二进制文件,将文件路径及文件字节数保存至所述glTF模型对象的二进制数据数组的第一个元素;
将所述glTF模型对象以JSON方式保存为.gltf后缀的文件,得到所述FBX三维模型对应的glTF三维模型。
如上所述,现有技术在各种互动平台上有很多3D及AR需求,但是却没有一个好用的方法将设计师导出的FBX模型转换为网页支持的glTF模型,尤其不支持动画,本方案通过脚本解析并读取FBX模型文件中的数据,转换为glTF模型文件,能导出所有模型,支持动画,而且没有各种异常问题。
本申请还提供了一种计算设备,包括:适于实现各指令的处理器以及存储设备,所述存储设备存储有多条指令,所述指令适于由处理器加载并执行:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型。
本申请还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型。
应当注意,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。
上述实施例阐明的单元、装置或模块等,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、类等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。

Claims (18)

1.一种FBX三维模型转换为glTF三维模型的系统,其特征在于,所述系统包括模型解析设备、数据处理设备以及模型构建设备,
其中,所述模型解析设备用于:对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
所述数据处理设备用于:分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
所述模型构建设备用于:根据所述处理结果构建所述FBX三维模型对应的glTF三维模型;
当所述FBX三维模型为二进制格式时,所述模型解析设备还包括:
标识信息读取模块,用于读取所述FBX三维模型的头部标示信息;
属性名保存模块,还用于按照字符串的方式读取属性名,并压入所述栈中;
属性数据保存模块,还用于通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度,当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据,将所述属性数据根据所述栈的属性名层次保存至所述对象。
2.根据权利要求1所述的系统,其特征在于,所述属性数据还包括关系数据、资源数据、骨骼数据以及材质数据。
3.根据权利要求2所述的系统,其特征在于,当所述FBX三维模型为纯文本格式时,所述模型解析设备包括:
对象获取模块,用于获取初始化的栈以及对象;
属性名保存模块,用于逐行读入所述FBX三维模型,将冒号前的属性名压入所述栈;
属性数据保存模块,用于判断冒号后的属性数据是否为块数据,当判断为否时,将所述属性数据根据所述栈的属性名层次保存至所述对象。
4.根据权利要求3所述的系统,其特征在于,所述数据处理设备包括:
贴图对象获取模块,用于获取初始化的贴图数据对象;
贴图数据遍历模块,用于遍历所述贴图数据,根据所述关系数据查找关联的资源数据,当查找到关联的资源数据且所述资源数据上有二进制数据时,将所述二进制数据保存为图片文件,当未查找到关联的资源数据或所述资源数据上没有二进制数据时,根据所述资源数据以及所述贴图数据中的相对路径信息获取贴图文件的真实路径;
贴图数据保存模块,用于以所述贴图数据的ID为属性名,所述贴图文件的真实路径为值,保存至所述贴图数据对象中。
5.根据权利要求4所述的系统,其特征在于,所述数据处理设备还包括:
网格对象获取模块,用于获取初始化的网格数据对象以及材质数据对象;
网格数据遍历模块,用于遍历所述对象中的网格数据,根据所述关系数据获取关联的节点数据、骨骼数据以及材质数据,获取所述网格数据上的顶点数据、法向量数据、贴图坐标数据以及面索引数组,根据所述骨骼数据获取骨骼索引数组以及骨骼权重数组;
数组名保存模块,用于将所述骨骼索引数组、骨骼权重数组以及材质数据ID以所述网格数据的ID为属性名保存至所述网格数据对象中;
参数表保存模块,用于将所述材质数据转换为模型渲染参数表,将所述模型渲染参数表以材质数据ID为属性名保存至所述材质数据对象中。
6.根据权利要求5所述的系统,其特征在于,所述数据处理设备还包括:
节点对象获取模块,用于获取初始化的节点数据对象;
节点数据遍历模块,用于遍历所述对象中的节点数据,将所述节点数据上的缩放信息、旋转信息以及位移信息转换为变换矩阵;根据所述关系数据查找所述节点数据所有的子节点ID,保存为子节点ID数组;根据所述关系数据查找所述节点数据对应的骨骼数据ID、网格数据ID;
骨骼ID保存模块,用于以所述节点数据的ID为属性名,将变换矩阵、子节点ID数组、网格数据ID以及骨骼数据ID保存至所述节点数据对象中。
7.根据权利要求6所述的系统,其特征在于,所述数据处理设备还包括:
动画对象获取模块,用于获取初始化的动画数据对象;
动画数据遍历模块,用于遍历所述对象中的动画数据,根据所述关系数据获取关联的节点数据;
节点ID保存模块,用于将所述动画数据中的时间数组、帧旋转数组、帧位移数组、帧缩放数组以及节点数据的ID以所述动画数据的ID为属性名保存至所述动画数据对象中。
8.根据权利要求7所述的系统,其特征在于,所述模型构建设备包括:
模型对象获取模块,用于获取初始化的glTF模型对象以及二进制数据对象;
贴图数组保存模块,用于将所述贴图数据对象转换为贴图数组,保存至所述glTF模型对象的贴图数组中,并将所述贴图数据对象对应的索引保存至所述贴图数据对象;
材质数据保存模块,用于将所述材质数据对象转换成为材质数组,保存至所述glTF模型对象的材质数组中,并将所述材质数据对象对应的索引保存至所述材质数据对象;
网格数组保存模块,用于将所述网格数据对象转换为网格数组,保存至所述glTF模型对象的网格数组中,并将所述网格数据对象对应的索引保存至所述网格数据对象上;
索引保存模块,用于将所述网格数据对象关联的材质数据ID根据所述材质数据对象转换为材质数组的索引,并将所述网格数据对象中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组转换为二进制保存至所述二进制数据对象中,生成对应的二进制数据访问信息,保存到所述二进制访问信息数组中;将所述网格数据中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组替换为对应的二进制访问信息数组的索引;
骨骼数组保存模块,用于将所述骨骼数据转换为骨骼数组,保存至所述glTF模型对象的骨骼数组中,并将所述骨骼数据对应的索引保存至所述骨骼数据上;
节点数组保存模块,用于将所述节点数据对象转换为节点数组,保存至所述glTF模型对象的节点数组中,并将所述节点数据对应的索引保存至所述节点数据对象上,根据所述节点数据对象中的骨骼数据ID查找到骨骼数据,将所述骨骼数据转换为骨骼数组中的索引,将所述网格数据ID转换为网格数组索引,将节点数组的每个节点字节的数组中的节点数据ID转换为节点数组的索引;
动画数组保存模块,用于将所述动画数据对象转换为动画数组,保存至所述glTF模型对象的动画数组中,并将所述动画数据对应的索引保存至所述动画数据对象上,将所述动画数据的时间数组、帧旋转数组、帧位移数组以及帧缩放数组转换成二进制保存所述二进制数据对象中,生成对应的二进制数据访问信息,保存至所述二进制访问信息数组中,将所述动画数据中的时间数组、帧旋转数组、帧位移数组以及帧缩放数组替换为对应的二进制访问信息数组的索引;
二进制文件保存模块,用于将所述二进制数据对象保存为.bin的二进制文件,将文件路径及文件字节数保存至所述glTF模型对象的二进制数据数组的第一个元素;
三维模型确定模块,用于将所述glTF模型对象以JSON方式保存为.gltf后缀的文件,得到所述FBX三维模型对应的glTF三维模型。
9.一种FBX三维模型转换为glTF三维模型的方法,其特征在于,所述方法包括:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型;
当所述FBX三维模型为二进制格式时,对待转换的FBX三维模型进行解析包括:
获取初始化的栈以及对象;
读取所述FBX三维模型的头部标示信息;
按照字符串的方式读取属性名,并压入所述栈中;
通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度;
当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据;将所述属性数据根据所述栈的属性名层次保存至所述对象。
10.根据权利要求9所述的方法,其特征在于,所述属性数据还包括关系数据、资源数据、骨骼数据以及材质数据。
11.根据权利要求10所述的方法,其特征在于,当所述FBX三维模型为纯文本格式时,对待转换的FBX三维模型进行解析包括:
获取初始化的栈以及对象;
逐行读入所述FBX三维模型,将冒号前的属性名压入所述栈;
判断冒号后的属性数据是否为块数据,当判断为否时,将所述属性数据根据所述栈的属性名层次保存至所述对象。
12.根据权利要求11所述的方法,其特征在于,对所述对象中的贴图数据处理包括:
获取初始化的贴图数据对象;
遍历所述贴图数据,根据所述关系数据查找关联的资源数据;
当查找到关联的资源数据且所述资源数据上有二进制数据时,将所述二进制数据保存为图片文件;
当未查找到关联的资源数据或所述资源数据上没有二进制数据时,根据所述资源数据以及所述贴图数据中的相对路径信息获取贴图文件的真实路径;
以所述贴图数据的ID为属性名,所述贴图文件的真实路径为值,保存至所述贴图数据对象中。
13.根据权利要求12所述的方法,其特征在于,对所述对象中的网格数据进行处理包括:
获取初始化的网格数据对象以及材质数据对象;
遍历所述对象中的网格数据,根据所述关系数据获取关联的节点数据、骨骼数据以及材质数据;
获取所述网格数据上的顶点数据、法向量数据、贴图坐标数据以及面索引数组;
根据所述骨骼数据获取骨骼索引数组以及骨骼权重数组;
将所述骨骼索引数组、骨骼权重数组以及材质数据ID以所述网格数据的ID为属性名保存至所述网格数据对象中;
将所述材质数据转换为模型渲染参数表,将所述模型渲染参数表以材质数据ID为属性名保存至所述材质数据对象中。
14.根据权利要求13所述的方法,其特征在于,对所述对象中的节点数据进行处理包括:
获取初始化的节点数据对象;
遍历所述对象中的节点数据,将所述节点数据上的缩放信息、旋转信息以及位移信息转换为变换矩阵;
根据所述关系数据查找所述节点数据所有的子节点ID,保存为子节点ID数组;
根据所述关系数据查找所述节点数据对应的骨骼数据ID、网格数据ID;
以所述节点数据的ID为属性名,将变换矩阵、子节点ID数组、网格数据ID以及骨骼数据ID保存至所述节点数据对象中。
15.根据权利要求14所述的方法,其特征在于,对所述对象中的动画数据进行处理包括:
获取初始化的动画数据对象;
遍历所述对象中的动画数据,根据所述关系数据获取关联的节点数据;
将所述动画数据中的时间数组、帧旋转数组、帧位移数组、帧缩放数组以及节点数据的ID以所述动画数据的ID为属性名保存至所述动画数据对象中。
16.根据权利要求15所述的方法,其特征在于,根据所述处理结果构建所述FBX三维模型对应的glTF三维模型包括:
获取初始化的glTF模型对象以及二进制数据对象;
将所述贴图数据对象转换为贴图数组,保存至所述glTF模型对象的贴图数组中,并将所述贴图数据对象对应的索引保存至所述贴图数据对象;
将所述材质数据对象转换成为材质数组,保存至所述glTF模型对象的材质数组中,并将所述材质数据对象对应的索引保存至所述材质数据对象;
将所述网格数据对象转换为网格数组,保存至所述glTF模型对象的网格数组中,并将所述网格数据对象对应的索引保存至所述网格数据对象上;
将所述网格数据对象关联的材质数据ID根据所述材质数据对象转换为材质数组的索引,并将所述网格数据对象中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组转换为二进制保存至所述二进制数据对象中,生成对应的二进制数据访问信息,保存到所述二进制访问信息数组中;将所述网格数据中的顶点数组、法向量数组、贴图坐标数组、面索引数组、骨骼索引数组、骨骼权重数组替换为对应的二进制访问信息数组的索引;
将所述骨骼数据转换为骨骼数组,保存至所述glTF模型对象的骨骼数组中,并将所述骨骼数据对应的索引保存至所述骨骼数据上;
将所述节点数据对象转换为节点数组,保存至所述glTF模型对象的节点数组中,并将所述节点数据对应的索引保存至所述节点数据对象上,根据所述节点数据对象中的骨骼数据ID查找到骨骼数据,将所述骨骼数据转换为骨骼数组中的索引,将所述网格数据ID转换为网格数组索引,将节点数组的每个节点字节的数组中的节点数据ID转换为节点数组的索引;
将所述动画数据对象转换为动画数组,保存至所述glTF模型对象的动画数组中,并将所述动画数据对应的索引保存至所述动画数据对象上,将所述动画数据的时间数组、帧旋转数组、帧位移数组以及帧缩放数组转换成二进制保存所述二进制数据对象中,生成对应的二进制数据访问信息,保存至所述二进制访问信息数组中,将所述动画数据中的时间数组、帧旋转数组、帧位移数组以及帧缩放数组替换为对应的二进制访问信息数组的索引;
将所述二进制数据对象保存为.bin的二进制文件,将文件路径及文件字节数保存至所述glTF模型对象的二进制数据数组的第一个元素;
将所述glTF模型对象以JSON方式保存为.gltf后缀的文件,得到所述FBX三维模型对应的glTF三维模型。
17.一种计算设备,其特征在于,所述计算设备包括:适于实现各指令的处理器以及存储设备,所述存储设备存储有多条指令,所述指令适于由处理器加载并执行:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型;
当所述FBX三维模型为二进制格式时,对待转换的FBX三维模型进行解析包括:
获取初始化的栈以及对象;读取所述FBX三维模型的头部标示信息;按照字符串的方式读取属性名,并压入所述栈中;通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度;当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据;将所述属性数据根据所述栈的属性名层次保存至所述对象。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行:
对待转换的FBX三维模型进行解析,将解析得到的属性名保存至栈中,将解析得到的属性数据保存至对象中,所述属性数据包括贴图数据、节点数据、网格数据以及动画数据;
分别对所述对象中的贴图数据、节点数据、网格数据以及动画数据进行处理,将处理结果保存至贴图数据对象、网格数据对象、材质数据对象、节点数据对象以及动画数据对象中;
根据所述处理结果构建所述FBX三维模型对应的glTF三维模型;
当所述FBX三维模型为二进制格式时,对待转换的FBX三维模型进行解析包括:
获取初始化的栈以及对象;读取所述FBX三维模型的头部标示信息;按照字符串的方式读取属性名,并压入所述栈中;通过递归的方式按照块读取所述FBX三维模型的结束位置、属性数据数组长度以及属性数据总长度;当所述属性数据数组长度大于1时,读取长度个数的数据作为属性数据;将所述属性数据根据所述栈的属性名层次保存至所述对象。
CN201810021607.6A 2018-01-10 2018-01-10 FBX三维模型转换为glTF三维模型的方法、设备以及系统 Active CN110021070B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810021607.6A CN110021070B (zh) 2018-01-10 2018-01-10 FBX三维模型转换为glTF三维模型的方法、设备以及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810021607.6A CN110021070B (zh) 2018-01-10 2018-01-10 FBX三维模型转换为glTF三维模型的方法、设备以及系统

Publications (2)

Publication Number Publication Date
CN110021070A CN110021070A (zh) 2019-07-16
CN110021070B true CN110021070B (zh) 2023-03-31

Family

ID=67187952

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810021607.6A Active CN110021070B (zh) 2018-01-10 2018-01-10 FBX三维模型转换为glTF三维模型的方法、设备以及系统

Country Status (1)

Country Link
CN (1) CN110021070B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110992489B (zh) * 2019-12-06 2024-02-13 国网上海市电力公司 一种适用于变电站运维管理的三维模型构建方法
CN114510811A (zh) * 2020-11-17 2022-05-17 广东博智林机器人有限公司 模型数据的处理方法、装置和计算机可读存储介质
CN113744412B (zh) * 2021-08-16 2024-06-18 长沙眸瑞网络科技有限公司 一种处理3d模型数据的方法及装置
CN113961512B (zh) * 2021-12-23 2022-03-08 武汉方拓数字科技有限公司 一种将max文件转换为glTF文件的转换方法
CN114841006A (zh) * 2022-05-17 2022-08-02 北京华航唯实机器人科技股份有限公司 用于虚拟现实仿真的数据处理方法和装置
CN115170708B (zh) * 2022-07-11 2023-05-05 上海哔哩哔哩科技有限公司 3d图像实现方法及系统
CN115033972B (zh) * 2022-08-09 2022-11-08 武汉易米景科技有限公司 一种建筑主体结构批量单体化方法、系统及可读存储介质
CN115344901B (zh) * 2022-10-18 2023-01-24 山东捷瑞数字科技股份有限公司 一种基于三维引擎的三维模型自动爆炸拆解方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103353866A (zh) * 2013-05-13 2013-10-16 河南大学 一种支持xna技术的三维模型文件格式转换方法
CN104537715A (zh) * 2015-01-09 2015-04-22 中国电建集团昆明勘测设计研究院有限公司 一种实现fbx三维模型自动转换为obj三维模型的方法
CN104750913A (zh) * 2015-03-05 2015-07-01 中国电建集团昆明勘测设计研究院有限公司 一种实现dwg三维模型自动转换为x三维模型的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103353866A (zh) * 2013-05-13 2013-10-16 河南大学 一种支持xna技术的三维模型文件格式转换方法
CN104537715A (zh) * 2015-01-09 2015-04-22 中国电建集团昆明勘测设计研究院有限公司 一种实现fbx三维模型自动转换为obj三维模型的方法
CN104750913A (zh) * 2015-03-05 2015-07-01 中国电建集团昆明勘测设计研究院有限公司 一种实现dwg三维模型自动转换为x三维模型的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《Patch release FBX2glTF v0.9.3》;zellski;《https://github.com/facebookincubator/FBX2glTF/releases/tag/v0.9.3》;20171201;代码 *

Also Published As

Publication number Publication date
CN110021070A (zh) 2019-07-16

Similar Documents

Publication Publication Date Title
CN110021070B (zh) FBX三维模型转换为glTF三维模型的方法、设备以及系统
CN103678705B (zh) 一种VCT文件到shapefile文件的矢量数据并行转换方法
WO2017165249A1 (en) Converting visual diagrams into code
CN113052023A (zh) Cad图纸解析方法、装置、设备及存储介质
US20150379769A1 (en) Method and apparatus for mesh simplification
CN111736762B (zh) 数据存储网络的同步更新方法、装置、设备及存储介质
CN109683858B (zh) 数据处理方法及装置
CN112001012A (zh) 一种基于bim技术预设模型的创建系统
CN116841536B (zh) 一种组件引用关系重构方法、装置、系统及存储介质
CN112818457A (zh) 基于cad图纸的bim模型智能生成方法及系统
CN104484058A (zh) 一种输出即时表情图像的方法及装置
CN114880742A (zh) 一种面向webgl引擎的Revit模型轻量化方法
CN113778961B (zh) 一种cim模型数据的生产管理方法、装置及系统
CN110008597A (zh) 基于并行计算框架的建筑信息模型三角剖分方法及装置
CN113609084A (zh) 基于bim自定义格式的数据压缩方法、装置、设备及介质
Park et al. A sharable format for multidisciplinary finite element analysis data
CN115375812A (zh) Cad数据渲染方法、装置、电子设备及存储介质
CN104243201B (zh) 网络设备测试用例对应拓扑图的存储方法及系统
CN113656044A (zh) 安卓安装包压缩方法、装置、计算机设备及存储介质
CN114296726A (zh) 一种代码生成方法、装置、计算机设备和存储介质
JP2018109898A (ja) データマイグレーションシステム
CN111610908A (zh) 一种生成框架图的方法、计算机设备及可读存储介质
CN116630552B (zh) 面向大规模的三维流程工厂模型的优化渲染方法
CN113986305B (zh) B/s模型升级的检测方法、装置、设备和存储介质
CN108319750B (zh) 基于dwg文件拆分和重组方法的地铁工程协同设计系统

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
GR01 Patent grant
GR01 Patent grant