首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Three.js实战—中国地图

先来看下效果:首先回顾一下three.js的基本要素~Threejs 基本要素场景(Scene):场景是 Three.js 中的一个容器,用于存放所有的 3D 对象(如几何体、灯光、相机等)。...着色器(Renderer)Renderer绑定一个canvas对象,并可以设置大小,默认背景颜色等属性。...墨卡托投影转换可以把我们经纬度坐标转换成我们对应平面的2d坐标。具体原理注意:这里有一个坑点,就是FileLoader的参数路径,这里我把绝对和相对路径各种写法都尝试了个遍,但还是报了路径错误:设置拉伸的深度, 然后接下来就是设置材质了。lineGeometry 其实 对应的是轮廓的边线。...但是在这之前,我们先对每一个province这个对象上增加一个属性来表示他是哪一个省份的。

1.3K10

基于vue3+threejs实现可视化大屏

前言 Three.js是一款基于原生WebGL封装通用Web 3D引擎,在小游戏、产品展示、物联网、数字孪生、智慧城市园区、机械、建筑、全景看房、GIS等各个领域基本上都有three.js的身影。...本文需要对 threejs 的一些基本概念和 api 有一定了解。 如果对 threejs 这部分还不了解的可以看下官方文档和一些中文文档进行学习。...threejs里面的鼠标事件主要通过把屏幕坐标转换成 3D 坐标。通过raycaster.intersectObjects方法转换。...this.viewer); callback && callback(baseModel); }); } } 3.模型 BaseModel 类 这里对模型外面包了一层,做了一些额外的功能,如模型克隆..., Color, Object3D } from 'three'; import type Viewer from '..

