LoaderTileFiles.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import {
  2. Vector3
  3. } from 'three';
  4. import { Loader3DTiles } from 'three-loader-3dtiles';
  5. import {modelManager} from './ModelManager.js';
  6. export default class LoaderTileFiles{
  7. constructor(scene,renderer){
  8. this.offset = new Vector3(); //偏移量
  9. this.scene = scene;
  10. this.tilesRuntime = null;
  11. this.renderer = renderer;
  12. }
  13. async loadTilesets(prefix,fileName){
  14. const tilesetUrl = prefix + fileName;
  15. const response = await fetch(tilesetUrl);
  16. const data = await response.json();
  17. if(data.root){
  18. if(data.root.content&&data.root.content.url.indexOf('.b3dm')>-1){
  19. await this.loadTileset(tilesetUrl); //直接加载
  20. }
  21. else if(!data.root.content&&data.root.children){
  22. for(let i=0;i<data.root.children.length;++i){
  23. const item = data.root.children[i];
  24. if(item.content.uri){
  25. const url = prefix + item.content.uri.replace('./','');
  26. await this.loadTileset(url); //直接加载
  27. }
  28. else{
  29. debugger;
  30. }
  31. }
  32. }
  33. }
  34. }
  35. async loadTileset(tilesetUrl) {
  36. const result = await Loader3DTiles.load(
  37. {
  38. url:tilesetUrl,
  39. //queryParams.get('tilesetUrl') ??
  40. //tilesetUrl ??
  41. //'https://testgis.4dage.com/LVBADUI_qp/tileset.json',
  42. //'https://int.nyt.com/data/3dscenes/ONA360/TILESET/0731_FREEMAN_ALLEY_10M_A_36x8K__10K-PN_50P_DB/tileset_tileset.json',
  43. renderer: this.renderer,
  44. options: {
  45. dracoDecoderPath: 'https://cdn.jsdelivr.net/npm/three@0.137.0/examples/js/libs/draco',
  46. basisTranscoderPath: 'https://cdn.jsdelivr.net/npm/three@0.137.0/examples/js/libs/basis',
  47. maximumScreenSpaceError: 48, //queryParams.get('sse') ?? 48,
  48. }
  49. }
  50. );
  51. const {model, runtime} = result;
  52. model.rotation.set(-Math.PI / 2, 0, Math.PI / 2);
  53. // if (!queryParams.get('tilesetUrl')) {
  54. // model.position.set(-1, 4, -16);
  55. // }
  56. //model.position.set(modelCenter.x,modelCenter.y,modelCenter.z);
  57. this.tilesRuntime = runtime;
  58. this.scene.add(model);
  59. modelManager.tilesMeshesUUIDs.push(model.uuid);
  60. }
  61. }