Cesium 实战 - AGI_articulations 扩展:模型自定义关节动作

news2024/7/6 17:50:16

Cesium 实战 - AGI_articulations 扩展:模型自定义关节动作

  • 简要概述
  • 两种方式实现模型组件动作
  • 模型添加关节(articulations)
    • 1.导入模型(J15.glb)
    • 2.查看模型内部组件信息(名称)
    • 4.将需要J15.glb复制到 public/model 文件夹下
    • 5.导入J15.glb为glTF格式。
    • 6.选中J-15.gltf,预览数据以及模型效果
    • 7.在 J-15.gltf 同级目录下,创建 J-15.gmdf 文件
    • 8.在J-15.gmdf添加自定义关节内容
    • 9.将J-15.gmdf注入到J-15.gltf。
    • 10.预览查看 J-15.gltf 的关节动作(articulations)
  • 在线示例

最近的项目需要操作模型,除了模型本身的移动、飞行、属性、颜色等调整,还需要调整模型的组件。

比如需要模拟飞机打击目标,这样的话,需要给飞机上的导弹组件增加动作来实现需要的效果。

结合之前在看到的参考博客,经过各种尝试,总算是实现了效果,这里总结一下。

本文包括 简要概述、两种方式实现模型组件分离、模型添加关节(articulations)、在线示例 四部分。


简要概述

简要概述一下自己对模型组件动作的理解:

本身我是 java 出身,按照面向对象的思想来讲,模型应该作为一个独立的整体,而颜色、属性、动作等都属于模型对象,可以通过接口来修改属性,不应该直接修改模型的内置属性以及动作。

以下是 AGI_articulations 官方给出的解释也是契合面向对象思想的:

In glTF 2.0, the core animation system is geared towards the typical graphics industry usage pattern, where the model author(s) decide which parts of the model will move, as well as the exact nature and timing of those movements, at author time. It does not allow for a case where certain parts of the model are designated by the author as movable, but their exact movements are not known until after the model is built.

简单翻译:在 glTF 2.0 中,glTF 模型在设计之初便规定好了所有的性质、动作以及时间,此后则不允许直接修改。

对于同一个模型不同组件实现不同的动作,虽然不推荐,但是 glTF 模型提供了类似于接口的扩展,即 AGI_articulations

使用模型的人可以通过 AGI_articulations 规则,对模型的组件自由添加动作,达到自己想要的效果。


但是通过 articulations 来实现模型组件动作,只能设置相对位置,比如相对于模型主体的 Y 轴方向偏离 1000 米,或者相对于模型主体旋转 90 度等等。这样的话,对于距离相关的动作,可能准确度会差一些,不如通过坐标来设置模型更实用。

因此,如果是简单动作,比如直升机翼旋转,车轮旋转等,可以通过关节(articulations )动作的方式实现。

比较复杂的动作,比如,实现航母编队以及航母上的战斗机飞行动作

最好是将航母模型、编队战舰模型、战斗机模型等都拆解为一个一个独立的模型,分别控制这些模型的动作,来实现航母战斗群的效果

比如:在某个时间段内(CZML),航母、编队以及战斗机同时在海上航行,当行进到设定好的时间节点,战斗机启动飞行动作,滑行一段时间之后起飞,与航母模型分离。

由于博客篇幅有限,本文只介绍模型添加关节(articulations),模型组件拆分为独立模型由下篇博客介绍。


两种方式实现模型组件动作

关于 Cesium 模型组件分离以及动作问题,初步想到两种实现方式,即模型组件拆解为独立模型和模型关节(articulations)动作

1. 模型组件拆分为独立模型(可以通过 Blender 完成,本文不做详细介绍)

比如 Cesium 官方火箭模型,可以将火箭主体与推进器拆分为独立的模型组件,在通过 czml 在不同时刻分别描述其行进轨迹,实现模拟攻击效果。

在这里插入图片描述

2. 通过工具给模型增加关节动作(通过 Blender + gltf-vscode 完成,下文有详细介绍)

比如 Cesium 官方火箭模型,可以给推进器增加自定义关节动作(X、Y、Z轴的移动以及旋转等),实现模拟攻击效果。

经过实验,从实际效果来看,更推荐第一种方式,独立可控,位置精准!

在这里插入图片描述

由于博客篇幅有限,本文只介绍模型添加关节(articulations),模型组件拆分为独立模型由下篇博客介绍。


模型添加关节(articulations)

模型添加关节动作,可以通过 Blender + gltf-vscode 来完成,以下是操作步骤:

1.导入模型(J15.glb)

(1)双击打开软件(以3.5为例) 在这里插入图片描述

在这里插入图片描述

(2)选中默认元素,按 delete 删除,清空所有元素。

在这里插入图片描述

(3)点击File-import-gltf/glb,也可以选择导入其他格式(这里以 GLB 为例)。

在这里插入图片描述

(4)导入成功,模型会加载,右侧会显示所有组件名以及模型属性。

注意:如果不显示各个组件,可能是模型本身的原因。

在这里插入图片描述

