ThreeJS教程:地图案例(包围盒、正投影)

news2025/2/25 3:40:18

推荐:将 NSDT场景编辑器 加入你的3D工具链
3D工具集: NSDT简石数字孪生

地图案例(包围盒、正投影)

地图案例(包围盒、正投影)

地图案例会涉及到几何体、包围盒、正投影相机三方面知识点。

  • 平面填充几何体ShapeGeometry
  • 包围盒Box3
  • 正投影相机OrthographicCamera

ShapeGeometry渲染河南省地图轮廓

const data = [// 河南边界轮廓边界经纬度坐标
  [110.3906, 34.585],
  [110.8301, 34.6289],
  ...
  ...
  [111.7969, 35.0684]
]
const pointsArr = [];// 一组二维向量表示一个多边形轮廓坐标
data.forEach(function(e){
    // data坐标数据转化为Vector2构成的顶点数组
    const v2 = new THREE.Vector2(e[0],e[1])
    pointsArr.push(v2);
})
// Shape表示一个平面多边形轮廓,参数是二维向量构成的数组pointsArr
const shape = new THREE.Shape(pointsArr);
// 多边形shape轮廓作为ShapeGeometry参数,生成一个多边形平面几何体
const geometry = new THREE.ShapeGeometry(shape);

选择相机

地图案例可以不使用透视投影相机模拟人眼的透视观察效果,选择正投影相机即可。

// 正投影相机
const width = window.innerWidth; //canvas画布宽度
const height = window.innerHeight; //canvas画布高度
const k = width / height; //canvas画布宽高比
const s = 50; //控制left, right, top, bottom范围大小
const camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 8000);
camera.position.set(300, 300, 300); 
camera.lookAt(0, 0, 0); //指向坐标原点

使用上面相机参数,默认情况下,你运行案例源码,可以看到河南地图并没有居中显示,在canvas画布上显示的效果也比较小。

如果你想地图全屏最大化居中显示,可以通过包围盒来辅助设置计算参数。

包围盒Box3计算模型的中心位置和尺寸

包围盒Box3计算模型的中心位置尺寸

// 包围盒计算模型对象的大小和位置
const box3 = new THREE.Box3();
box3.expandByObject(mesh); // 计算模型包围盒
const size = new THREE.Vector3();
box3.getSize(size); // 计算包围盒尺寸
// console.log('模型包围盒尺寸',size);
const center = new THREE.Vector3();
box3.getCenter(center); // 计算包围盒中心坐标
// console.log('模型中心坐标',center);

地图居中显示

设置相机.lookAt()参数指向包围盒几何中心即可。

const x = 113.51,y = 33.88;
camera.lookAt(x, y, 0);

注意如果使用了OrbitControls,需要设置.target.lookAt()参数是相同坐标。

const controls = new OrbitControls(camera, renderer.domElement);
controls.target.set(x, y, 0); //与lookAt参数保持一致
controls.update();//update()函数内会执行camera.lookAt(controls.target)

地图基本填充cnavas画布

地图显示效果更大,尽量使地图基本填充整个canvas画布。

把正投影相机控制上下左右的变量s,设置为地图模型整体尺寸的一半左右即可。

// const s = 50; //控制left, right, top, bottom范围大小
const s = 2.5;//根据包围盒大小调整s,包围盒y方向尺寸的一半左右
const camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 8000);

地图平行于canvas画布

把相机的位置和观察目标的xy坐标设置为一样,这样相机的视线方向就垂直地图平面,这样地图就平行于canvas画布,或者说平行于显示器屏幕。

const x = 113.51,y = 33.88;
//与观察点x、y一样,地图平行与canvas画布
camera.position.set(x, y, 300);
camera.lookAt(x, y, 0);

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

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

相关文章

MTK开发板-4G/5G联发科开发板相关方案定制

开发板是用于嵌入式系统开发的电路板,包括中央处理器、存储器、输入设备、输出设备、数据通路 / 总线和外部资源接口等一系列硬件组件。一般来说,开发板由嵌入式系统开发者根据开发需求自主定制,也可以由用户自己研究设计。开发板不仅是初学者…

进阶篇丨链路追踪(Tracing)很简单:链路成本指南

广义上的链路成本,既包含使用链路追踪产生的数据生成、采集、计算、存储、查询等额外资源开销,也包含链路系统接入、变更、维护、协作等人力运维成本。为了便于理解,本小节将聚焦在狭义上的链路追踪机器资源成本,人力成本将在下一…

十二、光照基础

第一部分概念 OpenGL ES的基础光照模型,目前opengl还无法模拟现实世界的复杂光照效果,但是为了效果上的逼真,还是引入了一些简单的模型来模拟光照效果, 这里介绍冯氏光照模型(Phong Lighting Model)模型,他是由三种元…

大数据:spark RDD编程,构建,RDD算子,map,flatmap,reduceByKey,mapValues,groupBy,

大数据:spark RDD编程 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其s…

618有什么数码好物值得购买?2023值得入手的数码好物推荐

