当前位置:   article > 正文

threeJS加载3Dtitles数据_three加载3dtiles

three加载3dtiles

        加载.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文件下载到本地加载执行的。

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

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

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

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

  1. // 加载json,解析json 取出children中的路径进行拼装加载
  2. fetch(datapath + "tileset.json")
  3. .then((response) => {
  4. return response.json();
  5. })
  6. .then((resdata) => {
  7. const tilesetArr = resdata.root.children;
  8. for (const tilese of tilesetArr) {
  9. new B3DMLoader().load(datapath + tilese.content.uri).then((res) => {
  10. res.scene.rotation.set(Math.PI / 2, 0, 0);
  11. res.scene.scale.set(0.01, 0.01, 0.01);
  12. res.scene.position.set(0, 0, 0);
  13. res.scene.traverse((model) => {
  14. this.group.add(res.scene);
  15. if (model.isMesh) {
  16. model.material.side = THREE.BackSide; //背面可见
  17. model.material.side = THREE.DoubleSide;//两侧的面可见
  18. }
  19. });
  20. });
  21. }
  22. })
  23. .catch((error) => {
  24. // 在这里处理获取JSON数据失败的情况
  25. console.error(error);
  26. });

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/99875
推荐阅读