1 OSBG

OSGB(OpenSceneGraph Binary)是基于 OpenSceneGraph(OSG) 三维渲染引擎的二进制三维场景数据格式,广泛用于存储和传输倾斜摄影测量、BIM、点云等大规模三维模型,尤其在国产地理信息与智慧城市项目中应用普遍。

这个格式是国产的,涉及到的软件就有点尴尬,国产软件的德行都知道,难用还很多坑。。。

几个免费的可以下载练手OSBG的地方。

来源内容类型下载方式适用练习
GitCode 武汉景点倾斜摄影模型城市 / 景区实景三维项目页 下载加载、浏览、简单分析
GitCode 通用倾斜摄影数据城市 / 建筑模型项目页 下载(密码:123321)格式测试、性能验证
GitCode 倾斜摄影示例数据小范围示例场景项目页 下载教学演示、功能测试
GitCode 三维山地模型(含 3DTiles)山地河谷、村落、BIM项目页 下载多格式兼容、场景分析
GitCode 城市级倾斜摄影数据大规模城市模型项目页 下载性能测试、城市级渲染
百度网盘 台北市倾斜模型城市级倾斜模型网盘(提取码:ae9w)城市建模、地形分析

2 格式转换

目前基本上就几个软件能弄,一个是CesiumLab,一个是SuperMap iDesktop。剩下还有很多不知名的软件。。。

2.1 CesiumLab

CesiumLab听着像官方产品,实际不是,是北京一个公司。而且还不能单独装,先要装一个他们的全家桶“地球可视化实验室”,然后在里面安装这个CesiumLab。

安装了之后点运行,15分钟都没能启动起来。看了一下changelog,居然还有用户名是中文就异常的BUG。。。

好不容易启动了找到怎么转换,研究了半天参数准备转换。结果弹出来。。。让去新地方注册。

看了一下。

真实姓名,电话号码,工作单位全部都要填进去,就差没弄个户口本进去。折腾完了终于看可以转换了,一点开始转换。直接没了。。。

又看了一下。

貌似还得上传工牌,公司盖章。。。

算了,放弃治疗了。。

2.2 SuperMap iDesktop

下载之后又是要授权。。

我看我这边全是否,估计着是要钱才行。算了吧。。。

2.3 老子云

这个是B站看到的,名字确实有点点霸气。网址是:https://www.laozicloud.com/

也是要注册一大堆,估计以后也是要收费的,不过确实还能免费用。

转换的时间很长,110MB的数据就差不多半个小时。

3 3Dtiles

转换出来的数据大概是这样的。

每个tile里面是这样。一个json和一堆glb

3.1 rootTileset.json

{"asset": {"gltfUpAxis": "Z","version": "1.0"},"extensionsUsed": ["3DTILES_content_gltf"],"geometricError": 2000,"root": {"boundingVolume": {"box": [-74.0523910522461,22.896909713745117,309.3908233642578,85.72734832763672,0.0,0.0,0.0,112.13745307922363,0.0,0.0,0.0,56.62489318847656]},"children": [{"boundingVolume": {"box": [-109.0,-44.450782775878906,296.45343017578125,43.68748474121094,0,0,0,43.6874885559082,0,0,0,43.6875]},"content": {"uri": "./Tile_+001_+000/tileset.json"},"geometricError": 4.36875},{"boundingVolume": {"box": [-95.49225616455078,16.0,304.4522705078125,42.26628875732422,0,0,0,42.266265869140625,0,0,0,42.266265869140625]},"content": {"uri": "./Tile_+001_+001/tileset.json"},"geometricError": 4.226628875732422},{"boundingVolume": {"box": [-109.0,84.25462341308594,310.2703857421875,50.77973937988281,0,0,0,50.77973937988281,0,0,0,50.77972412109375]},"content": {"uri": "./Tile_+001_+002/tileset.json"},"geometricError": 5.077973937988282},{"boundingVolume": {"box": [-39.0,-41.21886444091797,299.5376281738281,44.396854400634766,0,0,0,48.02167892456055,0,0,0,44.3968505859375]},"content": {"uri": "./Tile_+002_+000/tileset.json"},"geometricError": 4.802167892456055},{"boundingVolume": {"box": [-39.81702423095703,16.0,314.52374267578125,51.491981506347656,0,0,0,51.491981506347656,0,0,0,51.491973876953125]},"content": {"uri": "./Tile_+002_+001/tileset.json"},"geometricError": 5.149198150634766},{"boundingVolume": {"box": [-39.81702423095703,69.45303344726563,304.82012939453125,39.80249786376953,0,0,0,39.80249786376953,0,0,0,40.469970703125]},"content": {"uri": "./Tile_+002_+002/tileset.json"},"geometricError": 4.0469970703125}],"geometricError": 11.213745307922364,"transform": [-0.0,1.0,0.0,0.0,0.0,-0.0,1.0,0.0,1.0,0.0,0.0,0.0,6378137.0,0.0,0.0,1.0]}
}
  • asset
    数据集的基本信息,版本、坐标轴方向等。

  • geometricError
    顶层误差阈值,控制LOD(细节层级)切换。

  • root
    根瓦片(root tile),定义了整个模型的范围和第一个瓦片。

    • boundingVolume:瓦片的空间范围(box / region / sphere)。

    • geometricError:当前瓦片的最大几何误差,决定是否继续向下加载子瓦片。

    • refineREPLACEADD,决定加载子瓦片时是替换父瓦片,还是叠加细节。

    • children:子瓦片信息。

  • content
    指向实际的模型文件(如 .b3dm.glb.pnts)。

