Cesium 快速入门(七)材质详解

看过的知识不等于学会。唯有用心总结、系统记录,并通过温故知新反复实践,才能真正掌握一二
作为一名摸爬滚打三年的前端开发,开源社区给了我饭碗,我也将所学的知识体系回馈给大家,助你少走弯路!
OpenLayers、Leaflet 快速入门 ,每周保持更新 2 个案例
Cesium 快速入门,每周保持更新 4 个案例

Cesium 快速入门(一)快速搭建项目
Cesium 快速入门(二)底图更换
Cesium 快速入门(三)Viewer:三维场景的“外壳”
Cesium 快速入门(四)相机控制完全指南
Cesium 快速入门(五)坐标系
Cesium 快速入门(六)实体类型介绍
Cesium 快速入门(七)材质详解
Cesium 快速入门(八)Primitive(图元)系统深度解析
Cesium 快速入门(九)Appearance(外观)系统深度解析
Cesium 快速入门(十) JulianDate(儒略日期)详解
Cesium 快速入门(十一)3D Tiles 大规模三维地理空间数据
Cesium 快速入门(十二)数据加载详解
Cesium 快速入门(十三)事件系统

Cesium 材质详解

在上一章实体的学习中,材质属性只填充了颜色,这一章将介绍更多的材质属性。材质一共包括以下几种

  1. 基础材质
    • ColorMaterialProperty:颜色,所有支持材质的几何体(Polygon/Ellipse/Rectangle 等)
    • ImageMaterialProperty:图片
  2. 几何图案材质
    • CheckerboardMaterialProperty:棋盘格
    • StripeMaterialProperty:条纹
    • GridMaterialProperty:网格
  3. 折线专用材质
    • PolylineGlowMaterialProperty:发光材质
    • PolylineOutlineMaterialProperty:轮廓材质
    • PolylineDashMaterialProperty:虚线材质
    • PolylineArrowMaterialProperty:箭头材质

基础材质

颜色(ColorMaterialProperty)

纯色填充材质,适用于所有支持材质的几何体,是最基础也最常用的材质类型。

new Cesium.ColorMaterialProperty(color);
颜色创建方式

Cesium 提供多种颜色创建方法:

方法示例说明
预定义颜色Cesium.Color.RED直接使用内置颜色常量
CSS 颜色字符串Cesium.Color.fromCssColorString("#ff0000")支持所有 CSS 颜色格式
RGBA 值Cesium.Color.fromBytes(255, 0, 0)字节表示法(0-255)
HSLA 值Cesium.Color.fromHsl(0, 1, 0.5, 0.5)色相(0-1)、饱和度(0-1)、亮度(0-1)、透明度(0-1)
随机颜色Cesium.Color.fromRandom({alpha: 0.5})生成随机颜色,可指定透明度范围
基础实例
<template><div ref="cesiumContainer" class="container"></div>
</template><script setup>
import { ref, onMounted } from "vue";
import * as Cesium from "cesium";
const cesiumContainer = ref(null);
let viewer = null;// 天地图TOKEN
const token = "05be06461004055923091de7f3e51aa6";onMounted(() => {// 初始化Viewerviewer = new Cesium.Viewer(cesiumContainer.value, {geocoder: false, // 关闭地理编码搜索homeButton: false, // 关闭主页按钮sceneModePicker: false, // 关闭场景模式选择器baseLayerPicker: false, // 关闭底图选择器navigationHelpButton: false, // 关闭导航帮助animation: false, // 关闭动画控件timeline: false, // 关闭时间轴fullscreenButton: false, // 关闭全屏按钮baseLayer: false, // 关闭默认地图});// 清空logoviewer.cesiumWidget.creditContainer.style.display = "none";// 创建半透明红色材质const redMaterial = new Cesium.ColorMaterialProperty(Cesium.Color.RED.withAlpha(0.5) // 50%透明度);// 应用到多边形viewer.entities.add({polygon: {hierarchy: Cesium.Cartesian3.fromDegreesArray([116.3975, 39.9075, 116.4075, 39.9075, 116.4075, 39.9175, 116.3975,39.9175,]),material: redMaterial,height: 0,extrudedHeight: 100,},});// 缩放到多边形viewer.zoomTo(viewer.entities);initMap();
});// 加载天地图
const initMap = () => {// 以下为天地图及天地图标注加载const tiandituProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w", // 天地图使用 Web 墨卡托投影(EPSG:3857),需确保 tileMatrixSetID: "w"subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名maximumLevel: 18,credit: new Cesium.Credit("天地图影像"),});// 添加地理标注const labelProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&tileMatrix={TileMatrix}&tileRow={TileRow}&tileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w",subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名轮询maximumLevel: 18,credit: new Cesium.Credit("天地图影像"),});// 天地图影像添加到viewer实例的影像图层集合中viewer.imageryLayers.addImageryProvider(tiandituProvider);// 天地图地理标注(后添加的会覆盖前面的)viewer.imageryLayers.addImageryProvider(labelProvider);
};
</script>
<style scoped>
.container {width: 100vw;height: 100vh;
}
</style>

