three-tile: 一个开源的轻量级三维瓦片库

news2024/9/25 3:27:28

three-tile 介绍

three-tile 是一个开源的轻量级三维瓦片库,它基于threejs使用typescript开发,提供一个三维地形模型,能轻松给你的应用增加三维瓦片地图。

https://blog.csdn.net/HZGJF/article/details/140280844

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

源码:https://github.com/sxguojf/three-tile

示例:https://github.com/sxguojf/three-tile-example

1. three-tile是什么?

  • three-tile 是 webgis?不,它的gis功能很弱,仅提供了三维地图模型和地理坐标转换功能。
  • three-tile 是基于cesium、mapbox等的二次封装吗?不,它是基于 threejs 自主实现的。
  • three-tile 更像是游戏开发中的LOD地形,但它可以使用地图服务商提供的地形和影像瓦片数据渲染地图。
  • three-tile 的地图被封装为一个普通的 Mesh,能轻松添加进 threejs 应用中。
  • three-tile 的核心实际与地图无关,它就是一个LOD模型,地图只是其典型应用之一。

2. 开发初衷

  • 市面上的三维 webgis 框架不少,如 cesium、MapBox.gl 等,功能强大,但这些地图作为重量级框架,它包揽了三维场景、摄像机、模型、灯光等一切,想深度定制难度较大,另外,它们本身占用资源太多,功能一多速度难以满足需求。

  • 三维地形也是游戏引擎中的重要功能之一,但主流的游戏引擎地形数据要么随机生成,要么美工手工设计,地形制作工作量较大。当然,unity3d、unreal4等游戏引擎,也有一些插件可以导入真实地形,但通用性较差,操作复杂。

是否能将真实地图数据与游戏的三维地形结合,提供一个使用瓦片地图服务的轻量级三维地形模型? OK,这就是three-tile的开发初衷。

3. 3D开发技术选型

  • webgl: web下3D开发必备,但直接基于webgl开发很繁琐,选择一个3D引擎能大大节省开发时间。
  • threejs: 封装了webgl,使用简单,国内具有非常好的生态。
  • babylonjs: 封装了webgl,大厂出品,ts编写,支持webgpu,但国内生态不如threejs。
  • unity3d: 游戏引擎,可用C#、JavaScript开发,但主要用于游戏,web端支持较差。
  • unreal: 游戏引擎,主要用于游戏,只能做桌面版。

综合比较,如果开发web版的3d地图,选择threejs和babylon.js更加适合,考虑个人开发影响力太小,需要借助其它框架生态,那threejs是首选。

当然,如果确实有需求,我觉得用babylon或unity3d也可以考虑。目前还是使用threejs开发。

4. 典型应用场景

4.1 给现有应用增加地形

在threejs示例中,大部分简单应用使用一个平面作为地面,如果能把平面换为真实地形,立马增色不少:

在这里插入图片描述threejs中的傻鸟在这里插入图片描述加上地形,让它翱翔在青藏高原
three.js examples (threejs.org)three-tile demo (sxguojf.github.io)
在这里插入图片描述threejs中可爱的小房子在这里插入图片描述西安南二环找块工地放上去
three.js examples (threejs.org)three-tile demo (sxguojf.github.io)
在这里插入图片描述threejs中孤独的小兵兵在这里插入图片描述放到地图上执行任务
three.js examples (threejs.org)three-tile demo (sxguojf.github.io)
在这里插入图片描述threejs中平淡无奇的夕阳在这里插入图片描述加上地形才是它真正的效果
three.js examples (threejs.org)three-tile demo (sxguojf.github.io)

而这一切使用three-tile仅需三步:

  1. 定义地图数据源
  2. 创建地图模型
  3. 用地图替换原来的平面

4.2 简单的webgis

当然,你如果要把three-tile当做一个简单三维gis也未尝不可,地图模型可直接使用主流瓦片数据源,渲染出逼真的地形;提供地理坐标(经纬度海拔高度)到三维场景坐标的转换,将地图元素(模型、标签)叠加在指定位置;通过鼠标键盘控制摄像机,实现地图缩放、平移、旋转和漫游;内置mapbox、bing、goole、arcgis、天地图、高德、腾讯等瓦片地图支持,也可以自行扩展支持其它瓦片地图服务。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.3 游戏开发

如果你想将three-tile用于游戏开发,也可以试试,它完美支持threejs内置的各种控制器,仅更换控制器,即可实现第一人称、飞行等游戏功能,在真实地图上开战效果应该不错。由于地图是实时下载的,如果对地图加载中的空白块不爽,可以通过调整地图的数据缓存和渲染缓冲区大小参数,以空间换时间缓解这个问题。

在这里插入图片描述第一人称射击在这里插入图片描述即时战略在这里插入图片描述模拟飞行
three-tile demothree-tile demothree-tile demo

