GLTF模型添加关节控制
1. 前言
在Cesium官方示例中提供了一个控制火箭整流罩分离的例子,例子链接CZML Model Articulations。该例子展示了通过控制glb/gltf模型中的articulations
来控制模型部分关节的运动。前提条件是模型文件中有articulations属性,本文主要介绍如何在Blender等三维建模软件导出的gltf模型中添加articulations属性。
2. 环境准备
- Blender或其他主流三维建模软件:用于导出gltf模型
- VS Code:需要安装插件
glTF Tools
和STK GMDF Tools
,分别用于gltf模型预览和注入articulations属性 - 三维模型:可以到 https://github.com/AnalyticalGraphicsInc/gmdf/tree/master/samples 下载
3. 操作步骤
-
Blender中打开三维模型,以samples\VehicleTest\source\VehicleTest.blend为例,可以看到模型主要包括车身、前轮和后轮三部分,在导出gltf后可以在
nodes
属性下找到对应的部分; -
导出gltf格式的模型;
-
VS Code中预览gltf模型,可以看到gltf文件中的nodes包括上文提到的前轮、后轮,下面就可以通过添加属性来控制前后轮的运动;
-
在VehicleTest.gltf同级目录下创建VehicleTest.gmdf文件,文件内容如下:
{
"AGI_articulations": {
"articulations": [
{
"name": "Wheels",
"stages": [
{
"name": "Drive",
"type": "xRotate",
"minimumValue": -360,
"maximumValue": 360,
"initialValue": 0
}
],
"modelNodes": [
"FrontWheels",
"RearWheels"
]
}
]
}
}
AGI_articulations
和articulations
都是固定格式,主要关注modelNodes
和stages
。modelNodes
用来说明要控制的模型关节,就是上文中的前后轮;stages
用来说明关节如何运动,示例中的type
表示运动类型为沿x轴旋转,minimumValue
和maximumValue
用来控制范围。关于属性字段更加具体的含义可以参考https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/AGI_articulations/README.md#overview
-
将gmdf文件注入到gltf文件,首先在VS Code中选中
VehicleTest.gltf
文件,按住快捷键Ctrl + Shift + P
,搜索GMDF
,选择命令inject GMDF into glTF
,然后就可以看到在gltf文件中有新的内容增加了,在保存后就可以在模型预览界面中看到控制关节运动的操作界面,通过拖动滑块就可以控制轮子的运动;
4. 参考链接
[1]. Cesium示例
[2]. GMDF工具与glTF模型示例