随笔分类 - 开源GIS/Cesium源码
源代码解读笔记
摘要:[TOC] 你知道吗? - Cesium 是元素 **铯** 的英文单词,而 **铯原子钟** 具有世界上最高的计时精度 - 时间,是时刻间隔的意思,时刻是静态的点;而时间就指有起止时刻的一段范围 - 很多应用都要有一个时钟,例如 GPS 授时、实时渲染系统,时间可以测量很多事物,万物运动也体现了时
阅读全文
摘要:1.100 版本后, CesiumJS 对源码进行了分包(也就是 workspaces,又一说法 monorepo,npm@v7、pnpm 都原生支持这种解决方案),使用的是 npm 原生的 workspaces 方案,即在 package.json 中新增字段: { "workspaces": [
阅读全文
摘要:原文:https://cesium.com/blog/2022/10/05/tour-of-the-new-gltf-architecture-in-cesiumjs/ CesiumJS 和 glTF 之间有一段很长的合作关系。在 2012 年,CesiumJS 就实现了一个 glTF 加载器,是最
阅读全文
摘要:CesiumJS 更新日志 1.96 与 1.97 - 新构建工具 esbuild 体验及 Model API 更替完成 截止发文,1.97 还未发布,但已经在源码仓库完成了 Model API 的替换,文章会跟进。本文着重介绍新的构建指令的用法(配套 esbuild 的使用),见第三节。 首先介绍
阅读全文
摘要:很高兴你能在浮躁的年代里还有兴趣阅读源代码,CesiumJS 至今已有十年以上,代码量也积累了三十多万行(未压缩状态)。 我也很荣幸自己的文章能被读者看到,如果对你有帮助、有启发,点个赞就是对我最大的鼓励,感激不尽。本系列文章写于 2022 年,梳理的是 CesiumJS 前端库中的主要源码结构,不
阅读全文
摘要:CesiumJS 对需要网络请求的一切资源都进行了统一的封装,也就是 Resource 类。 在 XHR 技术横行的年代,就出现过 ajax 这种神器,但是 Cesium 团队选择了自己封装 XHR。后来 ES6 出现了 Promise API,axios 再次封装了 XHR,但是 Cesium 团
阅读全文
摘要:3DTiles 与 I3S 是竞争关系,可是比起生态开放性、数据定义的灵活性与易读性来说,3DTiles 比 I3S 好太多了。由于数据生产工具的开发者水平参差不齐,且数据并不存在极致的、万能的优化方法,故 3DTiles 1.0 时代的一些工具可能导致的数据渲染质量问题,让 3DTiles 的性能
阅读全文
摘要:三维模型架构(即 Scene/Model 目录下的模块)有别于旧版模型 API(即 Scene/Model.js 模块为主的一系列处理 glTF 以及处理 3DTiles 点云文件的源码,已在 1.97 之后移除),它重新设计了 CesiumJS 中的场景模型加载、解析、渲染、调度架构,更合理,更强
阅读全文
摘要:本篇涉及到的所有接口在公开文档中均无,需要下载 GitHub 上的源码,自己创建私有类的文档。 npm run generateDocumentation -- --private yarn generateDocumentation -- --private pnpm generateDocume
阅读全文
摘要:API 回顾 在创建 Viewer 时可以直接指定 影像供给器(ImageryProvider),官方提供了一个非常简单的例子,即离屏例子(搜 offline): new Cesium.Viewer("cesiumContainer", { imageryProvider: new Cesium.T
阅读全文
摘要:0. 前言 Primitive API 是公开的 API 的最底层了,它面向的场景是高性能、可自定义材质着色器(Appearance API + FabricMaterial Specification)、静态三维物体。 尽管如此,Primitive API 仍然封装了大量几何体类、材质类、WebW
阅读全文
摘要:API 用法回顾 只需传入参数对象,就可以简单地创建三维几何体或者三维模型。 const modelEntity = viewer.entites.add({ id: 'some-entitiy', name: 'some-name', position: Cartesian3.fromDegree
阅读全文
摘要:回顾 书接上文,Scene.js 模块内的 render 函数会将控制权交给 WebGL,执行 CesiumJS 自己封装的指令对象,画出每一帧来。 模块内的 render 函数首先会更新一批状态信息,譬如帧状态、雾效、Uniform 值、通道状态、三维场景中的环境信息等,然后就开始更新并执行指令,
阅读全文
摘要:0. 前置约定 对类的使用,不添加 Cesium 命名空间前缀,例如对于 Viewer,不会写 Cesium.Viewer,默认使用 ESM 格式解构导入类; JavaScript 代码使用最简格式(源码除外),不加分号,不用双引号,少注释,双空格缩进 本系列说明 佛系连载,想到什么写什么。 202
阅读全文
摘要:亮点: 增加了对 3D Tiles Next 新规范的实验性实现。以下规范扩展项已经支持: 3DTILES_content_gltf,令 glTF 模型直接作为瓦片内容; 3DTiles_metadata,为 tilesets、tiles 或者成组的瓦片内容增加结构化的元数据支持; EXT_mesh
阅读全文
摘要:@秋意正寒 先讲怎么用,再讲大致原理。 1 拾取坐标 > 仅拾取椭球体表面坐标 使用 Camera.prototype.pickEllipsoid 方法,接受一个必选的屏幕坐标,返回一个三维世界坐标 Cartesian3。 > 拾取带地形高度的地表坐标 使用 Globe.prototype.pick
阅读全文
摘要:从源码上寻找,找到相机模块中初始化的位置,其实只需改动 Camera.DEFAULT_VIEW_RECTANGLE 这一个静态字段即可。 示例:默认定位到中国上空 Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(
阅读全文
摘要:概览 动态地形夸大、过倾光线时阴影渐隐效果、增加 KTX2 和 Basis Universal 纹理格式的支持、自定义高程提供器、3D-Tiles 扩展检查机制 提供 Windows 平台外边线无效的提示文档 修复旧式 tileset 顶级瓦片无几何误差的错误、修复相机互操作问题、修复后处理异常和闪
阅读全文
摘要:Horizon Culling | cesium.com 在开发 Cesium 程序时,需要快速确定场景中的对象什么时候不可见,从而判断它不需要渲染。 一种方法是使用视锥体平视剔除,但是还有另一种重要的剔除方法是地平线剔除。 上图中,绿色点是 viewer 内可见的。红色点是不可见的,因为它们在视锥
阅读全文
摘要:参考自 DC-SDK 中关于 shp白模生成 3dTiles 自定义着色器。 效果: 效果有关的着色器,必然要改动 片元着色器。 片元着色器 varying vec3 v_positionEC; // 相机坐标系的模型坐标 void main() { /** 渐变效果 */ vec4 positio
阅读全文