Cesium 3DTileset Style 原理简析

Cesium 3DTileset Style 原理简析

应用层会看到这样的使用。那么原理是什么, 为啥写 height, 除了这个还有啥?

const tileset = await Cesium.Cesium3DTileset.fromUrl("../../public/tileset/building/tileset.json");
tileset.style = new Cesium.Cesium3DTileStyle({color: {conditions: [["${height} >= 7", "rgba(0, 149, 251, 0.3)"],["${height} >= 6", "rgb(0, 149, 251, 0.3)"],["${height} >= 5", "rgb(0, 149, 251, 0.3)"],["${height} >= 4", "rgb(0, 149, 251, 0.3)"],["${height} >= 3", "rgb(0, 149, 251, 0.3)"],["${height} >= 2", "rgb(0, 149, 251, 0.3)"],["${height} >= 1", "rgb(0, 149, 251, 0.3)"],["true", "rgb(0, 149, 251, 0.3)"]]}
});
1、相关类的结构
Cesium3DTileset┖ Cesium3DTile┖ Model3DTileContent┖ Model┖ ModelFeatureTable┣ Cesium3DTileFeature┖ BatchTexture
2、属性的存储

如果 tileset 可以存储一些属性信息, 比如 height,name等信息。都会存在 ModelFeatureTable中。可以通过拾取获取。

const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
handler.setInputAction(function (movement) {const feature = viewer.scene.pick(movement.position);if (!Cesium.defined(feature)) {return;}console.log(`Class: ${feature.getExactClassName()}`);console.log("Properties:");const propertyIds = feature.getPropertyIds();const length = propertyIds.length;for (let i = 0; i < length; ++i) {const propertyId = propertyIds[i];const value = feature.getProperty(propertyId);console.log(`  ${propertyId}: ${value}`);}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
3、样式的应用

当设置 样式时, 比如:

conditions: [["${height} >= 7", "rgba(0, 149, 251, 0.3)"],["${height} >= 6", "rgb(0, 149, 251, 0.3)"],["${height} >= 5", "rgb(0, 149, 251, 0.3)"],["${height} >= 4", "rgb(0, 149, 251, 0.3)"],["${height} >= 3", "rgb(0, 149, 251, 0.3)"],["${height} >= 2", "rgb(0, 149, 251, 0.3)"],["${height} >= 1", "rgb(0, 149, 251, 0.3)"],["true", "rgb(0, 149, 251, 0.3)"]
]

那么就会遍历 ModelFeatureTable中的属性, 找到 height属性, 然后判断条件, 如果满足条件,
就会将该颜色值写入到 批处理纹理(BatchTexture)中。最终以 model_batchTexture 传入到shader中。

示意图:
在这里插入图片描述

// featureId 和 batchID 概念相同
vec2 computeSt(float featureId) {float stepX = model_textureStep.x;float centerX = model_textureStep.y;return vec2(centerX + (featureId * stepX), 0.5);
}void selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds) {int featureId = featureIds.SELECTED_FEATURE_ID;vec2 featureSt = computeSt(float(featureId));feature.id = featureId;feature.st = featureSt;feature.color = texture(model_batchTexture, featureSt);
}

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

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

相关文章

【教程向】从零开始创建浏览器插件(三)解决 Chrome 扩展中弹出页面、背景脚本、内容脚本之间通信的问题

第三步&#xff1a;解决 Chrome 扩展中弹出页面、背景脚本、内容脚本之间通信的问题 Chrome 扩展开发中&#xff0c;弹出页面&#xff08;Popup&#xff09;、背景脚本&#xff08;Background Script&#xff09;、内容脚本&#xff08;Content Script&#xff09;各自拥有独立…

牛客网刷题 | BC84 牛牛学数列2

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 这次牛牛又换了个数…

Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度

概念如下&#xff1a; 狄尔沃斯定理_百度百科 (baidu.com) 本质就是找要求序列中最长的单调的子序列&#xff08;不一定连续&#xff09;的长度。 模板如下&#xff1a; 时间复杂度为O&#xff08;N^2&#xff09; #include<iostream>using namespace std;int dp[100…

物联网应用开发--STM32与新大陆云平台通信(云平台控制蜂鸣器、LED)

实现目标 1、掌握云平台执行器的创建 2、熟悉STM32 与ESP8266模块之间的通信 3、具体实现目标&#xff1a;&#xff08;1&#xff09;创建5个执行器&#xff1a;蜂鸣器&#xff0c;LED1&#xff0c;LED2&#xff0c;ED3&#xff0c;LED4;&#xff08;2&#xff09;执行器能对…

RK3568平台开发系列讲解(SPI篇)SPI数据的传输

🚀返回专栏总目录 文章目录 一、数据结构1.1、spi_transfer 结构体1.2、spi_message二、数据发送程序分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 参考资料: spi_transferspi_message一、数据结构 spi 数据传输主要使用了 spi_message 和 spi_transfer 结构…

Spring AOP(概念,使用)

目录 Spring AOPAOP是什么什么是Spring AOPAOP实际开发流程1. 引入依赖2. 编写AOP程序 Spring AOP详解Spring AOP中的核心概念Spring AOP的通知类型六种类型PointCutOrder(切面优先级) Spring AOP AOP是什么 Aspect Oriented Programminig(面向切面编程)切面指的是某一类特定…

cpu缓存一致性问题---cache写策略

为什么会有cpu缓存一致性问题&#xff1f; cpu缓存一致性指的&#xff1a;是缓存中和所其对应在主存中的数据的一致性。 因为cpu运算产生新数据后基于写回策略只更新缓存的值会导致缓存和主存不一致问题 解决cpu缓存一致性问题前&#xff0c;先了解写回策略是什么 了解写回策…

R语言基础--文件读写

From生物技能树&#xff08;R第五节&#xff09; 文章目录 一、文件读写1.注意用project管理工作目录2、文件读取1、读取.txt文件2、读取.csv文件注意&#xff1a;数据框不允许重复的行名 3.数据框的导出4.读取文件的其他方式(用于读取/导出文件的R包)--经验1.base2.readr3.dat…

[初学者来练]用html+css+javascript个人博客作业需求

文章目录 项目概述项目需求页面设计主页文章列表页文章详情页用户交互额外功能&#xff08;可选&#xff09; 技术要求提交要求评分标准文件代码格式提示HTML 页面结构CSS 样式设计JavaScript 交互功能 项目概述 这个项目旨在通过使用HTML、CSS和JavaScript创建一个简单而功能…

使用docker创建hadoop集群:Couldn‘t upload the file

运行的环境; Windows10 Docker Desktopdocker-hadoop 出现的问题如下: 解决方法 https://github.com/big-data-europe/docker-hadoop/issues/98

秋招算法——背包模型——423采药问题——模板:背包问题

文章目录 题目描述思路分析实现代码分析总结 题目描述 思路分析 这里明显是使用背包问题&#xff0c;所以这里参考一下背包这个模板题的内容这个是朴素版的模板&#xff0c;没有经过代码的优化 #include <iostream> #include <algorithm>using namespace std;con…

数据库SQL编写规范-SQL书写规范整理(SQL语句书写规范全解-Word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说…