Cesium无人机实时视频投射及关键点拍照展示

news/2024/11/8 6:14:47/

 

 

 

 最近做了这个无人机实时视频投射的功能,其中介入了实时无人机的坐标数据、姿态以及视频流。
说下思路:

其中锥体用了自定义的geometry,视频面用的是polygon给的video材质,坐标用了samplepositionproperty进行储存,姿态用了sampleproperty。
以下是部分代码:
构建自定义geometry:

getGeometry(dis, fov, aspect) {let positions = new Float64Array(5 * 3);fov = Cesium.Math.toRadians(fov / 2);const tanfov = Math.tan(fov);const halfw = tanfov * dis;debuggerconst halfh = halfw / aspect;// 点0 坐标positions[0] = 0.0;positions[1] = 0.0;positions[2] = 0.0;// 点1 坐标positions[3] = 1.0 * halfw;positions[4] = 1.0 * dis;positions[5] = 1.0 * halfh;// 点2 坐标positions[6] = -1.0 * halfw;positions[7] = 1.0 * dis;positions[8] = 1.0 * halfh;// 点3 坐标positions[9] = -1.0 * halfw;positions[10] = 1.0 * dis;positions[11] = -1.0 * halfh;// 点4 坐标positions[12] = 1.0 * halfw;positions[13] = 1.0 * dis;positions[14] = -1.0 * halfh;// 创建顶点属性中的坐标const attributes = new Cesium.GeometryAttributes({position: new Cesium.GeometryAttribute({componentDatatype: Cesium.ComponentDatatype.DOUBLE,componentsPerAttribute: 3,values: positions})});// 点的索引const indices = new Uint16Array(18);indices[0] = 0;indices[1] = 4;indices[2] = 0;indices[3] = 1;indices[4] = 0;indices[5] = 2;indices[6] = 0;indices[7] = 3;indices[8] = 1;indices[9] = 4;indices[10] = 4;indices[11] = 1;indices[12] = 1;indices[13] = 2;indices[14] = 2;indices[15] = 3;indices[16] = 3;indices[17] = 4;let geometry = new Cesium.Geometry({attributes: attributes,indices: indices,primitiveType: Cesium.PrimitiveType.LINES,boundingSphere: Cesium.BoundingSphere.fromVertices(positions)});return geometry;}

构建property:
 

reateProperty(positions, times) {times = times || 120; // 不设置事件和速度 则默认120s播放完成var distance = 0;// 总距离var speed;for (var i = 0; i < positions.length - 1; i++) {var oneP = positions[i];var secP = positions[i + 1];var dis = Cesium.Cartesian3.distance(oneP, secP);distance += dis;}speed = distance / times; // (米/秒)this.allDistance = distance;this.startTime = this.viewer.clock.currentTime;this.endTime = Cesium.JulianDate.addSeconds(this.startTime, times, new Cesium.JulianDate());var property = new Cesium.SampledPositionProperty(); // 模型的propertylet hprProperty = new Cesium.SampledProperty(Cesium.Quaternion); // 姿态propertyvar oldTimes = 0;for (var i = 1; i < positions.length; i++) {var nowP = positions[i];var lastP = positions[i - 1];const hpr = this.headingPitchs[i];if (i == 1) { // 下标从1开始 此处加上第一个点property.addSample(this.startTime, positions[0]);const firstHpr = this.headingPitchs[0];let firstHeadingPitchRoll = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(firstHpr.heading),Cesium.Math.toRadians(firstHpr.pitch),Cesium.Math.toRadians(0))let firstQua = Cesium.Transforms.headingPitchRollQuaternion(positions[0], firstHeadingPitchRoll);hprProperty.addSample(this.startTime, firstQua);}oldTimes += Cesium.Cartesian3.distance(nowP, lastP) / speed;var nowTime = Cesium.JulianDate.addSeconds(this.startTime, oldTimes, new Cesium.JulianDate());property.addSample(nowTime, nowP);let headingPitchRoll = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(hpr.heading),Cesium.Math.toRadians(hpr.pitch),Cesium.Math.toRadians(0))let qua = Cesium.Transforms.headingPitchRollQuaternion(positions[0], headingPitchRoll);hprProperty.addSample(nowTime, qua);}return {property, hprProperty}}


http://www.ppmy.cn/news/786764.html

相关文章

系统架构设计师笔记第29期:人工智能技术

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是指使机器能够模拟和展现人类智能的一门学科和技术。它涉及构建智能系统&#xff0c;使其能够感知、理解、学习、推理、决策和交互&#xff0c;以解决复杂的问题并执行各种任务。 人工智能的目标是使机…

算法刷题Day 29 递增子序列+全排列+全排列II

Day 29 回溯算法 491. 递增子序列 如果直接像下面这样写的话&#xff0c;会出错&#xff0c;出错的案例类似&#xff1a; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nrEEc2S-1688623883770)(LC491-递增子序列LC.assets/image-20230703201315…

教你用手机模拟加密门禁卡-不用电脑,不ROOT手机

目标&#xff1a;将门禁卡、考勤卡、会员卡、停车卡、电梯卡等等各种卡模拟进手机里&#xff0c;模拟后可用手机代替刷卡&#xff0c;无需root&#xff0c;不用电脑 ## 背景介绍&#xff1a;1、前言  目前&#xff0c;IC卡已被广泛应用于身份识别、金融消费、安全认证等领域。…

android 判断有无sim卡,Android判断手机里是否有SIM卡

由于项目的需要&#xff0c;要判断手机里是否有sim卡。在网上找了一下资料结果发现&#xff0c;网上的资料很多都是一样的&#xff0c;都是判断sim卡的状态&#xff0c;把代码添加进去后发现不能满足需求。然后就自己看了一下文档。代码如下。 /** * author CX- * 判断 是否含有…

小米NFC手机复制加密IC门禁卡

几年没有发过任何文字信息了。闲来无事发一个NFC手机复制加密门禁卡的教程 思路: 第一步通过破解加密的门禁卡得到dump文件,获取卡号。修改dump文件只保留0扇区0块的内容也就是卡号,通过读卡器写入一张卡空白卡。这时就得到了一张未加密的白卡了。手机NFC可以模拟这张未加密…

Android手机无法识别SD卡的处理方法

1. 首先将SD卡放到读卡器中2. 使用Windows磁盘检查工具检查&#xff0c;选择“自动修复文件系统错误”&#xff0c;如果检查出有错误&#xff0c;再查一遍&#xff0c;直到提示“您的磁盘没有问题”。注&#xff1a;磁盘检查工具位置&#xff1a;SD卡的盘符上右键>属性>工…

连接手机、PC后,SD卡文件不显示怎么解决?

文章来源&#xff1a;https://www.reneelab.com.cn/sd-card-files-not-showing.html 目录 一、SD卡上文件不显示的原因二、如何恢复SD卡中丢失的数据三、SD卡修复方法的详细介绍1、检查SD卡的系统文件错误2、格式化SD卡3、使用Chkdsk修复损坏的SD卡 一、SD卡上文件不显示的原因…

[工业互联-15]:Linux操作与实时Linux操作系统RT Linux( PREEMPT-RT、Xenomai)

目录 第1章 Linux操作系统 1.1 什么是Linux操作系统 1.2 Linux操作系统架构 1.3 常见Linux操作系统发行版本 第2章 实时Linux操作系统 2.1 实时性要求 2.2 实时性实现技术的基本思想 2.2 常见发行版方案 2.3 Xenomai和PREEMPT-RT比较 第3章 PREEMPT-RT 3.1 概述 3…