Selaa lähdekoodia

Merge branch 'master' of http://192.168.0.115:3000/bill/3DTilesRendererJS

bill 3 vuotta sitten
vanhempi
commit
e09b3cfa52
3 muutettua tiedostoa jossa 79 lisäystä ja 19 poistoa
  1. 1 1
      example/index.js
  2. 77 17
      example/mars.js
  3. 1 1
      src/base/LoaderBase.js

+ 1 - 1
example/index.js

@@ -36,7 +36,7 @@ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
 import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
 import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js';
 import Stats from 'three/examples/jsm/libs/stats.module.js';
-
+  
 const ALL_HITS = 1;
 const FIRST_HIT_ONLY = 2;
 

+ 77 - 17
example/mars.js

@@ -13,9 +13,13 @@ import {
 } from 'three';
 import { FlyOrbitControls } from './FlyOrbitControls.js';
 import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js';
+import { LoadingManager } from 'three';
+import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
+import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
 
 let camera, controls, scene, renderer;
 let groundTiles, skyTiles;
+let tilesRendererArr = [];
 
 const params = {
 
@@ -67,17 +71,24 @@ function init() {
 	tilesParent.rotation.set( Math.PI / 2, 0, 0 );
 	scene.add( tilesParent );
 
-	groundTiles = new TilesRenderer( 'https://raw.githubusercontent.com/NASA-AMMOS/3DTilesSampleData/master/msl-dingo-gap/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_colorize_tileset.json' );
+	/*
+	//groundTiles = new TilesRenderer( 'https://raw.githubusercontent.com/NASA-AMMOS/3DTilesSampleData/master/msl-dingo-gap/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_colorize_tileset.json' );
+	groundTiles = new TilesRenderer('https://testgis.4dage.com/LVBADUI_qp/tileset.json');
+	
 	groundTiles.fetchOptions.mode = 'cors';
 	groundTiles.lruCache.minSize = 900;
 	groundTiles.lruCache.maxSize = 1300;
 	groundTiles.errorTarget = 12;
+	*/
+	//https://testgis.4dage.com/gaoling0805-qp/
+	loadTileSet('https://testgis.4dage.com/LVBADUI_qp/',camera,renderer);
+	//loadTileSet('https://testgis.4dage.com/gaoling0805-qp/',camera,renderer);
 
-	skyTiles = new TilesRenderer( 'https://raw.githubusercontent.com/NASA-AMMOS/3DTilesSampleData/master/msl-dingo-gap/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_sky/0528_0260184_to_s64o256_sky_tileset.json' );
-	skyTiles.fetchOptions.mode = 'cors';
-	skyTiles.lruCache = groundTiles.lruCache;
+	// skyTiles = new TilesRenderer( 'https://raw.githubusercontent.com/NASA-AMMOS/3DTilesSampleData/master/msl-dingo-gap/0528_0260184_to_s64o256_colorize/0528_0260184_to_s64o256_sky/0528_0260184_to_s64o256_sky_tileset.json' );
+	// skyTiles.fetchOptions.mode = 'cors';
+	// skyTiles.lruCache = groundTiles.lruCache;
 
-	tilesParent.add( groundTiles.group, skyTiles.group );
+	// tilesParent.add( groundTiles.group, skyTiles.group );
 
 	onWindowResize();
 	window.addEventListener( 'resize', onWindowResize, false );
@@ -95,6 +106,52 @@ function init() {
 
 }
 
+function loadTileSet(qzpath,camera,renderer){
+	// 加载json,解析json 取出children中的路径进行拼装加载
+	//const qzpath = 'http://192.168.1.136:8077/sqsftilte/'
+     
+	//get(qzpath + 'tileset.json').then((res)=>{
+    //debugger;
+
+	fetch(qzpath + 'tileset.json').then(response => response.json()).then(data => {
+		console.log(data)
+		const tilesetArr = data.root.children
+		for (const tilese of tilesetArr) {
+		  // console.log(qzpath + tilese.content.uri)
+		  const tilesRenderer = new TilesRenderer( qzpath + tilese.content.uri )
+
+		  const gltfLoader = new GLTFLoader( tilesRenderer.manager );
+		  const dracoLoader = new DRACOLoader( tilesRenderer.manager );
+		  dracoLoader.setDecoderPath( 'https://unpkg.com/three@0.128.0/examples/js/libs/draco/gltf/' );
+		  gltfLoader.setDRACOLoader( dracoLoader );
+		  tilesRenderer.manager.addHandler( /\.gltf$/, gltfLoader );
+		  tilesRenderer.manager.addHandler( /\.glb$/, gltfLoader );
+
+		  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)
+		}
+	});
+
+	// fetch(qzpath + 'tileset.json').then((res)=>{
+	//   // console.log(res)
+	//   const tilesetArr = res.root.children
+	//   for (const tilese of tilesetArr) {
+	// 	// console.log(qzpath + tilese.content.uri)
+	// 	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)
+	//   }
+	//})
+}
+
 function onWindowResize() {
 
 	camera.aspect = window.innerWidth / window.innerHeight;
@@ -109,18 +166,21 @@ function render() {
 	requestAnimationFrame( render );
 
 	camera.updateMatrixWorld();
-
-	groundTiles.errorTarget = params.errorTarget;
-	groundTiles.displayBoxBounds = params.displayBoxBounds;
-	skyTiles.displayBoxBounds = params.displayBoxBounds;
-
-	groundTiles.setCamera( camera );
-	groundTiles.setResolutionFromRenderer( camera, renderer );
-	groundTiles.update();
-
-	skyTiles.setCamera( camera );
-	skyTiles.setResolutionFromRenderer( camera, renderer );
-	skyTiles.update();
+	for (const tilesRenderer of tilesRendererArr) {
+		tilesRenderer.update()
+	  }
+	
+	// groundTiles.errorTarget = params.errorTarget;
+	// groundTiles.displayBoxBounds = params.displayBoxBounds;
+	// skyTiles.displayBoxBounds = params.displayBoxBounds;
+
+	// groundTiles.setCamera( camera );
+	// groundTiles.setResolutionFromRenderer( camera, renderer );
+	// groundTiles.update();
+
+	// skyTiles.setCamera( camera );
+	// skyTiles.setResolutionFromRenderer( camera, renderer );
+	// skyTiles.update();
 
 	renderer.render( scene, camera );
 

+ 1 - 1
src/base/LoaderBase.js

@@ -6,7 +6,7 @@ export class LoaderBase {
 		this.workingPath = '';
 
 	}
-
+ 
 	load( url ) {
 
 		return fetch( url, this.fetchOptions )