87721
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    threejs地球、星空、世界轮廓绘制、飞线、坐标涟漪 、旋转动画(下篇)

    接上篇:一个基于ThreeJS 实现的漂亮的3D 地球制作过程详解(上篇) 3D 地球成果展示 github仓库地址:https://github.com/RainManGO/3d-earth npm...实现过程 实现步骤分解: ThreeJS环境初始化 星空背景 添加带纹理的地球 世界地图轮廓边界绘制 地球光晕 添加地球云层 城市位置标注和涟漪效果 添加飞线B样条 地球自转和镜头缩放动画 接上篇从第七步骤说起...一个贴图是是涟漪底图可以更改颜色: 将拿到的经纬度数据转换成xyz坐标 将带有纹理的两个几何体添加到地球上 var cityGeometry = new PlaneBufferGeometry(1,...cityWaveMesh as any).size = size; //自顶一个属性,表示mesh静态大小 cityWaveMesh.scale.set(size, size, size); //设置..._s表示mesh在原始大小基础上放大倍数 光圈在原来mesh.size基础上1~2倍之间变化 cityWaveMesh.position.set(cityXyz.x, cityXyz.y,

    3.7K20

    基于threejs实现中国地图轮廓动画

    背景 ---- 目前项目的中国地图是echarts画的,现在这想再次基础上增加一个中国地图描边动画。...这里使用threejs 的点材质去帧动画移动。 geojson版本 ---- threejs 基础场景不过多介绍,具体看代码,只写下核心部分。 步骤: 中国地图轮廓geojson 获取点坐标。...使用卡墨托投影方法,将经纬坐标转成平面 根绝点轮廓图采样出亮点 控制亮点亮度和移动 核心代码: import { BufferGeometry, Object3D, FileLoader,...:Float32Array; const opacityGeometry = new BufferGeometry(); // 中国边界 const chinaLines = new Object3D...我们刚才使用卡墨托投影转换,也会失真并且和echarts 地图轮廓对不上,所以想起其他方案。 我们利用svg路径来取点,UI提供的svg地图轮廓肯定是一致的。

    3.2K40

    threejs地球、星空、世界轮廓绘制、飞线、坐标涟漪 、旋转动画(上篇)

    原因如下: 加载慢 不漂亮 饿,echarts 灵活度没有那么高,只能想别的办法了,最后定位ThreeJs。ThreeJs需要一定的计算机视图知识,从来没有学过,必定是场恶战。...目标设计样子: 实现步骤分解: ThreeJS环境初始化 星空背景 添加带纹理的地球 世界地图轮廓边界绘制 地球光晕 添加地球云层 城市位置标注和涟漪效果 添加飞线B样条 地球自转和镜头缩放动画 初始化...var object3D = new Object3D(); let earthMesh = createEarthImageMesh(earthRadius); 创建一个地球: export const...threejs 通过 LineLoop 和世界点数据,可以绘制多边形。利用这个原理绘制国家边界。...sprite.scale.set(radius * scale, radius * scale, 1); //适当缩放精灵 return sprite }; 添加地球云层 云层效果不是一个精灵,它是相当于在地球上又套了一个圆球

    11.6K31

    【带着canvas去流浪(15)】threejs fundamentals翻译系列1-scene graph

    /www.github.com/dashnowords/blogs 博客园地址:《大史住在大前端》原创博文目录 目录 原文地址: https://threejsfundamentals.org/threejs.../lessons/threejs-scenegraph.html 笔者按:别关键词保持原英文单词,理解起来会更方便。...换个角度来思考,当你住在地球上时,并不需要考虑地球的自转或者绕着太阳公转,无论你是行走,开车,游泳,跑步还是做什么,地球相对于你来说就和静止的没什么差别,你的所有行为在地球的”本地坐标空间“中进行的,尽管这个坐标空间本身相对于太阳而言以...我们在此添加一个不可见的虚拟节点,这个Object3D的实例叫做earthOrbit,然后将地球模型和月亮模型都添加为它的子节点,场景结构图如下所示: ?...希望本文能让你了解scene graph是如何工作的,并让你学会一些基本的使用方法,关键的技巧就是构建Object3D虚拟节点并将其他节点收纳在一起。

    1.7K10

    ThreeJS 不可忽略的事情 - Gamma色彩空间

    2. sRGB颜色空间: sRGB是当今一般电子设备及互联网图像上的标准颜色空间。较适应人眼的感光。...WX20191125-143815@2x.png ThreeJS 色彩空间转换 故在ThreeJS中,当我们为材质单独设置贴图和颜色时,需要进行色彩空间转换。...具体的转换threejs会在着色器中进行,我们只需要关注为贴图指定好色彩空间,或者直接调用转换函数。 具体步骤如下: 1. sRGB转Linear A....sRGB空间,也就是进行gamma校正,threejs中可通过设置gammaOutput和gammaFactor,进行gamma校正,校正后的gamma2.2颜色空间与sRGB相似。...若采用 GLTFLoader 导入带贴图的模型,GLTFLoader 将在渲染前自动把贴图设置为 THREE.sRGBEncoding,故不需要手动设置贴图 encoding。

    10.3K204

    【带着canvas去流浪(11)】Three.js入门学习笔记

    动画的更新 动画的更新实际上和二维动画是一样的,也是通过requestAnimationFrame和逐帧动画来实现的。...舞台背景scene.background是可以设置贴图纹理的。 调整贴图的 四.补充示例 第15节-关于物体阴影 后来发现这个问题在第27节有说明。...许多demo都无法生成投影,投影不仅需要设置光线和物体的castShadow = true ,receiveShadow = true,同时需要选择能够响应光线的材质,另外,阴影需要独立的相机去拍,默认是一个正交相机...后文的第101节也有这部分知识的说明 官方文档中已经提供了示例代码,平面坐标到3D坐标转换的部分如果不明白,可以看这篇博文ThreeJS中的点击与交互——Raycaster的用法,笔者也提供了示例demo...第101节:3D世界坐标求平面坐标 文中提及的localToWorld方法实际上继承自Object3D这个父类,当前版本的方法签名是: Object3D.localToWorld(target:THREE.Vector3

    3.9K11

    threejs三维模型添加文字标签,及添加文字的方式介绍

    上次在文章ThreeJS中三维世界坐标转换成二维屏幕坐标介绍了三维二维坐标的转换方法,今天结合一个用例具体说下用法。...这时候需要把三维坐标转换为基于屏幕上的二维坐标。 三维模型上加文字标签最常用的方法应该就是(DOM + CSS)基于传统html5的文字实现,用于添加描述性叠加文字的方法。...具体实现是声明一个绝对定位的DIV,并且保证z-index够大,保证能够显示在3D场景之上。...然后计算三维坐标对应的二维坐标,根据二维坐标去设置DIV的left和top属性,让DIV在需要的位置进行展示。这种方式实现简单,DIV可方便使用页面CSS效果进行UI设置。...在三维场景上增加一个立方体,在球体和立方体上分别加上个文字标签。

    22.7K42

    用Threejs在你的网页里放一个冰墩墩!

    实际上冰墩墩的发布时间是2019年11月2号,说实在的,大帅家门口就是北京冬奥公园,附近的冬奥纪念品商店更是早就开门了,遛娃时也去过好多次,就是没有想法要买,谁知道现在还一墩难求 -_- !...大帅之前写过几篇Threejs的文章,想要学习网页3D渲染的小伙伴们记得点点赞,后续我还会多更新一些Threejs的教程。 2天赚了4个W,手把手教你用Threejs搭建一个Web3D汽车展厅!...scene, camera ); } GLTF模型优点 这里我再给没看过之前文章的小伙伴们分享下GLTF的格式的特点以及如何在...Threejs里加载GLTF模型。...那是因为原本的身体模型对象上就有贴图,我直接拿去作为卡通渲染材质的贴图,省的再加载一遍了。 现在我们的冰墩墩就很BlingBling了对吧~ Enjoy~

    2.3K20

    ThreeJS 掏洞术

    前言 最近闲来无事 ,于是我就想用 ThreeJS 画个房子 ๑乛◡乛๑ 。而我选择从画 ‘墙’ 开始下手, 其实说白了‘墙’ 就是个立方体而已,但是窗户、门呢,所以就需要在立方体上边掏个洞。...那么本文将‘简单描述’一下掏洞的过程,我之所以说‘简单描述’是因为本文中不会掺杂 ‘墙’ 这个话题,在本文中只简述《如何在ThreeJS中的立方体上掏洞 》的干货。...示例 由于ThreeJS本身并没有提供用于几何体布尔运算的函数,那么首先认识一个可以实现对几何体布尔运算 的扩展库 ThreeBSP ,它来自GitHub,它可以帮我们获取两个几何体的相同部分、将两个几何体合并...调用ThreeBSP的subtract函数进行几何体布尔运算,并将结果添加到场景当中 //将两个几何体转换成BSP对象 let bsp_wall = new ThreeBSP(wall); let bsp_window1

    3.8K41

    Threejs入门之二:引用Threejs并创建第一个3D图形

    中的场景其实就是一个特定的场面,想象一下,假如你是导演,要拍一个火车进站的镜头,这就是一个场景 2.Geometries:几何体就是立体图形,如正方体、球、圆等图形;在场景中就相当于一个道具的外形结构;...threejs中提供了很多几何体,如立方体(BoxGeometry)、圆(CircleGeometry)、圆锥(ConeGeometry)等,具体可查看threejs的官方文档 3.Materials:.../index.js">2.在index.html中新建一个div,id设置为webgl,用于展现threejs的容器,清除html默认的样式...// 设置相机的位置camera.position.set(200,200,200)另外,我们相机想要拍摄那个点位,需要将相机瞄准那个点位,所以我们还需要设置相机看向的点位// 设置相机聚焦的位置为坐标原点....将场景和相机放入渲染器renderer.render(scene,camera)12.至此,我们整改场景已经建设完成了,但是别急,此时你运行html文件在浏览器上还看不到任何的东西,是因为我们没有指定一个容器用来放置渲染器

    1.9K41

    Threejs进阶之十一:使用FontLoader和TextGeometry创建三维文字

    如果server没有设置header的Content-Length,则total值为0 onError — 在加载错误时调用注意这里需要注意的是,FontLoader加载的是JSON格式的字体,Threejs...如果里面没有需要的之前,如中文字体,可以通过facetype.js进行字体转换.TextGeometry 文本缓冲几何体TextGeometry 用于将文本生成为单一的几何体的类。...facetype.js在线转换字体facetype.js在线转换可以将我们想要转换的ttf格式的字体文件转换为json格式的字体文件,其用法非常简单,打开网站,在选择文件中选择需要转换的ttf文件,默认选中...,这些都是创建Threejs的基本套路,这里就不在赘述了,对Threejs创建的过程还不了解的小伙伴可以看我前面的博客文章。...文本上斜角的深度,默认值为20。 bevelSize: 0,// Float。斜角与原始文本轮廓之间的延伸距离。默认值为8。

    3.5K21

    # threejs 基础知识点汇总

    Three.js提供了丰富的功能和工具,让开发者能够轻松地创建3D对象、设置灯光、添加动画、处理用户交互等。它支持多种3D格式的导入,如OBJ、GLTF等,也支持自定义的材质和着色器。...透视投影相机PerspectiveCamera本质上就是在模拟人眼观察这个世界的规律。...刷新率一般是60次/秒),但是不绝对,理想情况下是60次每秒,电脑性能不好或者是代码写的处理逻辑太多消耗太多性能的话,肯定到不了60帧。...同理在三维场景中,我们想要获取某个物体,并不需要让鼠标怼到模型上。 在threejs中,提供了射线控制器,可以帮我们实现类似的效果。...它允许开发者将DOM元素转换为三维对象,并使用CSS变换来实现三维效果。

    38810

    3d弹弹球

    本文是threejs系列的第三篇,阅读前面的文章有助于更好的理解本文: ---- 1.一个简单的案例,理解threejs中几个基本概念 2.三维世界中的坐标系 ---- 绘制平面 使用threejs中提供的...scene, camera); } show() 这段代码和前文的类似,唯一不同的是这里增加了PlaneGeometry,这是一个二维平面,这个平面默认是平行于屏幕的,构建它的四个参数分别表示平面x轴上的长度...、y轴上的长度、以及x轴上的分段数、y轴上的分段数。...默认情况下,球心在世界坐标的(0,0,0)位置,这样会导致半个球在plane下方,因此设置球的y轴坐标为4,这样整个球就都在plane之上了,绘制结果如下: ?...show) render.render(scene, camera); } 由于余弦函数的取值在[-1,1],因此,球的x轴将介于10到30之间,正弦函数取值虽然也是[-1,1],但是因为取了绝对值

    58630

    用Three.js建模

    标准的three.js几何形状,如BoxGeometry则内置了正确的表面和顶点法线。...然后,就可以在对象上使用普通材质,而不是一系列材质。但你也必须告诉材质使用几何体的颜色代替材质的color属性。 有几种方法可以将颜色分配给网格中的面。一是简单地将每个面设置为不同的纯色。...Texture纹理对象具有许多可以设置的属性,包括为纹理设置最小化和放大过滤器的属性,以及用于控制mipmaps生成的属性,这些属性默认情况下会自动定义,最有可能要更改的属性是范围 0 到 1 之外的纹理坐标的包装模式和纹理转换...示例程序threejs/textured-pyramid.html显示具有砖块纹理的金字塔。...即它们应用于对象坐标,而不是世界坐标,当对象呈现时,它们作为对象上的第一个模型转换应用。例如,如果对象不是定位在原点,那么旋转是世界坐标可以改变物体的位置。

    7.5K02

    Threejs进阶之十五:在Thereejs 使用自定义shader

    顶点着色器处理顶点数据,例如坐标、法线、纹理坐标等,并对每个顶点进行分析、转换和计算。然后将这些处理过的数据传递给片元着色器进行下一步的计算。...片元也可以理解为 “像素片段”,因为它们不能完全匹配显示设备上的物理像素,而是在设备上渲染为多个物理像素。...在构造函数中,可以通过设置uniforms属性来传入需要在着色器中使用的数据。...,还不知道如何通过vite+vue3+threejs构建三维场景的小伙伴可以看我以前的博客:Threejs进阶之一:基于vite+vue3+threejs构建三维场景,这里不在赘述 新建ShaderView.vue...文件并引入Threejs 在Vue项目的components中新建ShaderView.vue,引入Threejs及其相关库 import * as THREE from 'three' import

    1.8K40

    轻松构建前端应用:前端开发工具的精髓 | 开源专题 No.54

    跨平台:Node.js 可以在多个操作系统上运行,包括 Windows、Mac 和 Linux 等。...该项目具有以下主要功能和核心优势: 灵活易用:设计可与任何 OAuth 服务配合工作,并支持 2.0+、OIDC;内置对许多流行登录服务的支持;支持电子邮件/无密码身份验证;可以带自己数据库或不带数据库进行状态认证 (如...此外,还通过高级配置使您能够定义自己的例程来处理允许哪些帐户登录、对 JSON Web Tokens 进行编码和解码以及设置自定义 Cookie 安全策略和会话属性,从而控制谁可以登录以及多久需要重新验证会话...没有限制,所有在 Threejs 中可行的操作都可以在这里实现。 无性能损耗,在 React 之外进行组件渲染。由于 React 具备调度功能,它比 Threejs 更适合大规模应用场景。...该项目的核心优势和主要功能包括: 可以理解未分段的 MP4 格式视频 使用 Web Workers 将任务独立线程进行处理 将视频片段转换为 144p 格式 实时渲染画布元素中的帧图像 从片段生成 WebM

    21910

    Threejs入门之二十:使用InstancedMesh(实例化网格)批量创建物体

    InstancedMesh(实例化网格)是Threejs提供的一种特殊的网格Mesh,它可以批量创建具有相同几何体和材质的物体;构造函数InstancedMesh( geometry : BufferGeometry...trueInstancedMesh实例应用使用InstancedMesh实现Threejs案例中的instancing / raycast 效果 引入Threejs并创建场景import * as THREE...当这个值大于1的时候,实际上它将变成一个球体const geometry = new THREE.IcosahedronGeometry(0.5,5) 创建材质const material = new...new THREE.Color().setHex(0xffffff)// 定义每个小球位置的偏移量const offset = (amount -1 ) / 2 //4.5,即每个小球间隔4.5// 转换矩阵...white = new THREE.Color().setHex(Math.random() * 0xffffff)) OK,今天就先到这里吧,下次我们来实现这个有小球组成的立方体与鼠标的交互效果,仿照Threejs

    3.2K20

    三维引擎导入obj模型全黑总结

    解决方案上,一种是让建模人员重新导出模型,导出的时候勾选上导出法线向量。 另外也可以从程序上兼容一下,判断模型是否有法线向量,如果没有,程序自己计算法线向量。...以threejs为例,调用computeVertexNormals计算法线向量代码如下: if(child.geometry && !...mtl文件中贴图引用了本地路径 有时候建模人员在导出mtl文件的时候,里面的贴图路径是本地的绝对路径,如下图所示: 此时导入的模型因为找不到贴图,而变成了黑色。...解决方法就是把绝对路径改成相对路径,如下图: 可以手动编辑mtl文件修改,也可以建模人员导出的时候设置。...导入的场景没有设置灯光 还有一种情况,模型都没有问题,但是由于场景没有设置任何灯光,导致模型看不见,此种情况需要程序上添加灯光即可。 结语 上一张修改后的效果图

    1.4K20
    领券