2.查看模型内部组件信息(名称)

(1)选中模型组件,这里以J15正下方导弹为例

安住鼠标中键(滚轮),拖动调整模型视角:

在这里插入图片描述

(2)点击选中红框内的导弹,在右侧下滑查找选中的组件(选中的组件会变色)。

获取组件名称(J15_31)。

在这里插入图片描述

3.打开 gltf-vscode 项目,只能用 VScode 打开。

第一次使用 gltf-vscode,需要下载插件,可参考:Cesium 实战 - 通过 Blender 将模型组件拆解为独立子模型

在这里插入图片描述
默认打开 readme 文件,选择预览模式(右键-打开预览),可以查看项目介绍:

在这里插入图片描述
在这里插入图片描述

4.将需要J15.glb复制到 public/model 文件夹下

注意:GLB格式模型,不能直接预览,需要导入。

在这里插入图片描述

5.导入J15.glb为glTF格式。

(1)创建 j15 文件夹(GLB 转为 glFT 会拆解为多个文件,放入文件夹方便管理)

在这里插入图片描述

(2)在J15.glb右键 - glTF: Import from GLB

在这里插入图片描述

(3)选择 j15 文件夹,不建议修改名称,保存。

在这里插入图片描述

以下是转为glTF的文件结构,注意:所有文件均为依赖,不可删除。

在这里插入图片描述

6.选中J-15.gltf,预览数据以及模型效果

注意:需要在J-15.gltf文件内右键-glTF: Preview 3D Model

在这里插入图片描述

在这里插入图片描述

7.在 J-15.gltf 同级目录下,创建 J-15.gmdf 文件

注意后缀名以及 gltf 同级目录。

在这里插入图片描述

8.在J-15.gmdf添加自定义关节内容

