Three JS 调研

news2024/11/19 19:26:34

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.coloradmin.cn/o/110735.html

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

相关文章

一文掌握MyBatis的动态SQL使用与原理

摘要&#xff1a;使用动态 SQL 并非一件易事&#xff0c;但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言&#xff0c;MyBatis 显著地提升了这一特性的易用性。本文分享自华为云社区《MyBatis详解 - 动态SQL使用与原理》&#xff0c;作者&#xff1a;龙哥手记 。 动态 …

Ajax(JavaWeb-Ajax、跨域等)

1.JavaWeb - Ajax 概念&#xff1a;AJAX&#xff08;Asynchronous Java JavaScript And Xml &#xff09;&#xff1a;异步的JavaScript和Xml AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 使用…

笔试训练(6)

笔试题1:将一个字符串转化成整数:把字符串转换成整数__牛客网 将一个字符串转化成整数&#xff0c;要求不能使用字符串转化成整数的库函数&#xff0c;数值为0或者字符串不是一个合法的数值那么返回0 输入描述:输入一个字符串&#xff0c;包含数字字母符号&#xff0c;可以为空…

【八股文大白话整理】

Java 重载和重写的区别 这两个都是多态的一种表现形式。 重载是在编译器通过方法中形参的静态类型确定调用方法版本的过程&#xff0c;是多态在编译期的表现形式。判定只有两个条件&#xff1a;1. 方法名一致 2. 形参列表不同 重写是在方法运行时&#xff0c;通过调用者的实际…

Transforming the Latent Space of StyleGAN for Real Face Editing翻译

点击下载论文 摘要 尽管最近在使用StyleGAN进行语义处理方面取得了进展&#xff0c;但真实人脸的语义编辑仍然具有挑战性。W空间和W空间之间的差距要求在重构质量和编辑质量之间进行权衡。为了解决这个问题&#xff0c;我们建议通过用基于注意力的transformers替换StyleGAN映射…

深入剖析Arthas源码

一. 前言 Arthas 相信大家已经不陌生了&#xff0c;肯定用过太多次了&#xff0c;平时说到 Arthas 的时候都知道是基于Java Agent的&#xff0c;那么他具体是怎么实现呢&#xff0c;今天就一起来看看。 首先 Arthas 是在 GitHub 开源的&#xff0c;我们可以直接去 GitHub 上获…

智能表格软件-FineReport JS实现自定义按钮快速给参数赋指定范围值

1. 概述 1.1 预期效果 周报、月报、季报、年报中有参数查询时&#xff0c;每次都需要手动选择&#xff0c;比较繁琐&#xff0c;所以就需要一种快速筛选的方法&#xff0c;只需点击某个按钮&#xff0c;就能准确定位到合适的时间范围&#xff0c;如下图所示&#xff1a; 1.2 实…

JMeter+Ant+Jenkins接口自动化测试框架

一:简介 大致思路&#xff1a;Jmeter可以做接口测试&#xff0c;也能做压力测试&#xff0c;而且是开源软件&#xff1b;Ant是基于Java的构建工具&#xff0c;完成脚本执行并收集结果生成报告&#xff0c;可以跨平台&#xff0c;Jenkins是持续集成工具。将这三者结合起来可以搭…

Hive+Spark离线数仓工业项目实战--环境构建(3)

项目环境配置 根据需求实现项目环境配置 实施 - 注意&#xff1a;所有软件Docker、Hadoop、Hive、Spark、Sqoop都已经装好&#xff0c;不需要额外安装配置&#xff0c;启动即可 配置网络&#xff1a;如果你的VM Nat网络不是88网段&#xff0c;请按照以下修改 - 修改Linux虚拟…

数据改版 | CnOpenData中国工业企业基本信息扩展数据

CnOpenData中国工业企业基本信息扩展数据 一、数据简介 拉动中国经济的三个产业中&#xff0c;工业企业占有特殊的地位&#xff0c;是推动国内经济发展的重要产业。工业是最主要的物质生产部门&#xff0c;为居民生活、各行业的经济活动提供物质产品&#xff0c;这一重要作用是…

