cesium 加载模型动画最详细版

news2024/12/23 14:29:45

加载模型有俩种方法 primitives和entities。新版的目前 "cesium": "^1.119.0",又有更新,以下以次距离。

新版的primitive

 async addAnimatedPrimityModel(lngLatHeight, option) {
    const position = Cesium.Cartesian3.fromDegrees(lngLatHeight[0], lngLatHeight[1], lngLatHeight[2])
    const heading = Cesium.Math.toRadians(option.headingAngle)
    const pitch = Cesium.Math.toRadians(option.pitchAngle)
    const roll = Cesium.Math.toRadians(option.rollAngle)
    const headingPitchRoll = new Cesium.HeadingPitchRoll(heading, pitch, roll)
    const fixedFrameTransform = Cesium.Transforms.localFrameToFixedFrameGenerator('north', 'west')
    const modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, headingPitchRoll, Cesium.Ellipsoid.WGS84, fixedFrameTransform)
    let animations = null
    const gltfCallback = (gltf) => {
      animations = gltf.animations
    }
    const newOption = Object.assign({}, option, { modelMatrix, gltfCallback })
    try {
      const model = await Cesium.Model.fromGltfAsync(newOption)
      model.FFtype = 'FFGltfPrimitive'
      this.ffCesiumGltfCollection.add(model)
      model.readyEvent.addEventListener(() => {
        model.activeAnimations.add({
          index: animations.length - 1,
          loop: Cesium.ModelAnimationLoop.REPEAT,
          multiplier: 0.5
        })
      })
      return model
    } catch (error) {
      console.log(`Failed to load model. ${error}`)
    }
  },

// 定义 gltfCallback 回调来获取动画数据 

一个重点就是添加:gltfCallback属性。

旧版primitive

export function addGLTFprimitive(url: string, positions: Cesium.Matrix4,index:number) {
  var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
    Cesium.Cartesian3.fromDegrees(118.120679, 24.515347));
  const model = Cesium.Model.fromGltf({
    url: url,
    id: `11id${index}`,
    modelMatrix: positions,
    scale: 1000.0,
  })
  viewer.scene.primitives.add(model);
  
  model.readyPromise.then(function(model) {
    console.log('model222',model);
    model.activeAnimations.addAll({
          multiplier: 1,
          loop: Cesium.ModelAnimationLoop.REPEAT,
          reverse : false //false顺时针  true逆时针
        })
//单独添加动画
  // model.activeAnimations.add({
  //     name : 'Blink',
  //     // startTime : startTime,
  //     // delay : 0.0,                          // Play at startTime (default)
  //     // stopTime : Cesium.JulianDate.addSeconds(startTime, 4.0, new Cesium.JulianDate()),
  //     // removeOnStop : false,                 // Do not remove when animation stops (default)
  //     // multiplier : 2.0,                        // Play at double speed
  //     reverse : true,                       // Play in reverse
  //     loop : Cesium.ModelAnimationLoop.REPEAT      // Loop the animation
  //   });

  });

entities添加模型动画

  addAnimatedEntityModel(lngLatHeight, optionModel) {
    const position = this.Cesium.Cartesian3.fromDegrees(...lngLatHeight)
    const heading = Cesium.Math.toRadians(optionModel.headingAngle) //135度转弧度
    // const heading = Cesium.Math.toRadians(optionModel.heading) //135度转弧度
    const pitch = Cesium.Math.toRadians(0)
    const roll = 0
    const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll)
    const orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr)
    let models = {
      name: `gltf`,
      // id: `aagltf${index}`,
      position: position,
      orientation: orientation,
      model: {
        uri: optionModel.url, //注意entitits.add方式加载gltf文件时,这里是uri,不是url,并且这种方式只能加载.glb格式的文件
        scale: optionModel.scale, //缩放比例
        minimumPixelSize: optionModel.minimumPixelSize, //最小像素大小,可以避免太小看不见
        maximumScale: optionModel.maximumScale, //模型的最大比例尺大小。minimumPixelSize的上限
        incrementallyLoadTextures: true, //加载模型后纹理是否可以继续流入
        runAnimations: true, //是否启动模型中制定的gltf动画
        clampAnimations: true, //制定gltf动画是否在没有关键帧的持续时间内保持最后一个姿势
        shadows: Cesium.ShadowMode.ENABLED,
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
        // silhouetteSize: 18.0,
        runAnimations: true, //指定是否应启动模型中指定的glTF动画
        silhouetteColor: new Cesium.Color(1.0, 0.0, 1.0, 1)
      }
    }
    const entity = this.viewer.entities.add(models)
    console.log('entity---1', entity)
    let model = entity.model._model
    console.log('model', model)
    return entity
  },