这里设定好关节名称、动作名称、动作类型以及阈值等。(注意:不能添加注释!!!

在这里插入图片描述
在这里插入图片描述

注意:关节名称和动作名称与 Cesium 使用时相对应!

比如:missiles MoveZ 对应 J-15.gmdf 的关节属性(missiles)中的动作(MoveZ);number中的值处于MoveZ的阈值之间。

CZML 文件配置:

在这里插入图片描述

9.将J-15.gmdf注入到J-15.gltf。

(1)在 J-15.gltf 文件中右键 - command palette

在这里插入图片描述

(2)搜索 inject,选择 Inject GMDF into glTF

在这里插入图片描述
(3)查看J-15.gltf是否注入成功

检索查看是否包含 AGI_articulations:

在这里插入图片描述

在这里插入图片描述

10.预览查看 J-15.gltf 的关节动作(articulations)

(1)选择 Cesium 引擎

在这里插入图片描述

(2)调整关节参数,查看效果

在这里插入图片描述

在这里插入图片描述

PS:不知为何,图片一直违规,这里不得已把导弹马赛克一下!

总结:至此 glTF 增加关节已经完成,只要在 gltf-vscode 的 Cesium 引擎中可以预览,那么就可以通过 Cesium 代码在地球中加载渲染。

需要注意的是:gltf 和 gmdf 实际为 JSON 文件,因此不能添加注释!!!


在线示例

J15 模拟攻击示例


参考博客:

[1] AGI_articulations

[2] GLTF模型添加关节控制

[3] cesium里面控制gltf模型部件移动和旋转

[4] 三维模型下载与动画控制

[5] Model Articulations “Number” variable

[6] AnalyticalGraphicsInc

[7]:Cesium 源码解析 Model(三)

[8] czml-writer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker常见命令(以备不时之需)

参考官网:https://docs.docker.com/engine/reference/commandline/cli/ 帮助启动类命令 启动docker: systemctl start docker 停止docker: systemctl stop docker 重启docker: systemctl restart docker 查看docker状态&…

架构训练营笔记系列:面向复杂度的设计

面向复杂度的设计 DDD 是可扩展架构的设计技巧,不是架构方法论。不关注高性能、高可靠。 架构本质:为了降低软件系统复杂度 怎么做架构设计 ?思路是分析系统需求找到系统复杂的地方,然后设计方案。 复杂度相关有哪些&#xff1…

Unity的PostProcessing后处理使用介绍

大家好,我是阿赵。 上一篇文章说了Unity的PostProcessing后处理有bug并提供了解决办法,这里顺便介绍一下PostProcessing的用法。 一、安装 打开PackageManager,然后搜索Post,应该就能看到左边出现搜索结果,选择&…

一个人的面相能直接反映其个性与命运

中国传统文化,博大精深,面相学只是其中一种。 在古代,面相学却是一门非常实用的学科, 尤其是经过了一代代人的发展,面相学得到了完善之后,他的准确性往往会超过现代人的预料。相由心生,面相是对…

用户端App 测试方法与技术

目录: app测试体系app项目测试流程app结构讲解app测试设计思路app常见bug解析常用模拟器使用android开发者选项安装mumu模拟器adb命令介绍adb环境搭建与配置adb与设备交互adb安装卸载应用adb命令启动页面adb命令清缓存adb文件传输adb日志操作adb命令操作Android设备…

DRF+Vue.JS前后端分离项目实例(下) --- Vue.js 前端实现代码

本文上篇请 点击阅读 1. 需求说明 本文以学生信息查询功能为例,采用前后端分离架构,后端提供RESTFul 接口,前端代码用Vue.js Bottstrap实现。 1.1 本例要求提供如下查询功能: 列表查询、单条查询 添加学生信息 更改学生信息 删…

在线试用Stable Diffusion生成可爱的图片

文章目录 一、 Stable Diffusion 模型在线使用地址:二、模型相关版本和参数配置:三、图片生成提示词与反向提示词:提示词1提示词2提示词3提示词4提示词5 一、 Stable Diffusion 模型在线使用地址: https://inscode.csdn.net/insc…

python 读取npy文件

import numpy as np test np.load("I:/软件/mask.npy") print(test) 如下图所示:

Web3 智能合约通过数组方式存储更多学生数据

之前的文章 Web3 在Truffle项目中编写出自己的第一个solidity智能合约带大家写了一个相对捡漏的智能合约 这样 每次 我们set 后 都会将原来的数据覆盖掉了 那么 有些人可能会想 那我们弄个数组 将新的数据全部加到数组里不就行了吗? 这个想法其实就很不错 我们可以…

数据结构与算法--javascript(持续更新中...)

一. 概论 1. 数据结构 队列:一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项;队列在尾部添加新元素,并从头部移除元素。最新添加的元素必须排在队列的末尾。(例如:去食堂排队打饭,排在前…

JsonView下载安装

文章目录 一、JsonView概述二、JsonView下载三、JsonView安装四、JsonView测试 一、JsonView概述 SONView是一款非常好用的Json格式查看器。在日常开发调试中经常会遇到Json格式的数据需要解析阅读,但Json格式数据阅读性极差,JSONView可以帮我们解决Jso…

基于协同过滤算法的智能推荐点餐系统小程序/基于微信小程序的点餐系统

摘 要 在社会的发展和科学技术的进步,现在我们所生活的世纪是一个集信息高度数字化,网络化,信息化的,以网络为核心的社会。随着移动互联网的飞速发展,微信客户端的应用也逐渐广泛起来。与此同时,我国每个人…

上手CUDA编程

上手CUDA编程 文章目录 上手CUDA编程矩阵加法例子编译 查看本机GPU信息内存管理函数专门二维数组拷贝函数 Reference>>>>> 欢迎关注公众号【三戒纪元】 <<<<< 矩阵加法例子 编写 CUDA C 程序时&#xff0c; 要将文件命名为 *.cu&#xff0c;cu文…

新版危险废物标签二维码制作教程

生态环境部发布的《危险废物识别标志设置技术规范》已经在2023年7月1日正式实施&#xff0c;除了对危废标签格式、内容的规范&#xff0c;明确规定新版危废标签需要包含数字识别码和二维码&#xff0c;实现危险废物“一物一码”管理。 其中危险废物标签中的二维码部分&#xff…

【SuperPoint】语义SLAM深度学习用于特征提取

1. 概况 作者的写作思路很清晰&#xff0c;把各个技术点这么做的原因写的很清楚&#xff0c;一共三篇&#xff0c;另外两篇分别是2016年和2017年发表的&#xff0c;这三篇文章通读下来&#xff0c;可以看清作者在使用深度学习进行位姿估计这一方法上的思路演变过程&#xff0c…

IDEA中 jps+jmap+jconsole命令查看堆内存情况

结论 1.获取进程idjps2.jmap 某个时刻堆内存的情况jdk8之前jmap -heap pid 15876jdk8之后jhsdb jmap --heap --pid 158763.jconsole 动态查看堆内存情况&#xff0c;直接jconsole ,然后弹出可视化窗口jconsole其中12 要结合使用&#xff0c;且是静态的查看&#xff1b;3可以单…

【c++报错】无法打开自己的工程项目(C++ 无法打开文件“xxx.lib”)

问题&#xff1a; C 无法打开文件“xxx.lib” 问题分析&#xff1a; 在进行单个生成的时候&#xff0c;可以生成成功&#xff0c;也可以运行程序。但是点击全部重新生成时&#xff0c;就显示无法打开文件“xxx.lib”。 观察生成顺序&#xff0c;发现exe的程序&#xff08;调用…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的实践

熟悉蒸散发ET及其组分&#xff08;植被蒸腾Ec、土壤蒸发Es、冠层截留Ei&#xff09;、植被总初级生产力GPP的概念和碳水耦合的基本原理&#xff1b;掌握利用Python与ArcGIS工具进行课程相关的操作&#xff1b;熟练掌握国际上流行的Penman-Monteith模型&#xff0c;并能够应用该…

yarn 无法加载文件 CUsersAdministratorAppDataRoamingnpmyarn.ps1,因为在此系统上禁止运行脚本。的解决方案

yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本。 1、问题描述 执行yarn相关命令时报错&#xff1a; yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统…

PHP 学生信息管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 学生信息管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88027229https://down…