Golang语言情怀--第128期 全栈小游戏开发:第19节:glTF 模型

2023-12-11 17:08:13 浏览数 (2)

Cocos Creator 支持 glTF 2.0 及更早的文件格式。

URI 解析

Creator 支持 glTF 中指定以下形式的 URI:

  • Data URI
  • 相对 URI 路径
  • 文件 URL
  • 文件路径

转换关系

当导入 glTF 模型到 Creator 时,glTF 中的资源将会按照以下关系转换为 Creator 中的资源:

glTF 资源

Cocos Creator 资源

glTF 场景

预制体

glTF 网格

网格

glTF 蒙皮

骨骼

glTF 材质

材质

glTF 贴图

贴图

glTF 图像

图像

glTF 动画

动画剪辑

glTF 场景

导入后,glTF 场景将转换为 Creator 中的预制体资源,glTF 场景中递归包含的节点也将按照相同层级关系一一转换为预制体中的节点。

场景根节点

预制体将使用一个不带任何空间转换信息的节点作为根节点,glTF 场景的所有 根节点 将作为该节点的子节点。

节点转换

glTF 节点中的属性将按照下表中的映射关系转换为预制体节点中的属性:

glTF 节点属性

预制体节点属性

层级关系

层级关系

位移

位置

旋转

旋转

缩放

缩放

矩阵

解压,并分别设置位置、旋转、缩放

网格引用

网格渲染器组件

蒙皮引用

蒙皮网格渲染器组件

初始权重

(蒙皮)网格渲染器组件权重

网格渲染器

若 glTF 节点引用了网格,那么导入后相对应的预制体节点也会添加网格渲染组件(MeshRenderer)。若该 glTF 节点还引用了蒙皮,那么相对应的预制体节点还会添加蒙皮网格渲染组件(SkinnedMeshRenderer)。

(蒙皮)网格渲染组件中的网格、骨骼和材质,都会与转换后的 glTF 网格、蒙皮、材质资源一一对应。

若 glTF 节点指定了初始权重,则转换后的(蒙皮)网格渲染器也将带有此权重。

glTF 网格

导入后,glTF 网格将转换为 Cocos Creator 中的网格资源。

glTF 网格中的所有 基元体 将被一一转换为 Creator 中的子网格。

若 glTF 网格指定了 权重,则相应地,转换后的 Creator 网格中也将存储相应的权重。

glTF 基元体

glTF 基元体的索引数组将一一对应转换为 Cocos Creator 子网格的索引数组。

glTF 基元模式将按照下表中的映射关系转换为 Cocos Creator 基元模式:

代码语言:javascript复制
gfx.PrimitiveMode.POINT_LIST

glTF 顶点属性将转换为 Cocos Creator 顶点属性,属性名称的转换如下表所示:

代码语言:javascript复制
gfx.AttributeName.ATTR_POSITION

注意:若 glTF 基元体中存在其他 JOINTSWEIGHTS 顶点属性,例如 JOINTS_1WEIGHTS_1,则意味着此 glTF 网格的顶点可能受到多于 4 根骨骼的影响。

对于每个顶点,所有由 JOINTS_{}WEIGHTS_{} 确定的权重信息将按权重值进行排序,取出影响权重最大的四根骨骼作为 gfx.AttributeName.ATTR_JOINTSgfx.AttributeName.ATTR_WEIGHTS

glTF 形变目标将被转换为 Cocos Creator 子网格形变数据。

glTF 蒙皮

导入后,glTF 蒙皮将转换为 Cocos Creator 中的骨骼资源。

glTF 材质

导入后,glTF 材质将转换为 Cocos Creator 中的材质资源。

glTF 贴图

导入后,glTF 贴图将转换为 Cocos Creator 中的贴图资源。

glTF 贴图中引用的 glTF 图像将转换为对相应转换后的 Cocos Creator 图像的引用。

glTF 贴图属性将按照下表中的映射关系转换为 Cocos Creator 贴图属性:

glTF 贴图属性

Cocos Creator 贴图属性

放大筛选器

放大筛选器

缩小筛选器

缩小筛选器、Mip Map 筛选器

S 环绕模式

S 环绕模式

T 环绕模式

环绕模式

glTF 贴图放大筛选器将按照下表中的映射关系转换为 Cocos Creator 贴图放大筛选器:

代码语言:javascript复制
TextureBase.Filter.NEAREST

glTF 贴图缩小筛选器将按照下表中的映射关系转换为 Cocos Creator 贴图缩小筛选器和 Cocos Creator 贴图 Mip Map 筛选器:

glTF 贴图缩小筛选器

Cocos Creator 贴图缩小筛选器

Cocos Creator 贴图 Mip Map 筛选器

NEAREST

TextureBase.Filter.NEAREST

TextureBase.Filter.NONE

LINEAR_MIPMAP_LINEAR

TextureBase.Filter.LINEAR

TextureBase.Filter.NONE

LINEAR_MIPMAP_NEAREST

TextureBase.Filter.NEAREST

TextureBase.Filter.NEAREST

LINEAR

TextureBase.Filter.LINEAR

TextureBase.Filter.NEAREST

NEAREST_MIPMAP_LINEAR

TextureBase.Filter.NEAREST

TextureBase.Filter.LINEAR

NEAREST_MIPMAP_NEAREST

TextureBase.Filter.LINEAR

TextureBase.Filter.LINEAR

glTF 贴图环绕模式将按照下表中的映射关系转换为 Cocos Creator 贴图环绕模式:

代码语言:javascript复制
TextureBase.WrapMode.CLAMP_TO_EDGE

glTF 图像

导入后,glTF 图像将转换为 Cocos Creator 中的图像资源。

当 glTF 图像的 URI 是 Data URI 时,图像数据将从 Data URI 中获取。否则,将根据 Cocos Creator 图像位置解析算法 解析并引用外部图像文件,其中 url 就是 glTF 图像的 URI,startDir 为 glTF 文件所在目录。

glTF 动画

导入后,glTF 动画将转换为 Cocos Creator 动画资源。

本期就到这里,下期再见。

同学们,兴趣是最好的老师;只争朝夕,不负韶华!加油!

参考资料:

Go语言中文文档

http://www.golang.ltd/

0 人点赞