threeJS加载3Dtitles数据

        加载.gltf文件从网上查找资料,比较容易。

import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';

        但是项目使用的不是该类型的数据,是制作的 3Dtitles,折腾了几天,找到的资料比较少,比对着其他方法加载出了数据。

1.加载3Dtitles引用

        与加载。gltf不同,加载3Dtitles需要引用对应的插件 “3d-tiles-renderer”。安装时,出现了各种错误,是跟vue版本兼容性问题,尝试了安装不同版本的,错误就没有了。

import { B3DMLoader, TilesRenderer } from "3d-tiles-renderer";
2. 加载模型

        模型的json文件,要调试确认是否加载成功。我是把json文件下载到本地加载执行的。

   //加载模型
      this.tilesRenderer = new TilesRenderer(datapath + "tileset.json");
      this.tilesRenderer.setCamera(this.camera);
      this.tilesRenderer.setResolutionFromRenderer(this.camera, this.renderer);
      this.scene.add(this.tilesRenderer.group);
3.遍历解析模型

        模型文件加载成功,对应的是由多个3dm数据组成,当然也可以单独加载一个。我是采取循环遍历的方式,将所有的3dm数据添加到一个group中,组合成一个完整的模型数据。

        模型第一次加载出来,看着比较粗糙,有的侧面显示有问题,就添加了属性处理。逐个渲染添加到对象中,就可以看到模型加载出来了。

        如果模型较大,有可能导致电脑死机,建议加载一小块区域进行尝试。

 // 加载json,解析json 取出children中的路径进行拼装加载
      fetch(datapath + "tileset.json")
        .then((response) => {
          return response.json();
        })
        .then((resdata) => {
          const tilesetArr = resdata.root.children;
          for (const tilese of tilesetArr) {
            new B3DMLoader().load(datapath + tilese.content.uri).then((res) => {
              res.scene.rotation.set(Math.PI / 2, 0, 0);
              res.scene.scale.set(0.01, 0.01, 0.01);
              res.scene.position.set(0, 0, 0);

              res.scene.traverse((model) => {
                this.group.add(res.scene);
                if (model.isMesh) {
                  model.material.side = THREE.BackSide; //背面可见
                  model.material.side = THREE.DoubleSide;//两侧的面可见
                }
              });
            });
          }
        })
        .catch((error) => {
          // 在这里处理获取JSON数据失败的情况
          console.error(error);
        });

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
Three.js中加载3DTiles,可以使用3d-tiles-renderer库来实现。首先,你需要引入`TilesRenderer`类,并初始化一个`TilesRenderer`对象,传入tileset.json的路径作为参数。然后,设置相机和渲染器的分辨率,并将`TilesRenderer`的group添加到场景中。最后,在动画函数中调用`tilesRenderer.update()`来更新3DTiles的显示。以下是一个加载3DTiles的示例代码: ```javascript import { TilesRenderer } from '3d-tiles-renderer'; // 初始化Three.js场景和相机 const tilesRenderer = new TilesRenderer('./path/to/tileset.json'); tilesRenderer.setCamera(camera); tilesRenderer.setResolutionFromRenderer(camera, renderer); scene.add(tilesRenderer.group); animate(); function animate() { tilesRenderer.update(); renderer.render(camera, scene); requestAnimationFrame(animate); } ``` 如果你需要加载多个3DTiles,你可以创建一个`TilesRenderer`对象的数组,并在加载tileset.json后循环遍历数组,为每个`TilesRenderer`对象设置相机和渲染器的分辨率,并将其group添加到场景中。在动画函数中,循环遍历`TilesRenderer`对象数组,并调用每个对象的`update()`方法来更新3DTiles的显示。以下是一个加载多个3DTiles的示例代码: ```javascript const tilesRendererArr = \[\]; // 加载tileset.json并解析 const qzpath = 'http://192.168.1.136:8077/sqsftilte/'; get(qzpath + 'tileset.json').then((res) => { const tilesetArr = res.root.children; for (const tilese of tilesetArr) { const tilesRenderer = new TilesRenderer(qzpath + tilese.content.uri); tilesRenderer.setCamera(camera); tilesRenderer.setResolutionFromRenderer(camera, renderer); const tilesObj = tilesRenderer.group; tilesObj.rotation.set(-Math.PI / 2, 0, 0); scene.add(tilesObj); tilesRendererArr.push(tilesRenderer); } }); animate(); function animate() { controls.update(); for (const tilesRenderer of tilesRendererArr) { tilesRenderer.update(); } renderer.render(scene, camera); requestAnimationFrame(animate); } ``` 希望这些代码能帮助你加载3DTilesThree.js中。 #### 引用[.reference_title] - *1* *2* [threejs加载3dtiles(倾斜摄影)数据](https://blog.csdn.net/m0_54850604/article/details/123431441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [threejs加载3dtiles以及gpu picking真实三维坐标点](https://blog.csdn.net/weixin_44464760/article/details/97922823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值