在这里插入图片描述

颜色操作方法
const baseColor = Cesium.Color.RED;
const modifiedColor = baseColor.withAlpha(0.5) // 设置透明度.brighten(0.2) // 增加亮度.darken(0.1); // 降低亮度

图片(ImageMaterialProperty)

使用图片纹理作为材质,支持重复、旋转和颜色混合,适用于创建具有真实感的表面效果。

new Cesium.ImageMaterialProperty(options);
  • options:
    • image:图片路径
    • repeat:纹理重复次数 (x, y),默认 new Cartesian2(1.0, 1.0)
    • color:颜色,默认 Cesium.Color.WHITE
    • transparent:是否透明,默认 false
material: new Cesium.ImageMaterialProperty({image: new URL("../assets/vue.svg", import.meta.url).href, // 图片路径repeat: new Cesium.Cartesian2(4, 4), // 平铺次数// color: Cesium.Color.RED, // 图片颜色// transparent: true, // 当图像具有透明度时设置为true
}),

在这里插入图片描述

几何图案材质

棋盘格材质(CheckerboardMaterialProperty)

new Cesium.CheckerboardMaterialProperty(options);
  • options:
    • evenColor:偶数条纹颜色
    • oddColor:奇数条纹颜色
    • repeat:棋盘格重复次数,默认 new Cartesian2(2.0, 2.0)
material: new Cesium.CheckerboardMaterialProperty({evenColor: Cesium.Color.WHITE, // 偶数格颜色oddColor: Cesium.Color.BLACK, // 奇数格颜色repeat: new Cesium.Cartesian2(10, 10), // 交替频率
}),

在这里插入图片描述

条纹材质(StripeMaterialProperty)

new Cesium.StripeMaterialProperty(options);
  • options:
    • evenColor:偶数条纹颜色
    • oddColor:奇数条纹颜色
    • repeat:条纹重复次数,默认 1.0
    • orientation:方向 (“HORIZONTAL” 或 “VERTICAL”),默认’HORIZONTAL’
    • offset:偏移量,默认 0
 material: new Cesium.StripeMaterialProperty({evenColor: Cesium.Color.YELLOW,oddColor: Cesium.Color.BLACK,orientation: Cesium.StripeOrientation.HORIZONTAL, // 条纹方向repeat: 20, // 条纹密度
}),

在这里插入图片描述

网格材质(GridMaterialProperty)

new Cesium.GridMaterialProperty(options);
  • options:
    • color:网格颜色
    • cellAlpha:单元格透明度 (0.0-1.0),默认 0.1
    • lineCount:行列数量 (x, y),默认值:new Cartesian2(8, 8)
    • lineThickness:线宽 (x, y),默认值:new Cartesian2(1.0, 1.0)
    • lineOffset:线偏移 (x, y),默认值:new Cartesian2(0.0, 0.0)
material: new Cesium.GridMaterialProperty({color: Cesium.Color.YELLOW, // 网格线颜色cellAlpha: 0.6, // 单元格透明度lineCount: new Cesium.Cartesian2(5, 5), // 网格密度lineThickness: new Cesium.Cartesian2(3, 3), // 网格线宽度
}),

