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);});

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

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

相关文章

适配器模式——不兼容结构的协调

1、简介 1.1、概述 有的笔记本电脑的工作电压是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够在220V的电压下工作?答案是引入一个电源适配器(AC Adapter),俗称充电器/变压器。有了这…

Qt 2. QSerialPortInfo显示串口信息

在ex2.pro 添加&#xff1a; QT serialport//main.cpp #include "ex2.h" #include <QtSerialPort/QtSerialPort> #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Ex2 w;w.show();QList<QSerialPortInfo>…

xrdp登录显示白屏且红色叉

如上图所示&#xff0c;xrdp登录出现了红色叉加白屏&#xff0c;这是因为不正常关闭导致&#xff0c;解决方法其实挺简单的 #进入/usr/tmp cd /usr/tmp #删除对应用户的kdecache-** 文件&#xff08;我这里使用的是kde桌面&#xff09;&#xff0c;例如删除ywj用户对应的文件 …

Django学习记录:初步认识django以及实现了简单的网页登录页面的前后端开发

Django学习记录&#xff1a;初步认识django以及实现了简单的网页登录页面的前后端开发 1、可以先删去template文件夹&#xff0c;并在setting里面删掉这一行 2、在pycharm中创建app&#xff1a; 3、启动app&#xff1a;编写URL与视图函数关系【urls.py】 ​ 编写视图函数【vi…

RabbitMQ 教程 | 第5章 RabbitMQ 管理

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

SpringCloud学习路线(13)——分布式搜索ElasticSeach集群

前言 单机ES做数据存储&#xff0c;必然面临两个问题&#xff1a;海量数据的存储&#xff0c;单点故障。 如何解决这两个问题&#xff1f; 海量数据的存储问题&#xff1a; 将索引库从逻辑上拆分为N个分片&#xff08;shard&#xff09;&#xff0c;存储到多个节点。单点故障…

Mysql 查询统计最近12个月的数据

包括当月: SELECTt1.yf AS month,count( t2.uuid ) AS total FROM(SELECTDATE_FORMAT(( CURDATE()), %Y-%m ) AS yf UNIONSELECTDATE_FORMAT(( CURDATE() - INTERVAL 1 MONTH ), %Y-%m ) AS yf UNIONSELECTDATE_FORMAT(( CURDATE() - INTERVAL 2 MONTH ), %Y-%m ) AS yf UNION…

F5 LTM 知识点和实验 2-负载均衡基础概念

第二章&#xff1a;负载均衡基础概念 目标&#xff1a; 使用网页和TMSH配置virtual servers&#xff0c;pools&#xff0c;monitors&#xff0c;profiles和persistence等。查看统计信息 基础概念&#xff1a; Node一个IP地址。是创建pool池的基础。可以手工创建也可以自动创…

基于canvas画布的实用类Fabric.js的使用

目录 前言 一、Fabric.js简介 二、开始 1、引入Fabric.js 2、在main.js中使用 3、初始化画布 三、方法 四、事件 1、常用事件 2、事件绑定 3、事件解绑 五、canvas常用属性 六、对象属性 1、基本属性 2、扩展属性 七、图层层级操作 八、复制和粘贴 1、复制 2…

Redis常用命令

目录 Redis通用命令 进入Redis 1.进入redis容器 2.进入redis-cli 查询Redis中储存的key 删除key 查询key的过期时间,以毫秒为单位返回 key 的剩余的过期时间 查询key的数据类型 Redis数据结构 Redis数据查询 1.string 查询key对应的值 设置key对应的值 2.list 查…

ACL原理

ACL原理 ACL是一种用于控制网络设备访问权限的技术&#xff0c;可以通过配置ACL来限制特定用户、应用程序或网络设备对网络资源的访问。 1、ACL&#xff08;Access Control List&#xff09; 2、ACL是一种包过滤技术。 3、ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号、…

磁盘均衡器:HDFS Disk Balancer

HDFS Disk Balancer 背景产生的问题以及解决方法 hdfs disk balancer简介HDFS Disk Balancer功能数据传播报告 HDFS Disk Balancer开启相关命令 背景 相比较于个人PC&#xff0c;服务器一般可以通过挂载多块磁盘来扩大单机的存储能力在Hadoop HDFS中&#xff0c;DataNode负责最…

canvas实现图片平移,缩放的例子

最近有个水印预览的功能&#xff0c;需要用到canvas 绘制&#xff0c;canvas用的不是很熟&#xff0c;配合chatAI 完成功能。 效果如下 代码如下 原先配置是响应式的&#xff0c;提出来了就不显示操作了&#xff0c;模拟值都写死的 界面给大家参考阅读。 <!DOCTYPE html…

Spring AOP 的概念及其作用

一、什么是 Spring AOP&#xff1f; 在介绍 Spring AOP 之前&#xff0c;首先要了解一下什么是 AOP &#xff1f; AOP &#xff08; Aspect Oriented Programming &#xff09;&#xff1a;面向切面编程&#xff0c;它是一种思想&#xff0c; 它是对某一类事情的集中处 理 。…

软件测试面试题——接口自动化测试怎么做?

面试过程中&#xff0c;也问了该问题&#xff0c;以下是自己的回答&#xff1a; 接口自动化测试&#xff0c;之前做过&#xff0c;第一个版本是用jmeter 做的&#xff0c;1 主要是将P0级别的功能接口梳理出来&#xff0c;根据业务流抓包获取相关接口&#xff0c;并在jmeter中跑…

【前端知识】React 基础巩固(四十三)——Effect Hook

React 基础巩固(四十三)——Effect Hook 一、Effect Hook的基本使用 Effect Hook 用来完成一些类似class中生命周期的功能。 在使用类组件时&#xff0c;不管是渲染、网路请求还是操作DOM&#xff0c;其逻辑和代码是杂糅在一起的。例如我们希望把计数器结果显示在标签上&…

8.事件对象

8.1获取事件对象 ●事件对象是什么 也是个对象&#xff0c;这个对象里有事件触发时的相关信息 例如&#xff1a;鼠标点击事件中&#xff0c;事件对象就存了鼠标点在哪个位置等信息 ●使用场景 可以判断用户按下哪个键&#xff0c;比如按下回车键可以发布新闻 可以判断鼠标点击…

【Java|golang】143. 重排链表---快慢指针

给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 …

CentOS7.3 安装 docker

亲测、截图 阿里云服务器 文章目录 更新源2345 启动开机自启 更新源 sudo yum update -y2 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo4 sudo yum …

【软件测试】性能测试工具- LoadRunner的介绍和使用

目录 1. LoadRunner是什么2. LoadRunner环境搭建3. LoadRunner三大组件4. LoadRunner脚本录制4.1 WebTous项目介绍启动WebTous项目访问WebTous项目相关配置 4.2 脚本录制新建脚本录制脚本运行脚本 4.3 脚本加强插入事务插入集合点插入检查点插入日志字符串比较 1. LoadRunner是…