cesium.js加载模型后,重新设置旋转角度属性值

news2025/1/12 23:43:08
// 加载模型


        var position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);

        // 计算矩阵
        var rollAngleDegrees = 15; // 设置翻滚角度
        var rollAngleRadians = Cesium.Math.toRadians(rollAngleDegrees); // 将角度转换为弧度
        var orientation = Cesium.Transforms.eastNorthUpToFixedFrame(position);
        var rollMatrix = Cesium.Matrix3.fromRotationZ(rollAngleRadians); // 创建绕 Z 轴旋转的矩阵
        var orientationWithRoll = Cesium.Matrix4.multiplyByMatrix3(orientation, rollMatrix, new Cesium.Matrix4());

        // 加载模型并设置位置和翻滚角
        var model = Cesium.Model.fromGltf({
            url: './assets/module.gltf',
            modelMatrix: orientationWithRoll, // 设置模型的位置和翻滚角
            minimumPixelSize: 16
        });
        viewer.scene.primitives.add(model);

// 重新设置模型角度
                setTimeout(function(){
            // 设置父级旋转
               let dat2a = 0
                   setInterval(function(){
                       dat2a +=10
                       var newRollAngleDegrees = dat2a; // 设置新的翻滚角度
                       var newRollAngleRadians = Cesium.Math.toRadians(newRollAngleDegrees); // 将角度转换为弧度
                       var newRollMatrix = Cesium.Matrix3.fromRotationY(newRollAngleRadians); // 创建新的绕 Z 轴旋转的矩阵
                       // 获取模型的当前模型矩阵
                       var modelMatrix = model.modelMatrix.clone();
                       // 将新的翻滚角度应用到模型的模型矩阵中
                       var newModelMatrix = Cesium.Matrix4.multiplyByMatrix3(modelMatrix, newRollMatrix, new Cesium.Matrix4());
                       // 更新模型的模型矩阵
                       model.modelMatrix = newModelMatrix;
               },1000)
   
                // 设置指定子名称为fly的模型旋转
               let dat1a = 0
               setInterval(function(){
                    dat1a +=5
                    model._nodesByName.fly.matrix = Cesium.Matrix4.fromTranslationQuaternionRotationScale(
                        model._nodesByName.fly._runtimeNode.translation, // 平移
                        Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Y, Cesium.Math.toRadians(dat1a)), // 绕Z轴旋转90度的四元数
                        model._nodesByName.fly._runtimeNode.scale 
                    );
                },800)
        },3000)

cesium.js官网版本:1.1051,代码内显示版本为:1.19.11 

 

  1. 首先,通过 Cesium.Cartesian3.fromDegrees 方法创建了一个位置向量 position,该向量表示模型在地球表面的位置,由经度、纬度和高度构成。

  2. 接着,通过 Cesium.Transforms.eastNorthUpToFixedFrame 方法创建了一个基于给定位置的朝向矩阵 orientation,用于将模型放置在地球表面并保持朝向。

  3. 然后,定义了一个角度变量 rollAngleDegrees,用于设置模型的翻滚角度。通过 Cesium.Math.toRadians 方法将角度转换为弧度。

  4. 使用 Cesium.Matrix3.fromRotationZ 方法创建了一个绕Z轴旋转的矩阵 rollMatrix,用于将模型进行翻滚。

  5. 使用 Cesium.Matrix4.multiplyByMatrix3 方法将朝向矩阵 orientation 和翻滚矩阵 rollMatrix 相乘,得到了新的模型矩阵 orientationWithRoll,用于将模型放置在地球表面并进行翻滚。

  6. 调用 Cesium.Model.fromGltf 方法加载GLTF模型,并传入模型矩阵 orientationWithRoll 以及其他参数。

  7. 设置了一个定时器,在一段时间后开始修改模型的角度。首先通过设置父级节点的旋转角度,让整个模型绕Y轴旋转。随后通过设置子节点名称为'fly'的模型旋转,让特定子模型绕Y轴旋转。这两个旋转都是通过修改模型节点的变换矩阵来实现的。

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

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

相关文章

android 怎么自定义view

首先了解view的绘制流程: 所以onmeasure ---测量view onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view 而onDraw----是继承view时候需要操作的。 所以:自定义ViewGroup一般是利用现有的组件根据特定的布局…

Python电梯楼层数字识别

程序示例精选 Python电梯楼层数字识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《Python电梯楼层数字识别》编写代码,代码整洁,规则,易读。 学习与应…

操作系统内功篇:硬件结构之如何写出让CPU执行更快的代码?

一 前言 因为CPU要操作的数据都在CPU Cache中的话,就不用再从内存中读取数据了,这样就提高了效率,访问的数据在CPU Cache中越多,有个专业名词称为缓存命中率高,所以说,缓存命中率越高,自然执行…

Jupyter Notebook出错提示An error occurred while retrieving package information解决办法

出错日志信息: To access the notebook, open this file in a browser:file:///C:/Users/colda/AppData/Roaming/jupyter/runtime/nbserver-14564-open.htmlOr copy and paste one of these URLs:http://localhost:8888/?token3c0113e5da07c0b8b8c9de74ffb453c5047…