在这里插入图片描述

折线专用材质

折线发光材质(PolylineGlowMaterialProperty)

new Cesium.PolylineGlowMaterialProperty(options);
  • options:
    • color:颜色
    • glowPower:发光强度 (0.0-1.0),默认值:0.25
    • taperPower:渐细效果强度 (0.0-1.0),默认值:1.0
<template><div ref="cesiumContainer" class="container"></div>
</template><script setup>
import { ref, onMounted } from "vue";
import * as Cesium from "cesium";
const cesiumContainer = ref(null);
let viewer = null;// 天地图TOKEN
const token = "05be06461004055923091de7f3e51aa6";onMounted(() => {// 初始化Viewerviewer = new Cesium.Viewer(cesiumContainer.value, {geocoder: false, // 关闭地理编码搜索homeButton: false, // 关闭主页按钮sceneModePicker: false, // 关闭场景模式选择器baseLayerPicker: false, // 关闭底图选择器navigationHelpButton: false, // 关闭导航帮助animation: false, // 关闭动画控件timeline: false, // 关闭时间轴fullscreenButton: false, // 关闭全屏按钮baseLayer: false, // 关闭默认地图});// 清空logoviewer.cesiumWidget.creditContainer.style.display = "none";const polyline = viewer.entities.add({polyline: {positions: Cesium.Cartesian3.fromDegreesArray([116.39, 39.9, 116.41, 39.9, 116.41, 39.92, 116.39, 39.92,]),width: 16,// 发光材质material: new Cesium.PolylineGlowMaterialProperty({color: Cesium.Color.CYAN, // 颜色glowPower: 0.3, // 亮度taperPower: 0.7, // 衰减率}),},});// 定位到线viewer.zoomTo(polyline); // 缩放到实体位置initMap();
});// 加载天地图
const initMap = () => {// 以下为天地图及天地图标注加载const tiandituProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w", // 天地图使用 Web 墨卡托投影(EPSG:3857),需确保 tileMatrixSetID: "w"subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名maximumLevel: 18,credit: new Cesium.Credit("天地图影像"),});// 添加地理标注const labelProvider = new Cesium.WebMapTileServiceImageryProvider({url:"http://{s}.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&tileMatrix={TileMatrix}&tileRow={TileRow}&tileCol={TileCol}&style=default&format=tiles&tk=" +token,layer: "img",style: "default",format: "tiles",tileMatrixSetID: "w",subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], // 子域名轮询maximumLevel: 18,credit: new Cesium.Credit("天地图影像"),});// 天地图影像添加到viewer实例的影像图层集合中viewer.imageryLayers.addImageryProvider(tiandituProvider);// 天地图地理标注(后添加的会覆盖前面的)viewer.imageryLayers.addImageryProvider(labelProvider);
};
</script>
<style scoped>
.container {width: 100vw;height: 100vh;
}
</style>

在这里插入图片描述

折线轮廓材质(PolylineOutlineMaterialProperty)

new Cesium.PolylineOutlineMaterialProperty(options);
  • options:
    • color:颜色
    • outlineColor:轮廓颜色,默认 Color.BLACK
    • outlineWidth:轮廓宽度(像素),默认 1.0
material: new Cesium.PolylineOutlineMaterialProperty({color: Cesium.Color.RED, // 颜色outlineColor: Cesium.Color.YELLOW, // 轮廓颜色outlineWidth: 5, // 轮廓宽度
});

在这里插入图片描述

折线虚线材质(PolylineDashMaterialProperty)

new Cesium.PolylineDashMaterialProperty(options);
  • options:
    • color:颜色
    • gapColor:间隙颜色,默认 Color.TRANSPARENT
    • dashLength:虚线长度(像素),默认 16.0
    • dashPattern:虚线模式 (16 位二进制),默认 255 (11111111)
material: new Cesium.PolylineDashMaterialProperty({color: Cesium.Color.BLUE,// gapColor: Cesium.Color.WHITE,dashLength: 24,// dashPattern: parseInt("11110000", 2), // 长虚线
}),

在这里插入图片描述

