Three JS 调研

news/2024/12/29 18:50:43/

0. 结论

  1. three.js是使用WebGL来绘制三维效果的,核心数据是3D对象和三维模型,更多的是关注如何通过webgl更精细而美的渲染数据

  2. three.js相当于封装了webgl,但还是很底层,并不是一个类似于cesium或者mapbox这样的成熟地图框架,Three.js的场景不具备地理空间表达的能力,如果要作为地图使用,无法开箱即用,需要基于three.js做二次开发,基本上工作量是按照年为单位的,目前有一些基于three.js的开源框架,利于ITowns ,官方介绍是可以连接到 WMS/WMTS/TMS 服务器,包括高程数据并加载许多不同的数据格式(3dTiles、GeoJSON、Vector Tiles、GPX 等等),但看起来star只有700多,(和ceisum的9K比差距还很大)距离成熟还有不小的路要走,腾讯内部也在孵化基于three.js的地图引擎,但不是开源,也还未经过市场检验。

  3. three.js原生不支持地图瓦片,地形,和3d tiles,需要使用一下第三方库,目前可以实现加载b3dm的3d tiles , xyz协议的地图和地形,但是都有各种各样的限制,例如3d tiles只支持基于XYZ三维矢量坐标的协议,如果要支持经纬度,还需要做大量工作去支持,地形和底图也是同理

three.js是 webgl的第三方库

引用官方的说法: three.js是使用WebGL来绘制三维效果的,核心数据是3D对象和三维模型, three.js封装了诸如场景、灯光、阴影、材质、贴图、空间运算等一系列功能

官网:https://threejs.org/

官网提供了一系列示例,描述了three js可以实现的功能

1. 第一个3D程序

1.1 代码示例:

<html>
<head><meta charset="utf-8"><title>My first three.js app</title><style>body {margin: 0;padding:0;}</style>
</head><body><script src="js/three.js"></script><script>const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);const geometry = new THREE.BoxGeometry();const material = new THREE.MeshBasicMaterial({color: 0x00ff00});const cube = new THREE.Mesh(geometry, material);scene.add(cube);camera.position.z = 5;const animate = function () {requestAnimationFrame(animate);cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);};animate();</script>
</body>
</html>