在idea中配置tomcat服务器,然后部署一个项日

1.下载tomcat Tomcat下载 点击右边的tomcat8 找到zip点击下载 下载完,解压到你想放置的路径下 2.配置环境变量 打开设置找到高级系统设置点击环境变量 点击新建,变量名输入:CATALINA_HOME,变量值就是Tomcat的安装路径&#x…

机器人阻抗控制中的transparency(透明度)

在机器人控制领域,transparency(透明性)是一个描述机器人在物理交互过程中如何响应外部力或运动的术语。透明性在这里通常意味着机器人的运动和行为对于与其交互的用户或环境来说是直观且可预测的。换句话说,透明性意味着机器人的…

【二分查找详细解析】 【图解】 例题【洛谷P2249 【深基13.例1】查找】

文章目录 二分查找的基础解释例题【洛谷P2249 【深基13.例1】查找】code↓ 二分查找的基础解释 二分的时间复杂度为 O ( l o g n ) O(log n) O(logn),进行二分查找的序列必须满足单调性 我们可以先定义两个值 l , r l,r l,r ,来表示查找到的左端点 l…

接口与多态

通过接口实现多态 接口中声明若干个 bstract方法; 方法体的内容细节由实现接口的类去完成,不同的类有 不同的实现方式 → 则接口变量在回调接口方法时具有多 种形态。 用接口进行程序设计的核心思想 使用接口回调技术:接口变量存放实现该接口…

DP最长上升子序列模型

目录 怪盗基德的滑翔翼代码实现 登山代码实现 合唱队形代码实现 友好城市问题分析代码实现 最大上升子序列和代码实现 *拦截导弹问题分析代码实现扩展 *导弹防御系统问题分析代码实现 *最长公共上升子序列问题分析代码实现 LIS 问题一般有三种解法 朴素版动态规划贪心二分树状…

测试用例要如何写

1、测试点与测试用例 测试点不等于测试用例,这是我们首先需要认识到的。 问题1:这些测试点在内容上有重复,存在冗余。 问题2:一些测试点的测试输入不明确,不知道测试时要测试哪些。 问题3:总是在搭相似…

树与二叉树(数据结构)

本篇博客讲解 树与二叉树,后续会继续讲解堆 —————————————————————— 1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看…

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题,报错

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题,报错 1. 报错提醒如下图2. 原因本地安装多个cuda版本导致native寻找到多个版本,导致报错3. 具体配置需要根据你的显卡型号来确认 1. 报错提醒如下图 2. 原因本地安装多个cuda版本导致…

Redis - String 字符串

前言 下表中包含本博客提到的所有命令 字符串类型是 Redis 最基础的数据类型,关于字符串需要特别注意: 1)⾸先 Redis 中所有的键(key)的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上…

ffmpeg 滤镜实现不同采样率多音频混音

音频混音在音视频开发中是十分重要的一个环节,所谓音频混音就是将所有需要混音的数据相加得到混音数据,然后通过某个算法进行非法数据的处理;例如相加数值超过最大值,最小值等! 在实际的音频开发中,要实现混音的流程如下: 因此我们的编码实现就分为五部分:寻找…

中经评论:“人工智能+”不止是加法

以下文章来源:经济日报 今年,“人工智能”首次被写入《政府工作报告》,这个新提法为发展数字经济、推进数实融合指明了新路径。值得注意的是,“人工智能”不是简单相加,而是要通过新技术催生新质生产力,为经…

MyBatisPlus 之三:BaseMapper 详解和 CRUD 案例详解

BaseMapper详解 1. SQL 日志开启 为了更好更快学习 MyBatisPlus ,需要配置 SQL 日志,这样方便我们能随时看到执行过程中使用的 SQL 语句,有助于理解执行原理及方便 SQL 错误调试 mybatis-plus.configuration.log-implorg.apache.ibatis.logg…

Python 多线程大批量处理文件小程序

说明 平时偶尔需要进行重复性的对文件进行重命名、格式转化等。假设以文件复制功能作为目标,设计一个小程序使用多线程对文件进行批量复制。(其实以后主要目标是针对Realsense的raw文件进行批量的转化,并借助多线程加速) 代码 i…

深度学习 精选笔记(12)卷积神经网络-理论基础2

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

修改yolov9的模型打印不出来Gflops的解决办法

正在修改yolov9的模块,发现修改后的模型没有GFlops这个参数 解决办法: 找到utils/torch_utils.py这个文件,有一个model_info函数 然后将其中的stride改为固定的640就可以打印了。 stride max(int(model.stride.max()), 32) if hasattr(mo…

扩展学习|网络问政的价值增量与实现条件:基于数据资源挖掘的视角

文献来源:[1]顾丹丹傅广宛.网络问政的价值增量与实现条件:基于数据资源挖掘的视角[J].中国行政管理, 2021, 000(004):76-82.DOI:10.19735/j.issn.1006-0863.2021.04.11. 一、技术赋能网络问政的机制生成 (一)技术赋能网络问政的流程&#xf…