在618期间,有哪些值得入手的数码好物?很多人还不知道有哪些数码好物值得买的,本文推荐几款质量不错数码好物,助您尽情享受618购物买买买。 一、南卡OE不入耳蓝牙耳机 推荐理由: 南卡OE耳机是一款性价比超高的不入耳蓝…

进公司第一天当老板问:“测得怎么样了?”我懵逼了

当我入行做测试头两份年,觉的测试工作有时候似乎挺苦逼的,我太难了…… 前言 说实话,我真想从上面去掉"似乎"两个字,软件测试人,就是苦逼!有的人曾抱怨过开发很糟糕,但我们没办法要求…

用AI生成思维导图的方法

写在前边: 这篇文章很简单,只为给自己做个记录。并且做一个简单的思考:明明很容易的东西,一旦陷入了思维困境中,就无法找到出去的路。这时候需要扩展思维或者他人提点。 正文: 就挺尴尬,之前…

计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现

文章目录 导文文章重点前言课题内容相关技术与方法介绍技术分析技术设计技术设计技术实现方面系统测试和优化总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现 文章重点 前言 本文介绍了一种基于Python的农业温室智…

玩过Tauri和Electron,最终我选择Flutter进行跨平台应用开发

Flutter、Tauri 和 Electron 都是现代桌面应用程序开发的流行选择,每种技术有其独特的优缺点,下面我们就来对它们进行一个全面的技术对比。 一、Flutter Flutter 是 Google 推出的一款开源的 UI 工具包,用于构建高性能、高保真度的移动、We…

2023年6月杭州/广州/深圳NPDP产品经理认证找这里

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

从搜索电商,社交电商到兴趣电商如何进化

【搜索电商】需求>联结>信任 淘宝、天猫、京东这些是属于什么电商? 答:这些都是属于搜索电商。 某宝,某东等用户有需求,才能产生主动寻找商品的触点,由第三方担保,产生信任。 试想一下,我…

高逼格的 SQL 写法:行行比较

码农code之路 2023-06-01 08:28 发表于天津 环境准备 需求背景 循环查询 OR 拼接 混查过滤 行行比较 总结 环境准备 数据库版本:MySQL 5.7.20-log 建表 SQL DROP TABLE IF EXISTS t_ware_sale_statistics; CREATE TABLE t_ware_sale_statistics (id bigin…

面向过程 VS 面向对象

学习编程, 基本功是掌握编程语言,但编程的本质是逻辑,所以编程思维的培养也很重要。面向过程和面向对象是两种重要的编程思想,下面讲述一下这两者的区别和优缺点比较。 1. 面向过程 面向过程是一种以事件为中心的编程思想&#…

cmake编译报错

CMake Error :The source.. 此处大概意思是一个文件地址does not match the 另外一个文件地址so used to generate cache. Rerun cmake...解决方法: vscode 快捷键ctrl shift P ,点击第一行的删除cmake 缓存 或者将 build 下的 CMakeCac…

算法百花齐放:探索常见算法的精妙之道

在计算机科学的领域中,算法是一项关键而令人着迷的技术。它们是解决问题、优化效率以及创造智能系统的核心。从简单的排序和搜索任务到复杂的机器学习和深度学习应用,常见算法为我们提供了解决各种挑战的有力工具。在本篇博客中,我们将探索常…

chatgpt赋能python:Python如何过滤某个字母——关于SEO的建议

Python如何过滤某个字母——关于SEO的建议 SEO(搜索引擎优化)是现代网络营销中的一个重要概念。为了让自己的网站在搜索引擎排名中更加靠前,许多管理员和开发人员都在使用Python等编程语言来过滤特定的字母或符号,以优化关键词的…

linux服务器更新yum源,安装 dnf包管理器

进入yum目录 cd /etc/yum.repos.dls 查看 备份 将“CentOS-Base.repo”重命名备份为“CentOS-Base.repo.backup” mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载yum源并查看 下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请…

MAC 安装配置Tomcat

一、安装Tomcat 1、首先到官网下载Tomcat:https://tomcat.apache.org/download-80.cgi 2、解压tomcat文件,可以通过快捷键(commandshiftG)把它放入/Library(资源库中) 二、用终端打开Tomcat 1.在Bin目录下 打开终端 2.授权bin目录下的所有操作:终端…

Gradle Kotlin 规范插件用于模块化结构 - 共享构建逻辑

Gradle Kotlin 规范插件用于模块化结构 - 共享构建逻辑 我们中的许多人都遇到过Groovy的困难,并习惯于将其转换为Kotlin DSL。 然后,作为Android工程师,在完全使用Kotlin编写的项目上工作是纯粹的喜悦。 我们假设采用基于功能的模块化应用程…

PLSQL Developer 14安装

资源 百度网盘: 链接:https://pan.baidu.com/s/1A4DeaKPF7y-0o90nVKFbZA?pwd6udw 提取码:6udw阿里网盘: PLSQL Developer 14破解版 https://www.aliyundrive.com/s/zUdgF98VCE3安装步骤 解压安装包后,获得PLSQL De…