当前位置: 首页 > news >正文

Cesium绘制圆锥

1、创建类

// 圆锥
export class Cone {constructor(viewer, Cesium) {this.viewer = viewerthis.Cesium = Cesium}add(params) {/*** model:模型实体 * length:圆锥长度* heading:方位* pitch:俯仰* roll:翻滚* position:{*    lon:经度*    lat:纬度*    height:高度* }*/let { length, heading, pitch, roll, color, bottomRadius, position } = params// 矩阵计算const hpr = new this.Cesium.HeadingPitchRoll(this.Cesium.Math.toRadians(heading - 90),this.Cesium.Math.toRadians(pitch),roll);// 计算带旋转的模型矩阵let modelMatrix = this.Cesium.Matrix4.multiplyByTranslation(this.Cesium.Transforms.headingPitchRollToFixedFrame(this.Cesium.Cartesian3.fromDegrees(position.lon,position.lat,position.height),hpr),new this.Cesium.Cartesian3(0.0, 0.0, -(length / 2)), // 设置顶点new this.Cesium.Matrix4());let geometry = new this.Cesium.CylinderGeometry({length,topRadius: 0.0,bottomRadius,vertexFormat:this.Cesium.MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat,});// 创建GeometryInstancelet geometryInstances = new this.Cesium.GeometryInstance({geometry,modelMatrix,});// 创建圆锥Primitivelet cone = this.viewer.scene.primitives.add(new this.Cesium.Primitive({geometryInstances,appearance: new this.Cesium.MaterialAppearance({material: new this.Cesium.Material({fabric: {uniforms: {color: new this.Cesium.Color.fromCssColorString(color),repeat: 50,offset: 1.0,thickness: 0.3,},source: `uniform vec4 color;uniform float repeat;uniform float offset;uniform float thickness;czm_material czm_getMaterial(czm_materialInput materialInput){czm_material material = czm_getDefaultMaterial(materialInput);float sp = 1.0/repeat;vec2 st = materialInput.st;float dis = distance(st, vec2(0.5));float m = mod(dis + offset, sp);float a = step(sp*(1.0-thickness), m);material.diffuse = color.rgb;material.alpha = a;return material;}`,},translucent: false,}),faceForward: true,closed: true,renderState: {depthTest: { enabled: false },},}),}));// 动态修改雷达材质中的offset变量,实现动态效果。this.viewer.scene.preUpdate.addEventListener(function () {let offset = cone.appearance.material.uniforms.offset;// 控制雷达波运动速度offset -= 0.001;if (offset > 1.0) {offset = 0.0;}cone.appearance.material.uniforms.offset = offset;});return cone}update(params) {/*** model:模型实体 * length:圆锥长度* heading:方位* pitch:俯仰* roll:翻滚* position:{*    lon:经度*    lat:纬度*    height:高度* }*/let { model, length, heading, pitch, roll, position } = params// 矩阵计算const hpr = new this.Cesium.HeadingPitchRoll(this.Cesium.Math.toRadians(heading - 90),this.Cesium.Math.toRadians(pitch),roll);// 计算带旋转的模型矩阵let modelMatrix = this.Cesium.Matrix4.multiplyByTranslation(this.Cesium.Transforms.headingPitchRollToFixedFrame(this.Cesium.Cartesian3.fromDegrees(position.lon,position.lat,position.height),hpr),new this.Cesium.Cartesian3(0.0, 0.0, -(length / 2)), // 设置顶点new this.Cesium.Matrix4());// 修改圆锥姿态model.geometryInstances.modelMatrix = modelMatrix}
}

2.初始化类

// 初始化类
let cone = new Cone(viewer, Cesium);

3.创建圆锥

  // 绘制圆锥me.cone.add({length: 10000,heading: 0,pitch: 90,roll: 0,color: "rgba(0, 255, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});// 绘制圆锥me.cone.add({length: 10000,heading: 45,pitch: 90,roll: 0,color: "rgba(255, 0, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});// 绘制圆锥me.cone.add({length: 10000,heading: 90,pitch: 90,roll: 0,color: "rgba(0, 255, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});// 绘制圆锥me.cone.add({length: 10000,heading: 135,pitch: 90,roll: 0,color: "rgba(255, 0, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});// 绘制圆锥me.cone.add({length: 10000,heading: 180,pitch: 90,roll: 0,color: "rgba(0, 255, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});// 绘制圆锥me.cone.add({length: 10000,heading: 225,pitch: 90,roll: 0,color: "rgba(255, 0, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});// 绘制圆锥me.cone.add({length: 10000,heading: 270,pitch: 90,roll: 0,color: "rgba(0, 255, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});// 绘制圆锥me.cone.add({length: 10000,heading: 315,pitch: 90,roll: 0,color: "rgba(255, 0, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},});

4.更新圆锥

// 绘制圆锥
let coneModel = me.cone.add({length: 10000,heading: 315,pitch: 90,roll: 0,color: "rgba(255, 0, 0, 1)",bottomRadius: 1500,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},
});// 更新圆锥
cone.update({model: coneModel,length: 10000,heading: 315,pitch: 90,roll: 0,position: {lon: 110.82474250408677,lat: 22.095133670052277,height: 8000,},
});

5.绘制效果

http://www.xdnf.cn/news/1172575.html

相关文章:

  • 「源力觉醒 创作者计划」深度讲解大模型之在百花齐放的大模型时代看百度文心大模型4.5的能力与未来
  • 深度图像滤波
  • Java 时间处理 API 全解析:从 JDK7 到 JDK8 的演进
  • Linux基本命令
  • Python实战:基于Streamlit的股票筛选系统,实时K线图+数据缓存优化
  • 应急响应基础
  • 通用图片 OCR 到 Word API 数据接口
  • 增强LLM最后隐藏层的意义与效果
  • 代码随想录算法训练营第五十二天|图论part3
  • 分享鸢尾花数据集:iris.csv,以及简单数据分析与分类预测示例(决策树)
  • 动态IP+AI反侦测:新一代爬虫如何绕过生物行为验证?
  • PyTorch中nn.Module详解和综合代码示例
  • 【前端】ikun-pptx编辑器前瞻问题三: pptx的图片如何提取,并在前端渲染。
  • 7月23日华为机考真题第二题-200分
  • python在windows电脑找回WiFi密码
  • 前端/后端,前台/中台/后台概念区别
  • python自动化测试框架,封装方法方式
  • 【Unity编辑器开发与拓展Handles】
  • CRMEB 单商户PRO多商户通用去版权教程
  • Oracle迁移到高斯,查询字段默认小写,解决办法
  • 微软Fabric重塑数据管理:Forrester报告揭示高ROI
  • 基于Kafka实现简单的延时队列
  • BUUCTF(web)部分题解
  • 设计模式九:构建器模式 (Builder Pattern)
  • springboot 升级到3.5.x后knife4j 文档无法识别问题解决
  • 新手向:Idea的使用技巧
  • Kubernetes服务发布基础
  • 【数据结构】线性表概括
  • [特殊字符] 从数据库无法访问到成功修复崩溃表:一次 MySQL 故障排查实录
  • SQL基础⑧ | 表格篇