4.4 数据可视化

目前,three-tile在生产环境的应用主要是数据可视化:

在这里插入图片描述三维卫星云图在这里插入图片描述风场动画
three-tile demo
在这里插入图片描述500hpa高度场在这里插入图片描述pm2.5体渲染
three-tile demo

在这里插入图片描述总之,three-tile仅提供一个地形Mesh,利用threejs的强大生态实现各种炫酷的效果。如果你是threejs开发者,值得一试。

5. 特点

  • 轻量级:地图以一个三维模型方式提供,使用它不会对已有程序架构产生任何影响。
  • 依赖少:整个框架仅有 threejs(R165)一个依赖。
  • 速度快:对资源占用做极致优化,核显也能轻松跑到 60FPS。
  • 使用简单:熟悉 threejs 基本上没有学习成本。
  • 扩展性强:数据、模型、纹理、材质、渲染过程均能根据自己需要扩展和替换。

6. 局限性

能力有限,three-tile目前还有一些短板,期待有兴趣的开发者参与。

  • 地图未使用球面坐标系:为了保持库的简洁,地图模型使用笛卡尔坐标,地球并不是个球,而是投影到了平面。

    为什么不做成球,一方面是为了开发简单,另一方面使用球面坐标系,threejs内置的大部分几何体、着色器都需要修改,如BoxGeometry,它的边不能是直线,而要与地球曲率相适应,threejs的生态完全不适用了。开始的开发计划,就是打算做个平面地图,毕竟从太空才能看出来地球是个球,但无法满足贪婪的用户需求,好吧,搞个伪球体把多余的部分遮住,远看像个球就行了。

  • 存在z-fight问题: 受计算精度影响,在远距离观察时,webgl分不清物体的前后遮挡,即存在让所有三维开发者头痛的z-fight问题。

    既想在数万公里看地球,又要贴地看清地面的小汽车,z-fight不可避免,虽然可以使用logarithmicDepthBuffer缓解,但这个缩放范围实在太大了,上万公里高空webgl已经无法分清你的模型距地0.1公里还是0.2公里,它会不停闪烁。能否参考cesium使用分段渲染的方式解决?但three-tile初衷是只是做一个模型,不涉及模型外的东西,如果z-fight确实对你的应用影响较大,那可以试试分段渲染。

  • 贴地功能未实现:three-tile最大的短板是贴地功能,目前贴地是使用射线法计算地形高度,但效率太低,线、面的贴地计算量太大无法完成。

    cesium使用深度缓冲区对模型进行剪裁实现,真是脑洞大开!我也尝试使用深度缓冲区使用着色器进行三维模型重建,但无奈未能成功。

  • 暂未做移动端匹配:要改的太多,暂没有精力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

malloc与free函数的用法(精简全面 · 一看即懂)

前言:Hello大家好😘,我是心跳sy,今天为大家带来malloc函数与free函数的用法,我们一起来看看吧! 目录 一、malloc函数 💫 1、⭐️malloc函数对应的头文件⭐️ 2、⭐️malloc函数的作用⭐️ 3…

高职计算机网络实训室

一、高职计算机网络实训室建设的背景 如今,数字化发展已成为国家发展的战略方向,是推动社会进步和经济发展的重要动力。在这一时代背景下,计算机网络技术作为数字化发展的基础设施,其地位和作用愈发凸显。因此,高职院…

Windows中nvm的安装配置和卸载

文章目录 Windows中安装配置,和卸载nvm一、卸载node二、安装vnm三、配置环境(配置路径和下载源)四、使用nvm安装node五、nvm常见的命令六、nvm的卸载 Windows中安装配置,和卸载nvm 一、卸载node 如果没有node可以直接了跳过该步…

<数据集>Udacity交通目标识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:13239张(实际有15000张,但其中1761张无标签的图片被我去除掉) 标注数量(xml文件个数):13239 标注数量(txt文件个数):13239 标注类别数:11 标注…

全开源TikTok跨境商城源码/TikTok内嵌商城+搭建教程/前端uniapp+后端

多语言跨境电商外贸商城 TikTok内嵌商城,商家入驻一键铺货一键提货 全开源完美运营 海外版抖音TikTok商城系统源码,TikToK内嵌商城,跨境商城系统源码 接在tiktok里面的商城。tiktok内嵌,也可单独分开出来当独立站运营 二十一种…

Tomcat下载安装配置教程(零基础超详细)

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 Tomcat 1、下载…

Docker 镜像构建报 exec xxx.sh: no such file or directory

问题记录 场景: 处于对nacos docker 部署最新版本的探究,但是nacos/nacos-server镜像拉取不到最新版本,官网也是给出自己构建镜像的方案。 具体步骤很简单,先clone项目,然后签出你要的nacos版本,通过docke…