折线箭头材质(PolylineArrowMaterialProperty)

new Cesium.PolylineArrowMaterialProperty(color);
material: new Cesium.PolylineArrowMaterialProperty(Cesium.Color.YELLOW),

在这里插入图片描述

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

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

相关文章

C++:结构体(Structure)

目录 第一性原理出发&#xff1a;我们要解决什么问题&#xff1f; 定义结构体&#xff08;Defining Structures&#xff09; 问题&#xff1a;名字太长怎么办&#xff1f; 如何定义结构体变量&#xff1f; 结构体的大小&#xff08;Size of Structures&#xff09; 初始化…

化学结构式解读指南:从基础认知到InDraw智能识别

中文名称&#xff1a;3-[2-(二甲基氨基)乙基]-1H-吲哚英文名称&#xff1a;3-[2-(dimethylamino)ethyl]-1H-indole分子式: C12H16N2分子量: 188.2740这是什么结构式&#xff1f;怎么绘制呢&#xff1f;可以用InDraw里的AI图像识别这个结构式&#xff0c;也可以手动绘图&#xf…

如何使用一台电脑adb调试多个Android设备

目录 一、临时断开其中一个设备连接 二、指定调试设备 总结 当我们使用Android调试工具调试多个设备&#xff0c;例如一开始使用adb连接了一台Android真机进行调试&#xff0c;此时又在Android studio中打开了一个模拟机&#xff0c;此时我们在adb命令窗口中使用adb命令的…

ChatGPT的下一站:从“答案引擎”到“思维教练”

摘要&#xff1a;我们正处在一个“万物皆可ChatGPT”的时代&#xff0c;但当它沦为最高效的“代码搬运工”和“作业速成器”时&#xff0c;我们得到的究竟是效率的提升还是思维的退化&#xff1f;本文深入探讨一个引人深思的概念——“导师模式”的AI。它不再直接提供答案&…

SpringBoot集成Flyway

SpringBoot集成Flyway_springboot flyway-CSDN博客 Flyway 本质上是一个开源的数据库迁移工具&#xff0c;它能够以自动化、可重复且可靠的方式管理数据库的变更。无论是小型项目还是大型企业级应用&#xff0c;Flyway 都能助力开发者轻松应对数据库架构的演进。它支持多种数据…

【实时Linux实战系列】实时图像处理应用开发

在当今快速发展的技术领域&#xff0c;实时图像处理应用在众多领域发挥着至关重要的作用。从自动驾驶汽车、工业自动化检测到医疗影像诊断&#xff0c;实时图像处理技术的应用场景无处不在。通过在实时Linux系统中开发图像处理应用&#xff0c;开发者能够充分利用Linux的稳定性…

Caterpillar Fungus Optimizer, CFO

核心算法解析1. 算法框架与初始化class EnhancedCFO: def __init__(self, objective_func, dim10, pop_size30, max_iter200, lb-10, ub10):​​改进点​​&#xff1a;针对传统优化算法后期易停滞的问题&#xff0c;结合了精英策略、多样性控制和自适应参数​​关键特性​​&a…

c++设计模式编程练习

一、运用观察者模式原理编写鸟类模型运行结果&#xff1a;二、运用简单工厂模式编写打怪掉装备模型运行结果

FastMCP本地构建Server和Clinet交互

1. MCP Server介绍 MCP Server 是实现模型上下文协议&#xff08;MCP&#xff09;的服务器&#xff0c;旨在为 AI 模型提供一个标准化接口&#xff0c;连接外部数据源和工具&#xff0c;例如文件系统、数据库或 API。 相比之下&#xff0c;在MCP出现前&#xff0c;AI调用工具…

工业企业与清洁生产匹配数据库(1998-2015年)

1484工业企业与清洁生产匹配数据库&#xff08;1998-2015年&#xff09;“清洁生产”近年发文趋势及主题分布数据来源中华人民共和国生态环境部以及中国工业企业数据库&#xff0c;由数据皮皮侠团队整理时间跨度1998-2015年数据范围各工业企业数据指标参考文献孙博文,郑世林.环…