基本逻辑:

  1. 创建场景(scene), 也就是虚拟的空间

  2. 创建相机,这里创建了一个透视相机

  3. WebGLRenderer生成一个渲染实例, 用来渲染我们所有的3d效果

    1. setSize设置场景的宽高。
    2. setClearColor设置背景色, 这个背景色不是平面的, 是全方位的, 你可以想想成你在一个屋子里,这个颜色就是屋子墙壁、地板、天花板的颜色(setClearColor不写就是黑色
    3. renderer.domElement生成的渲染的实例, 这个要放到对应的dom容器里面(是个canvas标签)。
  4. 创建元素 THREE.Mesh, 并加入scene

  5. 渲染出来 第一个参数是场景, 第二个参数是相机

    1. renderer.render(scene, camera);

1.2 效果图

在这里插入图片描述

2. 展示一个三维地球的方法

2.1 首先加载一个球体

2.2 在球体表现绘制经纬度,国家轮廓等属性

在这里插入图片描述

2.3 如果要在地球上打点等操作

对于经纬度映射到XYZ的三维向量

按照设置的地球大小归一化

3. 加载3d tiles

3.1 当前支持的库:

3.1.1 @jdultra/threedtiles

官网:https://github.com/ebeaufay/threedtiles

示例: https://ebeaufay.github.io/ThreedTilesViewer.github.io/

不足:

  1. 当前仅支持B3DM files ,也就是仅支持建筑物这种模型,不支持例如数这种i3dm file

  2. 数据坐标系要是xyz的坐标系,如果要支持经纬度,需要做很多转化

3.1.2 nytimes/three-loader-3dtiles

官网:https://github.com/nytimes/three-loader-3dtiles

示例:

https://nytimes.github.io/three-loader-3dtiles/examples/demos/map-overlay/

https://nytimes.github.io/three-loader-3dtiles/examples/demos/realitycapture/

不足:

  1. 当前仅支持B3DM files和pnts files(点云数据)

4. 加载xyz协议的底图

参考文档:https://m.tqwba.com/x_d/jishu/222380.html

5. 加载地形

参考文档: https://www.cnblogs.com/ateemo/articles/6268740.html


http://www.ppmy.cn/news/6085.html

相关文章

jQuery 插件开发

文章目录jQuery 插件开发插件概述常用插件文本溢出&#xff1a;dotdotdot.js单行文本省略多行文本省略延迟加载&#xff1a;lazyload.js插件编写方法类插件函数类插件jQuery 插件开发 插件概述 jQuery插件可以理解成是使用jQuery来封装的一个功能或特效。 一般来说&#xff…

Mac 截图工具 iShot Pro - 软件介绍、下载安装详细教程

Mac 截图工具 iShot Pro -软件介绍、下载安装详细教程 iShot -优秀&#xff0c;功能齐全的区域截图&#xff0c;窗口截图&#xff0c;多窗口截图&#xff0c;长屏幕截图&#xff0c;shell截图&#xff0c;时间间隔截图&#xff0c;快速注释&#xff0c;纹理&#xff0c;颜色匹配…

消息中间件Kafka快速入门

前言 Kafka是基于zookeeper管理的&#xff0c;所以要先安装zookeeper&#xff0c;如果是单机模式&#xff0c;zookeeper安装比较简单&#xff0c;本文就介绍一下单机如何搭建kafka&#xff0c;以及基本的java demo。 环境搭建 Zookeeper 安装 http://mirrors.cnnic.cn/apac…

Python 函数用法和底层分析

【无限嚣张&#xff08;菜菜&#xff09;】&#xff1a;hello您好&#xff0c;我是菜菜&#xff0c;很高兴您能来访我的博客&#xff0c;我是一名爱好编程学习研究的菜菜&#xff0c;每天分享自己的学习&#xff0c;想法&#xff0c;博客来源与自己的学习项目以及编程中遇到问题…

详细设计说明书(GB8567——88)基于协同的在线表格forture-sheet

详细设计说明书 1引言 1.1编写目的 该文档在概要设计的基础上&#xff0c;进一步的细化系统结构&#xff0c;展示了软件结构的图标&#xff0c;物理设计、数据结构设计、及算法设计、详细的介绍了系统各个模块是如何实现的&#xff0c;包括涉及到的算法&#xff0c;逻辑流程…

Redis常见面试题(七)

目录 1、什么是缓存预热? 2、什么是缓存热备? 3、什么是缓存雪崩? 4、如何解决缓存雪崩? 5、什么是缓存穿透? 6、如何解决缓存穿透? 7、什么是缓存击穿? 8、如何解决缓存击穿? 9、什么是缓存抖动? 10、如何解决缓存抖动? 11、什么是缓存无底洞? 12、如何…

Vue基础8之Vue组件化编程、非单文件组件与单文件组件

Vue基础8Vue组件化编程对组件的理解一些概念的理解非单文件组件基本使用几个注意点组件的嵌套VueComponent一个重要的内置关系先导篇&#xff1a;原型对象正文&#xff08;可以理解为类的继承&#xff09;单文件组件Vue组件化编程 对组件的理解 传统方式&#xff1a; 使用组…

路由器的工作原理(计算机网络-网络层)

目录 路由器的构成 转发和路由选择的区别 典型的路由器结构 交换结构 输出端口 路由器与交换机的比较 两种基于存储转发的分组交换设备的比较 交换机和路由器各有的应用场合 三层交换机 三层交换机的应用 路由器的构成 路由器的任务 路由器是一种具有多个输入端口和多…