首页 > 其他分享 >Three.js实现高程数据加载

Three.js实现高程数据加载

时间:2023-03-03 20:07:28浏览次数:52  
标签:高程 canvas const THREE js Three 512 加载




Three.js实现高程数据加载_github


通过加载高程数据(dem),显示地形高低起伏,达到良好的立体展示效果;Three.js能够通过设置一系列坐标点的高度,构建成面的形式,显示高程数据。

实现方式:

使用Three.js的PlaneGeometry进行实现,PlaneGeometry是一个平面几何的效果,设置长度和宽度值,形成一个方形的范围,按照API的定义,通过设置平面上的多个位置的高度信息,达到高低起伏的效果。

PlaneGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments : Integer)

widthSegments和heightSegments是非必填项,默认为1。

1、通过随机数,简单的设置高程的效果

const geometry = new THREE.PlaneGeometry(512, 512, 511, 511);  
      const vertices = geometry.attributes.position.array;
      for (let i = 0, j = 0, l = vertices.length; i < l; i++, j += 3) {
          vertices[j + 1] = Math.random() * 20;
       }
//添加一个简单的贴图
const threetextureinfo =
new THREE.TextureLoader().load('images/rasterimg.png');
let mesh =
new THREE.Mesh(geometry, new THREE.MeshBasicMaterial({
                   map: threetextureinfo,
                   side: THREE.DoubleSide
               }));
scene.add(mesh);

效果如图:

Three.js实现高程数据加载_github_02

2、使用地形数据进行设置,这里用了mapbox-gl的一个高程数据切片,如下图:

Three.js实现高程数据加载_ide_03

使用canvas进行图片加载

const canvas = document.createElement('canvas');

canvas.width = 512;

canvas.height = 512;

let ctx = canvas.getContext('2d');

ctx.drawImage(_img, 0, 0)

const imagedata = ctx.getImageData(0, 0, 512, 512).data;

根据图片的颜色数值进行高度计算,按照以上方式进行设置,具体参见​​ 分享开源mapbox-gl地形生成代码​


参考内容:​​ https://github.com/mrdoob/three.js/blob/master/examples/webgl_geometry_terrain_raycast.html​

​ https://github.com/IceCreamYou/THREE.Terrain​

原文链接:​Three.js开发:高程数据加载

标签:高程,canvas,const,THREE,js,Three,512,加载
From: https://blog.51cto.com/u_15985385/6099069

相关文章

  • 如何使用 js 实现一个比较APP版本号的大小的版本号排序函数 All In One
    如何使用js实现一个比较APP版本号的大小的版本号排序函数AllInOne(......
  • js如何准确获取当前页面url网址信息
    在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是我的一些获取url信息的小总结。下面我们举例一个URL,然后获得它的各个组成部分:http://i.jb51.net/Ed......
  • 2023-03-03 js map 双重嵌套
    恩。。其实也没啥要记录的,记住关键一点就是必须要有return,不管是几重,比如:arr.map((item,index)=>{  return(    item.arr2.map((item2,index2)=>{......
  • js写星星评价
    html      <divclass="zxpj_list">        <divclass="zxpj_main">          <span>*</span>      ......
  • ES6标准的JS代码,是否能进码混淆加密?
    nodejs开发,使用es6标准的javascript代码,是否能进行代码混淆加密?回答是肯定的,能。使用JShaman就可以进行加密。以import语法为例,用一个node小工程进行测试:先准备两段代码,一个......
  • js自定义事件
    触发自定义事件(只有这一种)dom.dispatchEvent(eventObject)创建自定义事件方法方法一(已被W3C标准弃用,浏览还支持)dom.createEvent()dom.initEvent(eventName,ca......
  • powershell脚本将json文件至SQL Server
    一、问题引入之前写过一篇博客关于T-SQL脚本将json文件至SQLServer,但T-SQL脚本只能在SSMS软件下运行。现在迫切需要一种能在操作系统shell中运行的脚本,在StackOverflow......
  • NestJS学习笔记
    起步要想使用nest需要先安装依赖#全局安装npmi-g@nestjs/cli#局部安装npmi-g@nestjs/cli创建需要使用以下命令(如果使用局部安装,每次使用nest命令都需要......
  • JavaScript模块化理解-CommonJS、AMD、CMD、UMD、ES6
    参考:JavaScript模块化-CommonJS、AMD、CMD、UMD、ES6前端模块化——彻底搞懂AMD、CMD、ESM和CommonJS 在JS早期,使用script标签引入JS,会造成以下问题:加载的时候阻塞......
  • js 添加水印,防篡改
     水印是安全中的一部分,或者可以推广加上自己的一些信息前端实现方式,是通过创建canvas,将文本或图片添加到canvas,然后导出图片作为背景图以下实现方法/watermark.js......