Cesium 实战 - 通过 Blender 将模型组件拆解为独立子模型

news2024/11/26 4:22:57

Cesium 实战 - 通过 Blender 将模型组件拆解为独立子模型

    • 拆分模型
      • 1.导入模型(J15.glb)
      • 2.拆分模型
      • 3.保存模型
    • 完整代码
    • 在线示例

上篇博客介绍了 Cesium 实战 - AGI_articulations 扩展:模型自定义关节动作

这篇接着介绍一下,模型组件拆分为独立模型。

本文包括 拆分模型、完整代码以及在线示例三部分


拆分模型

模型组件拆解为独立模型相对比较简单,主要通过 Blender 来完成,以下是操作步骤:

1.导入模型(J15.glb)

(1)双击打开软件

在这里插入图片描述

(2)选中默认元素,按 delete 删除

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述


2.拆分模型

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

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

在这里插入图片描述

(2)点击选中红框内的导弹(J15_31),复制(ctrl+c)。

在这里插入图片描述

(3)新开一个blender软件窗口,粘贴(ctrl+v)。

导弹(J15_31)的位置、大小、比例等属性均与原模型一致。

此时导弹(J15_31)已经是独立的模型,与原模型(J15)无关联。

在这里插入图片描述

(4)移除(按 delete 键)原模型(J15)的导弹组件(J15_31

在这里插入图片描述


3.保存模型

(1)保存导弹模型(J15_31)

注意:不要对导弹模型(J15_31)进行任何修改。

File-export-glft。这里需要导出为 gltf 或者 glb。

注意:这里的模型名称,最好与原模型相关,比如:J15_J15_31

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

(2)保存原模型(J15),与保存导弹操作一致。

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


总结:经过拆分的模型 J15_split 和 J15_J15_31 可以共同渲染到地球中,并且只要将坐标、高度以及比例、分辨率等模型参数设置一致,他们的相对位置与拆分前是相同的。

通过Cesium CZML可以分别给他们设置不同的行进时间以及轨迹,实现模拟导弹精准打击的效果。

完整代码

const czml = [
            {
                "id": "document",
                "name": "SpaceX",
                "version": "1.0",
                // 需要注意的是,整个地球对象公用一个时钟系统,如果加载多个 czml,请保证时间一致
                // 渲染加载其他时钟相关的对象,也要注意时间一致
                "clock": {
                    // 运动的时间区间
                    "interval": "2023-06-14T10:00:00Z/2023-06-14T10:30:33Z",
                    // 当前时间
                    "currentTime": "2023-06-14T10:00:00Z",
                    // 运动速率
                    "multiplier": 50,
                    // 是否循环:CLAMPED 不循环;LOOP_STOP 循环
                    "range": "CLAMPED",
                    // cesium 系统时钟速率
                    "step": "SYSTEM_CLOCK_MULTIPLIER"
                }
            },
            // J15 主体
            {
                "id": "Vulcan",
                "availability": "2023-06-14T10:00:00Z/2023-06-14T10:30:33Z",
                "name": "Vulcan",
                // 运动路径
                "path": {
                    "show": [
                        {
                            "interval": "2023-06-14T10:00:00Z/2023-06-14T10:30:33Z",
                            "boolean": true
                        }
                    ],
                    "width": 5,
                    "resolution": 1,
                    "material": {
                        polylineGlow: {
                            color: {rgba: [0, 0, 255, 255]},
                            glowPower: 0.25,
                        },
                    },
                },
                // 模型
                "model": {
                    "show": true,
                    "gltf": [
                        {
                            "interval": "2023-06-14T10:00:00Z/9999-12-31T23:59:59.9999999Z",
                            "uri": "https://openlayers.vip/examples/resources/model/j15-main.glb"
                        },
                    ],
                    "minimumPixelSize": 256,
                    "scale": 3,
                    "runAnimations": false,
                },
                // 运动位置
                "position": {
                    // 插值
                    "interpolationAlgorithm": "LAGRANGE",
                    // 注意插值参数
                    "interpolationDegree": 1,
                    "referenceFrame": "FIXED",
                    "epoch": "2023-06-14T10:00:00Z",
                    // 位置信息
                    // 时间、x、y、z
                    "cartesian": [
                        0.000, -2181756.507204248, 4401502.463808623, 4082345.0951582263,
                        300.000, -2221900.867803482, 4405392.727091728, 4056473.1271699946,
                        900.000, -2252772.6404420133, 4418632.02508438, 4025043.2226449093,
                        1500.000, -2298167.906071293, 4420521.33707002, 3997259.6931305756,
                    ]
                },
                // 方向
                "orientation": {
                    // 自动计算运动朝向
                    "velocityReference": "#position"
                },
            },
            // J15 导弹 1
            {
                "id": "Vulcan1",
                "availability": "2023-06-14T10:00:00Z/2023-06-14T10:14:33Z",
                "name": "Vulcan1",
                // 运动路径
                "path": {
                    "show": [
                        {
                            "interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z",
                            "boolean": false
                        }
                    ],
                    "resolution": 1,
                },
                // 模型
                "model": {
                    "show": true,
                    "gltf": [
                        {
                            "interval": "2023-06-14T10:00:00Z/9999-12-31T23:59:59.9999999Z",
                            "uri": "https://openlayers.vip/examples/resources/model/j15-1.glb"
                        },
                    ],
                    "scale": 3,
                    "minimumPixelSize": 40,
                    "runAnimations": false,
                    // 导弹模型边框
                    "silhouetteColor": { "rgba": [255, 0, 0, 255]},
                    // 边框宽度
                    "silhouetteSize": 1
                },
                // 运动位置
                "position": {
                    // 插值
                    "interpolationAlgorithm": "LAGRANGE",
                    "interpolationDegree": 1,
                    "referenceFrame": "FIXED",
                    "epoch": "2023-06-14T10:00:00Z",
                    // 位置信息
                    // 时间、x、y、z
                    "cartesian": [
                        0.000, -2181756.507204248, 4401502.463808623, 4082345.0951582263,
                        300.000, -2221900.867803482, 4405392.727091728, 4056473.1271699946,
                        600.000, -2252772.6404420133, 4418632.02508438, 4025043.2226449093,
                        900.000, -2291045.540812567, 4445366.40019355, 3945320.706645339,
                    ]
                },
                // 方向
                "orientation": {
                    // 自动计算运动朝向
                    "velocityReference": "#position"
                },
            },
           
        ];
const viewer = new Cesium.Viewer("cesiumContainer", {
  shouldAnimate: true,
});

const dataSourcePromise = viewer.dataSources.add(
  Cesium.CzmlDataSource.load(czml)
);

dataSourcePromise
  .then(function (dataSource) {
  const entity = dataSource.entities.getById("Vulcan");
    viewer.trackedEntity = entity;
    entity.viewFrom = new Cesium.Cartesian3(-21756.507204248, 4412.463808623,5000);
  
  })
  .catch(function (error) {
    console.error(error);
  });


在线示例

J15 模拟攻击

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

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

相关文章

【Redis】高可用之三:集群(cluster)

本文是Redis系列第6篇,前5篇欢迎移步 【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确&#xf…

YZ04:文本批量替换使用说明文档

【分享成果,随喜正能量】达摩祖师说:“不谋其前,不虑其后,不恋当今。”你內心安适,就会宠辱不惊,俯仰无愧,从一天到一年,从一年到一生,秒秒感受安详,活在至真…

MySQL-数据库读写分离(中)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

常见java知识点1

目录 1 什么是Spring框架?Spring框架有哪些主要模块? 2 使用Spring框架有什么好处? 3 Java常用的包(列举六个) 4 Arraylist 和 Linkedlist 的区别 5 HashMap和Hashtable的区别 6 Java中常见的…

vue-sticky简单使用(实现吸顶效果)

参考链接 vue-sticky:在页面滚动时将指定元素固定在窗口上的某个位置 生效条件如下: 1、父元素不能设置 overflow:hidden 或者 overflow:auto 属性 2、至少指定 top 、bottom 、left 、right 4 个值中的一个,否则只会处于相对定位 3、父元素…

OpenCVForUnity(六)图像的对比度和亮度

文章目录 前言公式讲解Unity嵌套循环实现使用convertTo实现亮度和对比度调整:伽马矫正 前言 图片处理中这也是非常常用的功能,下面我们一起来学习一下如何在OpenCVForUnity中修改图像的对比度亮度 图像处理中的常见算子可以将一个或多个输入图像转换为输出图像。这些变换包括点…

tdengine超级表创建

tdengine有官网文档,这里就把实际使用的SQL贴出来吧。 创建超级表: CREATE STABLE superTable(time TIMESTAMP, val double) TAGS (point varchar(100));执行SQL后会创建一个叫superTable的超级表。 建完超级表后再创建子表,SQL如下&#…

8、PHP访问权限配置与报错处理:You don‘t have permission to access this resource.

这是由于阿帕奇服务器的权限设置导致的。 解决办法: 1、由于我们之前已经设置了虚拟主机,我们在WAMPserver中,找到添加虚拟主机的配置文件的路径 2、打开这个文件,修改相应的虚拟主机的访问权限,Require后面改为all …

Cesium Terrain Builder (CTB) 简单使用_地形切片

Cesium Terrain Builder (CTB) 简单使用_地形切片 目录 Cesium Terrain Builder (CTB) 简单使用_地形切片 官网地址: winr(cmd)打开命令提示符工具运行: Create a GDAL Virtual Dataset (optional) Create Cesium Terrain fi…

CentOS系统下Docker安装部署Strapi

Nodejs 16 安装 移除旧版本的 node yum remove -y nodejs npm使用以下命令将存储库添加到系统 curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -配置存储库之后可以安装 yum install -y nodejs查看版本 node -v下载 yarn 包管理 curl -sL https://dl.yar…

数字化时代,智能文件工具让办公升级

无论是在办公室还是在学校,文件管理是我们日常工作中不可或缺的一环。传统的文件整理方式可能需要花费大量的时间和精力,而且常常容易出现混乱和遗漏。然而,随着科技的不断进步,我们现在有幸生活在一个数字化时代,因此…

ELK(elasticsearch+logstash+kibana+beats)

什么是ELK Elasticsearch:Elasticsearch(以下简称ES) 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 ES是 Elastic Stack 的核心,采用集中式数据存储,可以通过机器学习来…

ylb-接口2首页产品数据和接口3产品列表

总览: 1、service处理(分页查询) 在api模块下service包,创建一个产品接口ProductService:(目前方法为分页查询queryByTypeLimit(Integer pType,Integer pageNo,Integer pageSize)) package…

如何破解中小企业数字化转型难点?建议来了!

打开任何一个搜索引擎,只要输入“中小企业数字化转型”,关于痛点、难处的文章就会铺面而来,难在哪里,其实很好解答,关键在于,如何解决这一个个难处。 PS:给大家整理了一份完整版的《中小企业如…

物理层 ———— 奈氏准则 香农定理

1. 失真的现象----码间串扰 2.奈氏准则 eg: 3.香农定理 eg: 3.两个准则的比较

excel表格设置下拉选项

excel表格设置下拉选项 最后保存,即可设置完成。

RAM Failed to establish a new connection: [Errno 11001] getaddrinfo failed

在跑RAM(​Recognize Anything Model​)的时候报了一个错: Failed to establish a new connection: [Errno 11001] getaddrinfo failed ① 没有帮助我解决,对大家可能有用: 查到别人的解决方案是: 开放C:\Windows\System32\drivers\etc\hos…

和chatgpt学架构02-环境搭建

目录 1 安装vs code2 vs code功能介绍3 安装nodejs4 安装vue5 在vs code打开工程总结 我们在上一篇 技术选型 里咨询了chatgpt前后端的框架选择和数据库的选择。有了框架之后就需要选择合适的开发工具了,继续咨询一下chatgpt 我现在选型,前端使用vue&am…

Kubernetes集群故障排查—审计

Kubernetes 审计(Auditing) 功能提供了与安全相关的、按时间顺序排列的记录集, 记录每个用户、使用 Kubernetes API 的应用以及控制面自身引发的活动。 审计功能使得集群管理员能够回答以下问题: 发生了什么?什么时候…

跨文化合作:如何解决海外网红营销中的文化差异?

随着社交媒体的快速发展,海外网红营销已成为许多品牌和企业获取国际市场的有效方式。然而,由于不同国家和地区存在着独特的文化差异,如语言、价值观、习俗等,这也给品牌进行海外网红营销带来了一系列挑战。本文Nox聚星将和大家探讨…