Преглед на файлове

Merge pull request #150 from NASA-AMMOS/sliced-table-buffer

Slice table buffers
Garrett Johnson преди 4 години
родител
ревизия
751066de93
променени са 4 файла, в които са добавени 66 реда и са изтрити 14 реда
  1. 21 2
      src/base/B3DMLoaderBase.js
  2. 21 3
      src/base/I3DMLoaderBase.js
  3. 21 3
      src/base/PNTSLoaderBase.js
  4. 3 6
      src/three/I3DMLoader.js

+ 21 - 2
src/base/B3DMLoaderBase.js

@@ -68,11 +68,30 @@ export class B3DMLoaderBase {
 
 		// Feature Table
 		const featureTableStart = 28;
-		const featureTable = new FeatureTable( buffer, featureTableStart, featureTableJSONByteLength, featureTableBinaryByteLength );
+		const featureTableBuffer = buffer.slice(
+			featureTableStart,
+			featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength,
+		);
+		const featureTable = new FeatureTable(
+			featureTableBuffer,
+			0,
+			featureTableJSONByteLength,
+			featureTableBinaryByteLength,
+		);
 
 		// Batch Table
 		const batchTableStart = featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength;
-		const batchTable = new BatchTable( buffer, featureTable.getData( 'BATCH_LENGTH' ), batchTableStart, batchTableJSONByteLength, batchTableBinaryByteLength );
+		const batchTableBuffer = buffer.slice(
+			batchTableStart,
+			batchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength,
+		);
+		const batchTable = new BatchTable(
+			batchTableBuffer,
+			featureTable.getData( 'BATCH_LENGTH' ),
+			0,
+			batchTableJSONByteLength,
+			batchTableBinaryByteLength,
+		);
 
 		const glbStart = batchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength;
 		const glbBytes = new Uint8Array( buffer, glbStart, byteLength - glbStart );

+ 21 - 3
src/base/I3DMLoaderBase.js

@@ -71,12 +71,30 @@ export class I3DMLoaderBase {
 
 		// Feature Table
 		const featureTableStart = 32;
-		const featureTable = new FeatureTable( buffer, featureTableStart, featureTableJSONByteLength, featureTableBinaryByteLength );
+		const featureTableBuffer = buffer.slice(
+			featureTableStart,
+			featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength,
+		);
+		const featureTable = new FeatureTable(
+			featureTableBuffer,
+			0,
+			featureTableJSONByteLength,
+			featureTableBinaryByteLength,
+		);
 
 		// Batch Table
-		const batchLength = featureTable.getData( 'INSTANCES_LENGTH' );
 		const batchTableStart = featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength;
-		const batchTable = new BatchTable( buffer, batchLength, batchTableStart, batchTableJSONByteLength, batchTableBinaryByteLength );
+		const batchTableBuffer = buffer.slice(
+			batchTableStart,
+			batchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength,
+		);
+		const batchTable = new BatchTable(
+			batchTableBuffer,
+			featureTable.getData( 'INSTANCES_LENGTH' ),
+			0,
+			batchTableJSONByteLength,
+			batchTableBinaryByteLength,
+		);
 
 		const glbStart = batchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength;
 		const bodyBytes = new Uint8Array( buffer, glbStart, byteLength - glbStart );

+ 21 - 3
src/base/PNTSLoaderBase.js

@@ -67,12 +67,30 @@ export class PNTSLoaderBase {
 
 		// Feature Table
 		const featureTableStart = 28;
-		const featureTable = new FeatureTable( buffer, featureTableStart, featureTableJSONByteLength, featureTableBinaryByteLength );
+		const featureTableBuffer = buffer.slice(
+			featureTableStart,
+			featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength,
+		);
+		const featureTable = new FeatureTable(
+			featureTableBuffer,
+			0,
+			featureTableJSONByteLength,
+			featureTableBinaryByteLength,
+		);
 
 		// Batch Table
-		const batchLength = featureTable.getData( 'BATCH_LENGTH' ) || featureTable.getData( 'POINTS_LENGTH' );
 		const batchTableStart = featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength;
-		const batchTable = new BatchTable( buffer, batchLength, batchTableStart, batchTableJSONByteLength, batchTableBinaryByteLength );
+		const batchTableBuffer = buffer.slice(
+			batchTableStart,
+			batchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength,
+		);
+		const batchTable = new BatchTable(
+			batchTableBuffer,
+			featureTable.getData( 'BATCH_LENGTH' ) || featureTable.getData( 'POINTS_LENGTH' ),
+			0,
+			batchTableJSONByteLength,
+			batchTableBinaryByteLength,
+		);
 
 		return {
 			version,

+ 3 - 6
src/three/I3DMLoader.js

@@ -63,7 +63,6 @@ export class I3DMLoader extends I3DMLoaderBase {
 						} );
 
 						const averageVector = new Vector3();
-						const transformedVector = new Vector3();
 						for ( let i = 0; i < INSTANCES_LENGTH; i ++ ) {
 
 							// TODO: handle quantized position
@@ -84,11 +83,9 @@ export class I3DMLoader extends I3DMLoaderBase {
 								parent.add( instancedMesh );
 
 								// Center the instance around an average point to avoid jitter at large scales.
-								transformedVector
-									.copy( averageVector )
-									.applyQuaternion( parent.quaternion )
-									.multiply( parent.scale );
-								instancedMesh.add( transformedVector );
+								instancedMesh
+									.position
+									.copy( averageVector );
 
 							}