vm虚拟机安装VMware Tools弹出‘安装程序无法自动安装

问题出现原因 这个问题是由于微软从2019年12月3日已将Windows驱动程序签名更改为使用SHA-2算法&#xff0c; 不支持SHA-2代码签名的旧版Windows系统将无法通过驱动程序签名验证。 也就是说你的win7或者Windows Server 2008 系统中缺少使用新算法的签名&#xff0c;原来的SHA-…

数据库如何加密连接

文章目录1. 前言2. 如何加密&#xff1f;3. 使用Druid实现加密4. 生成密文5. 添加加密配置6. 隐藏问题7. 开发环境替换公钥8. 生产环境替换公钥9. 运行原理10. 总结1. 前言 现在无论是公司的项目还是个人的项目&#xff0c;都会选择将源码托管在Git服务器&#xff08;Gitee&am…

熬不过“冬天”,又一跨境电商平台关停

熬不过“冬天”&#xff01;又一跨境电商平台关停据相关媒体报道&#xff0c;京东旗下跨境电商服务平台Joybuy于2022年11月4日宣布将进行“业务升级”&#xff0c;而后该平台的所有交易活动已经停止。据Egain News报道&#xff0c;“业务升级”的说法很大可能只是关停的一种“委…

【JavaEE】Cookie 和 Session

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录【Cookie和Session】相关方法1. HttpServletRequest类的相关方法2. HttpServletRespon类的相关方法3. HttpSession类中相关的方法&#xff1a;4. Cookie类中相关的方法&#xff1a;写一个模拟登录的案例上传文件Serv…

开源工具系列1:Cloud Custodian

对云安全的检测中&#xff0c;最重要的一个组成部分就是对配置的验证&#xff0c;今天来介绍一个开源的规则检测引擎项目&#xff0c;Cloud Custodian。 一、Cloud Custodian 是什么 Cloud Custodian 是用于管理公有云帐户和资源的规则引擎。规则策略用简单的 YAML 格式&#x…

【TypeScript】class类型讲解

目录 class类型 构造函数 class类的继承 可见修饰符 只读修饰符 class类型 TypeScript支持ES引入的class关键字&#xff0c;并为其添加了类型注解和其他语法(例如&#xff1a;可见性修饰符)。 class person {// 声明初始值&#xff0c;可省略类型注解(TS类型推论为strin…

艾美捷超氧化物歧化酶检测试剂盒,活性检测说明

细胞和细胞外环境中大量的超氧化物歧化酶&#xff08;SOD&#xff09;对于预防与氧化应激相关的疾病至关重要。SOD突变约占家族性肌萎缩侧索硬化症&#xff08;ALS&#xff09;病例的20%。SOD在预防其他神经退行性疾病&#xff08;如阿尔茨海默氏症、帕金森氏症和亨廷顿舞蹈症&…

美丽田园ipo上市,它的底气从何而来?

美丽田园医疗健康产业有限公司(简称美丽田园)&#xff0c;中国最大的传统美容服务提供商&#xff0c;成立近三十年来&#xff0c;一直致力于美与健康的发展&#xff0c;坚持系统化标准化管理和美与健康一站式服务&#xff0c;为顾客提供舒适的美与健康新体验。近日&#xff0c;…

Matter理论介绍-通用-1-04:桥接器-其他功能

【源码、文档、软件、硬件、技术交流、技术支持&#xff0c;入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取&#xff0c;免安装&#xff0c;解压即用】 持续更新中&#xff0c;欢迎关注&#xff01; 一、桥接器的配置流程 我们已经知道&#xff0c;桥接器和…

【QT】PySide6安装与运用

一、什么是PyQt 简单来说&#xff0c;PyQt就是用Python重构的Qt&#xff0c;一个强大的&#xff0c;创建跨平台GUI(Graphical User Interface)的工具包。开发者为Phil Thompson。 二、PySide与PyQt PyQt和PySide都是基于Python语言对Qt的实现&#xff0c;PyQt的推出时间要比…