第13届蓝桥杯C++青少组中/高级组选拔赛2022年1月22日真题

第13届蓝桥杯C青少组中/高级组选拔赛2022年1月22日真题 更多内容请查看网站&#xff1a;【试卷中心 -----> 蓝桥杯----> C ----> 选拔赛】 网站链接 青少年软件编程历年真题模拟题实时更新 编程题 第 1 题 比大小 题目描述&#xff1a; 给出两个不同的整数&#…

从0到1学PHP(七):PHP 与 HTML 表单:实现数据交互

目录一、表单的创建与提交方式1.1 HTML 表单的基本结构1.2 GET 和 POST 提交方式的区别及适用场景二、表单数据的接收与处理2.1 使用\$_GET、\$_POST 超全局变量获取表单数据2.2 对接收的数据进行验证三、表单安全处理3.1 防止 XSS 攻击的方法3.2 防止 CSRF 攻击的措施一、表单…

Docker compose和Docker-compose的区别

Docker Compose 的两个命令形式 docker compose&#xff08;空格连接&#xff09;与 docker-compose&#xff08;短横线连接&#xff09;核心区别如下&#xff1a;一、技术本质docker-compose&#xff08;短横线&#xff09;独立可执行文件&#xff1a;早期实现方式&#xff0c…

自定心深凹槽参数检测装置及检测方法 - 激光频率梳 3D 轮廓检测

一、引言在机械零件深凹槽检测中&#xff0c;传统方法常因定心不准导致检测误差。如平台推表检测时零件基准面与测量平台难以精准对齐&#xff0c;三坐标测量需人工找正&#xff0c;效率低且误差大。激光频率梳 3D 轮廓检测虽精度高&#xff0c;但缺乏自定心机制会影响深凹槽轴…

C语言---结构体(格式、用法、嵌套、初始化)、共用体、枚举类型、typedef类型

目录 结构体与共用体 1、结构体(struct) (1) 格式与用法 (2) 结构体允许嵌套 (3) 结构体成员初始化 (4) 指针替换变量 (5) 求结构体在内存空间所占字节 2、共用体(union) (1) 格式与概念 (2) 应用 3、枚举类型(enum) (1) 格式与概念 (2) 应用 4、typedef 类型 结构体与共用…

辐射源定位方法简述

文章目录 前言 一、按照信息建模分类 1.1.时间参数 1.1.1.到达时间&#xff08;TOA, Time of Arrival&#xff09;定位 1.1.2.到达时间差&#xff08;TDOA, Time Difference of Arrival&#xff09;定位 1.2.角度参数 1.2.1.到达角度&#xff08;AOA, Angle of Arrival&a…

CamX-设置SceneMode:CONTROL_SCENE_MODE_FACE_PRIORITY不生效问题解决

应用设置CONTROL_SCENE_MODE_FACE_PRIORITY设置不生效 问题&#xff1a;app 代码 CaptureRequest.Builder captureRequestBuilder mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);builder.set(CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTRO…

MFC CChartCtrl编程

重点&#xff1a;创建CChartCtrl控件有2种方式1、直接创建CChartCtrl2、窗体上添加Custom Control&#xff08;切记一定不能是Static Text或者Picture Control&#xff0c;否则无法响应鼠标消息&#xff09;&#xff0c;然后根据ID关联CChartCtrl控件&#xff0c;初始化代码如下…

从0到1了解热部署

热部署&#xff08;Hot Deployment&#xff09;是软件开发中一种提高开发效率的技术&#xff0c;指的是在应用程序不停止运行的情况下&#xff0c;动态更新代码、配置或资源&#xff08;如页面、图片等&#xff09;&#xff0c;并让这些修改立即生效的过程。热部署主要用于开发…

[12月考试] E

[12月考试] E 题目描述 给定 nnn 个正整数 a1,a2,…,ana_1,a_2,\ldots,a_na1​,a2​,…,an​&#xff0c;小 E 可以进行若干次交换&#xff0c;每一次可以交换两个相邻的整数。 求小 E 至少要交换多少次&#xff0c;才可以让 a1a_1a1​ 是 nnn 个数里的最小值&#xff0c;ana_n…