Java——IO流(二)-(7/7):补充知识:IO框架(什么是框架、什么是IO框架、Commons-io)

目录 什么是框架 什么是IO框架 Commons-io 常用方法 框架下载 框架导入 实例演示 什么是框架 解决某类问题,编写的一套类、接口等,可以理解成一个半成品,大多框架都是第三方研发的。好处:在框架的基础上开发,可…

edge 学习工具包 math solver

简介 推荐微软推出的学习工具中的两项工具:数学求解器和 pdf 阅读器。 打开 edge 学习工具包的方法 :右上角三点-更多工具-学习工具包。 math solver 除了基础的计算求解外,还用图标展示公式,清晰直观。 地址:求解…

Vue 中的 scoped 和 /deep/ 深度选择器

Vue在组件里写 css 给 <style> 标签加上 scoped &#xff0c;比如&#xff1a; <style lang"less" scoped> &#xff0c;这样的 css 就是局部的&#xff0c;不会影响其他组件。 假设引入了一个子组件&#xff0c;并希望在组件中修改子组件的样式&#x…

多波束常用设备的坐标系统

CARIS处理多波束的时候&#xff0c;一般首先要建立船型文件&#xff0c;采集的设备或软件不同&#xff0c;其船型文件也不同&#xff0c;其中最关键就是采集设备和软件的坐标系统。 为了使用方便&#xff0c;不用费力地去查对应的使用手册&#xff0c;现将常用多波束设备和软件…

VMware vSAN 8.0U3 - 存储虚拟化软件

VMware vSAN 8.0U3 - 存储虚拟化软件 vSAN 8 with Express Storage Architecture 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vsan/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VMware vSAN 存储虚拟化软…

Covalent Network(CXT)通过社区投票将代币迁移并更名为 CXT,以推动人工智能更深层次的创新

专注于人工智能和 Web3 的模块化数据基础设施 Covalent Network&#xff08;CXT&#xff09;宣布&#xff0c;其治理提案已通过社区投票并顺利实施&#xff0c;即将原生代币 CQT 迁移为新的 CXT 代币&#xff0c;并部署至新的合约。这一关键性转变标志着 Covalent Network&…

Fastjson2使用JSONOObject或者mao转换为JSON字符串时丢失Null值字段

最近在工作中发现问题fastJson转换为JSONString时丢失值为null的问题特此解决。 public class test001 {public static void main(String[] args) {JSONObject jsonObject new JSONObject();jsonObject.put("foo1", "bar");jsonObject.put("foo2&quo…

最新 Kubernetes 集群部署 + Containerd容器运行时 + flannel 网络插件(保姆级教程,最新 K8S 1.28.2 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

“汇聚全球智慧·引领未来科技”2024南京人工智能展会

南京&#xff0c;这座古老而又现代的城市&#xff0c;自古以来便是江南繁华的代名词。如今&#xff0c;随着科技的飞速发展&#xff0c;南京再次站在了时代的潮头&#xff0c;以其深厚的历史底蕴和不断创新的科技力量&#xff0c;成为了全球瞩目的焦点。而在即将到来的2024年&a…

未解之谜----macOS版fiddler everywhere 如何将当前会话保存成一个txt文件查看

如图&#xff0c;这是win版的保存方式&#xff0c;mac上面根本没有这个按钮&#xff0c;找的很崩溃

排序(二)——快速排序(QuickSort)

欢迎来到繁星的CSDN&#xff0c;本期内容包括快速排序(QuickSort)的递归版本和非递归版本以及优化。 一、快速排序的来历 快速排序又称Hoare排序&#xff0c;由霍尔 (Sir Charles Antony Richard Hoare) &#xff0c;一位英国计算机科学家发明。霍尔本人是在发现冒泡排序不够快…

中伟视界:提升矿山安全管理效率,罐笼超员AI算法的应用实践

随着矿山智能化的发展&#xff0c;安全管理成为关键领域之一。罐笼作为矿山运输的重要设备&#xff0c;其安全使用直接关系到矿工的生命安全。为防止罐笼超员带来的安全隐患&#xff0c;AI算法在罐笼超员检测中发挥了重要作用。本文将详细介绍罐笼超员AI算法的工作原理及其应用…

oracle dba常用脚本2

11、表空间实有、现有、使用情况查询对比 SELECT TABLESPACE_NAME 表空间,TO_CHAR(ROUND(BYTES / 1024, 2), 99990.00) || 实有,TO_CHAR(ROUND(FREE / 1024, 2), 99990.00) || G 现有,TO_CHAR(ROUND((BYTES - FREE) / 1024, 2), 99990.00) || G 使用,TO_CHAR(ROUND(10000 * US…