3.2 tileset.json

格式和root几乎大同小异。

实在太长,就简单摘抄一部分吧。

{"asset": {"extensionsUsed": ["3DTILES_content_gltf"],"gltfUpAxis": "Z","version": "1.0"},"geometricError": 1000,"root": {"boundingVolume": {"box": [-109.0,-44.450782775878906,296.45343017578125,43.68748474121094,0,0,0,43.6874885559082,0,0,0,43.6875]},"children": [{"boundingVolume": {"box": [-109.0,-44.529869079589844,296.2623291015625,43.747650146484375,0,0,0,43.747650146484375,0,0,0,43.747650146484375]},"children": [{"boundingVolume": {"box": [-109.0,-44.41993713378906,296.2623291015625,43.68302917480469,0,0,0,43.68303298950195,0,0,0,43.68304443359375]},"children": [{"boundingVolume": {"box": [-108.79536437988281,-31.627532958984375,297.58258056640625,39.55524444580078,0,0,0,39.55524444580078,0,0,0,39.55523681640625]},"children": [{"boundingVolume": {"box": [-117.75,-31.122161865234375,296.3058776855469,17.014083862304688,0,0,0,17.01408576965332,0,0,0,17.01409912109375]},"children": [{"boundingVolume": {"box": [-117.72776794433594,-37.15178680419922,296.82281494140625,10.89080810546875,0,0,0,10.868576049804688,0,0,0,10.868560791015625]},"children": [{"boundingVolume": {"box": [-117.72532653808594,-37.15178680419922,296.8204345703125,10.850723266601563,0,0,0,10.826057434082031,0,0,0,10.8260498046875]},"content": {"boundingVolume": {"box": [-117.72532653808594,-37.15178680419922,296.8204345703125,10.850723266601563,0,0,0,10.826057434082031,0,0,0,10.8260498046875]},"uri": "./Tile_+001_+000_L22_001200.glb"},"geometricError": 1.0850723266601563,"name": "Tile_+001_+000_L22_001200.osgb"}],

可以看到,root里面的uri是下层的json。这里则是对应的glb文件。

3.3 Tile_+001_+000_L17_0.glb

没啥好多说的,就是切小了的glb文件。关于glb在前面写过了。。。

3.4 小节

从上面可以看出。Cesium 的 3D Tiles(比如 3DTileset)本质上就是:

把一个很大的 3D 模型(GLB/OBJ/las 点云等)切分成多个小块,再通过一个 JSON 索引文件(tileset.json) 来描述这些小块的层级、边界和加载逻辑。这样 Cesium 在浏览时就可以做到 按需加载、分层细节(LOD)管理,避免一次性加载超大模型。

4 Cesium加载

最后还是能加载了。只是问题很多,主要是方向。

代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Cesium基础地球</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>#cesiumContainer { width: 100%; height: 100vh; }</style>
</head>
<body><div id="cesiumContainer"></div>
<script>// 初始化 Cesium ViewerCesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzYjVkMmRhYy03OGMxLTQwM2EtYWY0Ny00MDM4YjhjZmVkNzIiLCJpZCI6MzA0Mzc4LCJpYXQiOjE3NDc3MzE5NDN9.kzP84v1ibzx6iJP_ESqc-PiJ6-fTbHQvCR2KMc9lvws';const viewer = new Cesium.Viewer("cesiumContainer", {terrainProvider: new Cesium.EllipsoidTerrainProvider()});// 加载 3D Tiles (指向 rootTileset.json)const tileset = new Cesium.Cesium3DTileset({url: "data/rootTileset.json"   // 相对路径,index.html 同级目录下的 data 文件夹});viewer.scene.primitives.add(tileset);tileset.readyPromise.then(function() {const longitude = 139.7101;const latitude = 35.6852;const height = 50.0;const position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);// 设置旋转角度(弧度制)const heading = Cesium.Math.toRadians(90); // 水平方向const pitch   = Cesium.Math.toRadians(0);   // 上下倾斜const roll    = Cesium.Math.toRadians(300);   // 翻滚const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);const modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, hpr);// 如果需要缩放,可以加这一句(比如缩小 0.1 倍)const scale = 0.1;tileset.modelMatrix = Cesium.Matrix4.multiplyByUniformScale(modelMatrix, scale, new Cesium.Matrix4());// 相机飞过去viewer.zoomTo(tileset);
});</script></body>
</html>

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

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

相关文章

多语言共享贩卖机投资理财共享售卖机投资理财系统

多语言共享贩卖机投资理财/共享售卖机分红/充电宝/充电桩投资理财系统 采用thinkphp内核开发&#xff0c;支持注册赠金、多级分销&#xff0c;功能很基础 修复后台用户列表管理 可自定义理财商品 多种语言还可以添加任意语言 源码开源 多级分销 注册赠金等

[Windows] PDF 专业压缩工具 v3.0

[Windows] PDF 专业压缩工具 v3.0 链接&#xff1a;https://pan.xunlei.com/s/VOZwtC_5lCF-UF6gkoHuxWMoA1?pwdchg8# PDF 压缩工具 3.0 新版功能特点 - 不受页数限制&#xff01; 一、核心压缩功能 1.多模式智能压缩 支持 4 种压缩模式&#xff1a;平衡模式&#xff08…

SHEIN 希音 2026 校招 内推 查进度

SHEIN 希音 2026 校招 内推 查进度 &#x1f3e2;公司名称&#xff1a;SHEIN 希音 &#x1f4bb;招聘岗位&#xff1a;前端、后端、测试、产品、安全、运维、APP 研发、数据分析、设计师、买手、企划、招商、管培生 &#x1f31f;内推码&#xff1a;NTA2SdK &#x1f4b0;福利待…

ARM (6) - I.MX6ULL 汇编点灯迁移至 C 语言 + SDK 移植与 BSP 工程搭建

回顾一、核心关键字&#xff1a;volatile1.1 作用告诉编译器&#xff1a;被修饰的变量会被 “意外修改”&#xff08;如硬件寄存器的值可能被外设自动更新&#xff09;&#xff0c;禁止编译器对该变量进行优化&#xff08;如缓存到寄存器、删除未显式修改的代码&#xff09;。本…

Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案

Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案 在Vue单页应用中&#xff0c;路由切换时组件默认会经历完整的销毁-重建流程&#xff0c;这会导致两个典型问题&#xff1a;从搜索页跳转到列表页需要重新加载数据&#xff0c;而从详情页返回列表页又希望保留滚动位置…

Visual Studio Code 安装与更新故障排除:从“拒绝访问”到成功恢复

Visual Studio Code 安装与更新故障排除&#xff1a;从“拒绝访问”到成功恢复的实践分析 摘要&#xff1a; 本文旨在探讨 Visual Studio Code (VS Code) 在安装与更新过程中常见的故障&#xff0c;特别是涉及“拒绝访问”错误、文件缺失以及快捷方式和任务栏图标异常等问题。…

简单UDP网络程序

目录 UDP网络程序服务端 封装 UdpSocket 服务端创建套接字 服务端绑定 运行服务器 UDP网络程序客户端 客户端创建套接字 客户端绑定 运行客户端 通过上篇文章的学习&#xff0c;我们已经对网络套接字有了一定的了解。在本篇文章中&#xff0c;我们将基于之前掌握的知识…

如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘requests’ 问题

Python系列Bug修复PyCharm控制台pip install报错&#xff1a;如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘requests’ 问题 摘要 在日常Python开发过程中&#xff0c;pip install 是我们最常用的依赖安装命令之一。然而很多开发者在 PyCharm 控制台…

解释 ICT, Web2.0, Web3.0 这些术语的中文含义

要理解“ICT Web2.0”术语的中文含义&#xff0c;需先拆解为 ICT 和 Web2.0 两个核心概念分别解析&#xff0c;再结合二者的关联明确整体指向&#xff1a; 1. 核心术语拆解&#xff1a;中文含义与核心定义 &#xff08;1&#xff09;ICT&#xff1a;信息与通信技术 中文全称&am…

IDEA版本控制管理之使用Gitee

使用Gitee如果之前没用过Gitee&#xff0c;那么IDEA中应该长这样&#xff08;第一次使用&#xff09;如果之前使用过Gitee&#xff0c;那么IDEA中应该长这样这种情况&#xff0c;可以先退出Gitee&#xff0c;再拉取Gitee&#xff0c;退出Gitee方法见文章底部好&#xff0c;那么…

NLP(自然语言处理, Natural Language Processing)

让计算机能够理解、解释、操纵和生成人类语言&#xff0c;从而执行有价值的任务。 关注社区&#xff1a;Hugging Face、Papers With Code、GitHub 是现代NLP学习不可或缺的资源。许多最新模型和代码都在这里开源。 ①、安装库 pip install numpy pandas matplotlib nltk scikit…

后端json数据反序列化枚举类型不匹配的错误

后端json数据反序列化枚举类型不匹配的错误后端返回的json格式在前端反序列化报错System.Text.Json.JsonException:“The JSON value could not be converted to TodoReminderApp.Models.Priorityen. Path: $.Data.Items.$values[0].Priority | LineNumber: 0 | BytePositionIn…

市面上主流接口测试工具对比

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 2025最新Jmeter接口…

2025.2.4 更新 AI绘画秋葉aaaki整合包 Stable Diffusion整合包v4.10 +ComfyUI 整合包下载地址

2025.2.4 更新 AI绘画秋葉aaaki整合包 Stable Diffusion整合包v4.10 ComfyUI 整合包下载地址Stable Diffusion整合包【下载链接】ComfyUI整合包【下载链接】【报错解决】Stable Diffusion整合包 【下载链接】 下载地址 https://uwtxfkm78ne.feishu.cn/wiki/GHgVwA2LPiE9x2kj4W…

Nginx优化与 SSL/TLS配置

1、隐藏版本号可以使用Fiddler工具抓取数据包&#xff0c;查看Nginx版本&#xff0c;也可以在CentOS中使用命令curl -I http://192.168.10.23 显示响应报文首部信息。方法一&#xff1a;方法一&#xff1a;修改配置文件方式 vim /usr/local/nginx/conf/nginx.conf http {includ…

JavaWeb05

一、Listener监听器1、简介Listener是Servlet规范中的一员在Servlet中&#xff0c;所有的监听器接口都是以Listener结尾监听器实际上是Servlet规范留给JavaWeb程序员的一些特殊时机当在某些时机需要执行一段Java代码时&#xff0c;可以用对应的监听器2、常用的监听器接口&#…

科普:在Windows个人电脑上使用Docker的极简指南

在Windows个人电脑上使用Docker的极简指南&#xff1a; 1. 快速安装 下载安装包&#xff08;若进不了官网&#xff0c;则可能要科学上网&#xff09; 访问Docker Desktop官方下载页 访问Docker官网 选择Windows及&#xff08;AMD64 也称为 x86-64&#xff0c;是目前主流 PC的…

【开题答辩全过程】以 “居逸”民宿预订微信小程序为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

LeetCode 2565.最少得分子序列

给你两个字符串 s 和 t 。 你可以从字符串 t 中删除任意数目的字符。 如果没有从字符串 t 中删除字符&#xff0c;那么得分为 0 &#xff0c;否则&#xff1a; 令 left 为删除字符中的最小下标。 令 right 为删除字符中的最大下标。 字符串的得分为 right - left 1 。 请你返回…

【文献笔记】PointWeb

参考笔记: https://blog.csdn.net/m0_69412369/article/details/143106494 https://www.cnblogs.com/A-FM/p/PointWeb.html 注:本文的大部分内容是转载而来 CVPR 2019:PointWeb: Enhancing Local Neighborhood Features for Point Cloud Processing 论文:https://ieeex…