Cesium 实战 - Blender调整模型组件原点,实现直升机尾翼旋转

Cesium 实战 - Blender调整模型组件原点,实现直升机尾翼旋转

    • 1.模型原点问题
    • 2.导入模型(zhisheng.glb)
    • 3.导出模型
    • 4. 通过 czml 调试代码

某个项目需求,在操作直升机模型的时候,希望直升机机翼和尾翼旋转起来。

机翼旋转比较容易,找到组件名称,按照之前的 《Cesium 实战 - AGI_articulations 扩展:模型自定义关节动作》设置即可实现。

但是在设置尾翼的时候,出现问题,这里记录一下问题以及解决方法。

本文介绍使用 Blender软件调整模型的某个组件的原点,解决某个模型组件旋转中心点错误的问题。


1.模型原点问题

在 gltf-vscode 项目工具中,增加关节旋转之后,发现某个组件没有按组件的中心点旋转,而是按整个模型的中心点旋转。

随着直升机尾翼旋转参数的调整,尾翼绕直升机的中心点旋转,如下图:

红色圆圈是尾翼的旋转线路,黄色小圆圈是旋转中心点。

在这里插入图片描述

调整旋转角度之后尾翼的位置:
在这里插入图片描述

再次调整旋转角度之后尾翼的位置:
在这里插入图片描述
解决办法:通过Blender设置模型尾翼组件的原点位置即可。

2.导入模型(zhisheng.glb)

(1)双击打开软件

在这里插入图片描述
(2)选中默认元素,按delete删除

在这里插入图片描述

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

在这里插入图片描述

(4)导入成功,选中直升机尾翼组件。

在这里插入图片描述
选中尾翼之后,右键-设置原点-原点-几何中心

在这里插入图片描述

3.导出模型

(1)不用保存Blender文件,直接导出模型

File-export-glft。这里需要导出为 glTF 或者 GLB。

在这里插入图片描述

在这里插入图片描述

在 gltf-vscode 项目工具中,设置关节动作之后,调整尾翼旋转角度,尾翼会按照正确的中心点旋转:

在这里插入图片描述

在这里插入图片描述

总结:模型组件可能会有不同的局部坐标原点,根据实际需求调整即可。

导出成功之后,可以参考《Cesium 实战 - AGI_articulations 扩展:模型自定义关节动作》来查看是否设置成功。

4. 通过 czml 调试代码

const czml = [
    {
        "id": "document",
        "name": "SpaceX",
        "version": "1.0",
        // 需要注意的是,整个地球对象公用一个时钟系统,如果加载多个 czml,请保证时间一致
        // 渲染加载其他时钟相关的对象,也要注意时间一致
        "clock": {
            // 运动的时间区间
            "interval": "2023-06-14T10:00:00Z/2023-06-14T10:17: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:17:33Z",
        "name": "Vulcan",
        // 运动路径
        "path": {
            "show": [
                {
                    "interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z",
                    "boolean": true
                }
            ],
            "width": 5,
            "resolution": 1,
            "leadTime": [
                {
                    "interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z",
                    "epoch": "2023-06-14T10:00:00Z",
                    "number": [
                        0, 1053,
                        1053, 0
                    ]
                }
            ],
            "trailTime": [
                {
                    "interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z",
                    "epoch": "2023-06-14T10:00:00Z",
                    "number": [
                        0, 0,
                        1053, 1053
                    ]
                }
            ],
            "material": {
                polylineGlow: {
                    color: [{
                        "interval": "2023-06-14T10:00:00Z/2023-06-14T10:10:00Z",
                        rgba: [255, 0, 0, 255],
                    },
                        {
                            "interval": "2023-06-14T10:10:00Z/2023-06-14T10:13:20Z",
                            rgba: [0, 0, 255, 255],
                        }
                    ],
                    glowPower: 0.25,
                    // taperPower: 0.5,
                },
            },
        },
        // 模型
        "model": {
            "show": true,
            "gltf": [
                {
                    "interval": "2023-06-14T10:00:00Z/9999-12-31T23:59:59.9999999Z",
                    "uri": "./staticForMap/assets/model/zhishegnji_rotor.glb"
                },
            ],
            "minimumPixelSize": 256,
            "scale": 3,
            "runAnimations": false,
            // 自定义动作,需要模型存在自定义关节属性
            "articulations": {
                // RotateX 为 glTF 中自定义的关节名称
                "main_rotor RotateZ": {
                    "epoch": "2023-06-14T10:00:00Z",
                    "number": [
                        // 当前 epoch 时刻,第 0 秒的时,X 轴旋转角度(度)
                        0, 0,
                        1800, 3600000000,
                        // 150, -25,
                        // 300, -80,
                    ]
                },
                "rear_rotor RotateX": {
                    "epoch": "2023-06-14T10:00:00Z",
                    "number": [
                        // 当前 epoch 时刻,第 0 秒的时,X 轴旋转角度(度)
                        0, 0,
                        1800, 3600000000,
                        // 150, -25,
                        // 300, -80,
                    ]
                },
            }
        },
        // 运动位置
        "position": {
            // 插值
            "interpolationAlgorithm": "LAGRANGE",
            "interpolationDegree": 2,
            "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, -2298167.906071293, 4420521.33707002, 3997259.6931305756,
            ]
        },
        // 方向
        "orientation": {
            // 自动计算运动朝向
            "velocityReference": "#position"
        },
    },
];

const viewer = new Cesium.Viewer("cesiumContainer", {
  shouldAnimate: true,
});

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