注意  shouldAnimate: true,要打开

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

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

相关文章

GatewayWorker框架的详解和应用

一、介绍 1. 简介 GatewayWorker基于Workerman开发的一个项目框架,用于快速开发TCP长连接应用,例如app推送服务端、即时IM服务端、游戏服务端、物联网、智能家居等等 GatewayWorker使用经典的Gateway和Worker进程模型。Gateway进程负责维持客户端连接…

代码随想录——柱状图中最大的矩形(Leetcode 84)

题目链接 我的解法(暴力) 果不其然,超时是暴力解法的宿命… 双层for循环真的很好懂,每次解题都感觉我应该是一个单细胞生物… class Solution {public int largestRectangleArea(int[] heights) {int max 0;for(int i 0; i …

Java高效透明可靠 同城搬家系统小程序源码

高效透明可靠 —— 同城搬家系统 🚚【开篇:告别繁琐,迎接高效搬家新时代】🚚 搬家,对于很多人来说,都是一件既期待又头疼的事情。期待新家的温馨与美好,却又头疼于搬家的繁琐与复杂。但今天&a…

西湖大学卢培龙团队突破:精确从头设计异手性蛋白复合物,开启镜像蛋白研究新篇章

在生物科学的浩瀚星空中,蛋白质作为生命活动的基本承担者,其设计与合成一直是科学家们不懈探索的领域。近日,西湖大学卢培龙团队携手清华大学刘磊团队,在《Cell Research》期刊上发表了一项革命性的研究成果——首次实现了异手性蛋…

自组网融合通信方案技术详解

自组网(Ad Hoc Network),又称无中心网络或多跳网络,是一种无需固定基础设施支持,由多个动态节点自组织形成的临时性通信网络。它具备高度的灵活性和鲁棒性,能够在复杂多变的环境中快速部署和自适应调整。自…

如何解决ValueError: could not convert string to float: ‘无数据‘

下面是一个Python脚本,用于检查数据中哪些列包含“无数据”字符串,并打印出这些列的名称和它们在数据集中的位置。 import pandas as pd# 加载数据(替换为你的数据就行) data pd.read_excel(WT10_operating_data.xlsx, engineope…

推荐一款开源、高效、灵活的Redis桌面管理工具:Tiny RDM!支持调试与分析功能!

1、引言 在大数据和云计算快速发展的今天,Redis作为一款高性能的内存键值存储系统,在数据缓存、实时计算、消息队列等领域发挥着重要作用。然而,随着Redis集群规模的扩大和复杂度的增加,如何高效地管理和运维Redis数据库成为了许…

监控文件文件夹被删除修改用哪个软件好

文件和文件夹的删除修改是很常见的操作,那么为什么需要监控它呢?自己使用的电脑可能对这方面的需求比较少,但是工作上的电脑一般都会有多个人去使用的,有时候一些文件或文件夹可能会被别个删除或修改,那么监控这些记录…

云计算之数据库

目录 一、RDS产品介绍及排障思路 1.1 云RDS数据库及其特点 1.2 云RDS数据库-规格 1.3 云RDS数据库-存储 ​1.4 云RDS数据库-安全 ​1.5 云RDS数据库-整体架构 1.6 RDS常见问题排查 ​1.6.1 如何解决无法链接RDS实例的问题 1.6.2 RDS实例存储空间使用率高,怎…

比特币客户端和API

1. 比特比客户端的安装 Bitcoin Core 客户端适用于从 x86 Windows 到 ARM Linux 的不同架构和平台,如下图所示: 2. Bitcoin Core客户端的类型 2.1 Bitcoind Bitcoind 末尾的字母 d 表示 daemon (守护程序)。所谓守护程序,就是指常…

【完美解决】电脑蓝屏 驱动丢失或包含错误问题的解决办法

电脑开机出现了蓝屏报错进入恢复页: 无法加载操作系统,原因是关键系统驱动程序丢失或包含错误 文件 \windows\system32\XXXXX 错误代码:XXXX 重启无数次也不行,安全模式进不去,修复也不行 查了一圈,尝试了…

【深度学习详解】Task3 实践方法论-分类任务实践 Datawhale X 李宏毅苹果书 AI夏令营

前言 综合之前的学习内容, 本篇将探究机器学习实践方法论 出现的问题及其原因 🍎 🍎 🍎 系列文章导航 【深度学习详解】Task1 机器学习基础-线性模型 Datawhale X 李宏毅苹果书 AI夏令营 【深度学习详解】Task2 分段线性模型-引入…

南通网站建设手机版网页

随着移动互联网的迅猛发展,越来越多的人通过手机浏览网页,进行在线购物、信息查询和社交互动。因此,建立一个适合移动端访问的网站已成为企业和个人不可忽视的重要任务。在南通,网站建设手机版网页的需求逐渐增加,如何…

springboot整合Logback

Logback介绍 描述 Logback是由log4j创始人设计的另外一种开源日志组件,性能比log4j要好。相对是一个可靠、通用、快速而又灵活的Java日志框架。 Logback主要分三个模块 1、logback-core:其他两个模块的基础模块 2、logback-classic:它是lo…

基于AIM平台实现对SAP PO平台的监控告警管理及WeLink告警案例

一、客户背景 某集团基于SAP PO平台统一管理的接口量较大,为了方便团队进行后期维护和管理,固上此AIM监控平台系统,用于接口日常运行、SAP PO各类型指标和系统性能方面的监控,多种告警类型渠道满足各种用户需求,采用…

ESP8266下载固件→连接阿里云

一、工具准备 1、ESP8266Wifi模块 2、ESP8266下载器 ESP8266-01模块 二、固件配置 CH340串口工具-烧录ESP8266-01固件_esp8266 ch340烧录-CSDN博客文章浏览阅读444次,点赞6次,收藏3次。CH340会有供电不足的问题,因此需要外部供电_esp…

【leetcode详解】清除数字:栈思想解决字符串问题(思路详解)

实战总结 string的常用方法: pop_back, push_back使得可以直接像操作栈一样操作string类型 注意,上面两个方法只能对单个字符char操作但是‘ ’对 char 和 string 均适用 题面 思路详解: 不妨对比一下其他思路: 双指针&#…

《高等代数》相邻两行(列)相差K倍行列式

说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:1)相邻两行(列)相差K倍行列式需要关注行(列)与行(列)之间的关系,运用适当…

《卷积神经网络 CNN 原理探秘》

CNN基本原理详解 卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受…

实验室ICPR 2024论文分享┆DS MYOLO:一种基于状态空间模型的驾驶场景可靠目标检测器

论文分享简介 本推文详细介绍了一篇实验室的最新论文成果《DS MYOLO: A Reliable Object Detector Based on SSMs for Driving Scenarios》,该论文已被第27届国际模式识别大会(ICPR)接收,论文的第一作者为李杨。论文提出了一种基…