dataSourcePromise
  .then(function (dataSource) {
    viewer.trackedEntity = dataSource.entities.getById("test model");
  })
  .catch(function (error) {
    console.error(error);
  });

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?

Kafka怎么做到避免消息重复消费的? 消费者组是什么? 消费者: 1、订阅Topic(主题) 2、从订阅的Topic消费(pull)消息, 3、将消费消息的offset(偏移量)保存在K…

Codeforces算法心得——A. Escalator Conversations

大家好,我是晴天学长,今天开始尝试一些外国的题目了,不得不说,创新性挺高的,然后是全英文,也可以练练英文的水平,后面我会持续的更新的!加油!💪💪…

100% RNN language model ChatRWKV 相关开源项目

RWKV(读作RwaKuv)借鉴了RNN的移动平均模型(MA),将transformer的 O ( T 2 d ) O(T^2d) O(T2d)复杂度降低到 O ( T d ) O(Td) O(Td),同时保持较好的结果表现。RWKV也是一个开源模型,甚至其介绍主页的html代码都有开源。以…

《Vue3+Typescript》一个简单的日历组件实现

这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 主页: oliver尹的主页 格言: 跌倒了爬起来就好~ 目录 一、…

如何彻底卸载VMware

目录 第一章、停止并卸载VMware程序1.1)停止VMware有关的服务1.2)打开任务管理器停止进程1.3)卸载VMware程序 第二章、残留文件删除2.1)打开注册表2.2)删除注册表残留文件2.3)C盘文件删除 友情提醒&#xf…

从分片传输到并行传输之大文件传输加速技术

随着大文件的传输需求越来越多,传输过程中也会遇到很多困难,比如传输速度慢、文件安全性低等。为了克服这些困难,探讨各种大文件传输加速技术。其中,分片传输和并行传输是两种比较常见的技术,下面将对它们进行详细说明…

MySQL之深入InnoDB存储引擎——物理文件

文章目录 一、参数文件二、日志文件三、表结构定义文件四、InnoDB 存储引擎文件1、表空间文件2、重做日志文件 一、参数文件 当 MySQL 实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数。在默认情况…

【Python】logging模块笔记

目录 日志级别 四个组件 记录器 处理器 处理器 格式化器 格式 用法1:小项目可以采用编程的方法 用法2:建议采用配置文件的方式 用法3: 字典配置 日志级别 #默认的日志输出为warning # 使用baseConfig() 来指定日志输出级别 # 同时&#x…

【广州华锐互动】无人值守变电站AR虚拟测控平台

无人值守变电站AR虚拟测控平台是一种基于增强现实技术的电力设备巡检系统,它可以利用增强现实技术将虚拟信息叠加在真实场景中,帮助巡检人员更加高效地完成巡检任务。这种系统的出现,不仅提高了巡检效率和准确性,还降低了巡检成本…

【Nginx12】Nginx学习:HTTP核心模块(九)浏览器缓存与try_files

Nginx学习:HTTP核心模块(九)浏览器缓存与try_files 浏览器缓存在 Nginx 的 HTTP 核心模块中其实只有两个简单的配置,这一块也是 HTTP 的基础知识。之前我们就一直在强调,学习 Nginx 需要的就是各种网络相关的基础知识&…

C++设计模式笔记

设计模式 如何解决复杂性? 分解 核心思想:分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单的问题。 抽象 核心思想:从高层次角度讲,人们处理复杂性有一个通用的技术,及抽象。…

《重构的时机和方法》——让你的代码更健壮、更易维护

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

微服务体系<1>

我们的微服务架构 我们的微服务架构和单体架构的区别 什么是微服务架构 微服务就是吧我们传统的单体服务分成 订单模块 库存模块 账户模块单体模块 是本地调用 从订单模块 调用到库存模块 再到账户模块 这三个模块都是调用的同一个数据库 这就是我们的单体架构微服务 就是…

8.docker仓库

文章目录 Docker仓库本地私有仓库Docker HarborDocker harbor部署访问页面创建用户下载私有仓库镜像harbor同步 Docker仓库 本地私有仓库 ##先下载 registry 镜像docker pull registry##修改配置文件,在 daemon.json 文件中添加私有镜像仓库地址vim /etc/dock…

Windows使用Notepad++编辑Linux服务器的文件

🚀 Windows使用Notepad编辑Linux服务器的文件 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介…

Verilog语法学习——LV2_异步复位的串联T触发器

LV2_异步复位的串联T触发器 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述: 用verilog实现两个串联的异步复位的T触发器的逻辑&#x…

Mac 安装启动RabbitMq

使用HomeBrew安装 未安装的请参照我的这篇Mac安装HomeBrew文章 安装 执行命令 brew install rabbitmq启动方式 brew services start rabbitmq端口说明 端口用处5672RabbitMQ通讯端口,也就是连接使用的端口15672RabbbitMQ管理界面端口,需要开启Manage…

Django实现音乐网站 ⑴

使用Python Django框架制作一个音乐网站。 目录 网站功能模块 安装django 创建项目 创建应用 注册应用 配置数据库 设置数据库配置 设置pymysql库引用 创建数据库 创建数据表 生成表迁移文件 执行表迁移 后台管理 创建管理员账户 启动服务器 登录网站 配置时区…

图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index

LLM 如火如荼地发展了大半年,各类大模型和相关框架也逐步成型,可被大家应用到业务实际中。在这个过程中,我们可能会遇到一类问题是:现有的哪些数据,如何更好地与 LLM 对接上。像是大家都在用的知识图谱,现在…

web APIs-练习一

轮播图点击切换&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"…