Browse Source

min and max only required for vertex arrays

Sukolsak Sakshuwong 3 years ago
parent
commit
3778dacb08
1 changed files with 10 additions and 20 deletions
  1. 10 20
      src/extensions/geo-export/glb-exporter.ts

+ 10 - 20
src/extensions/geo-export/glb-exporter.ts

@@ -11,7 +11,7 @@ import { Vec3, Mat4 } from '../../mol-math/linear-algebra';
 import { PLUGIN_VERSION } from '../../mol-plugin/version';
 import { RuntimeContext } from '../../mol-task';
 import { Color } from '../../mol-util/color/color';
-import { arrayMinMax, fillSerial } from '../../mol-util/array';
+import { fillSerial } from '../../mol-util/array';
 import { NumberArray } from '../../mol-util/type-helpers';
 import { MeshExporter, AddMeshInput } from './mesh-exporter';
 
@@ -35,11 +35,11 @@ export class GlbExporter extends MeshExporter<GlbData> {
     private binaryBuffer: ArrayBuffer[] = [];
     private byteOffset = 0;
 
-    private static vecMinMax(a: NumberArray, length: number) {
-        const min: number[] = (new Array(length)).fill(Infinity);
-        const max: number[] = (new Array(length)).fill(-Infinity);
-        for (let i = 0, il = a.length; i < il; i += length) {
-            for (let j = 0; j < length; ++j) {
+    private static vec3MinMax(a: NumberArray) {
+        const min: number[] = [Infinity, Infinity, Infinity];
+        const max: number[] = [-Infinity, -Infinity, -Infinity];
+        for (let i = 0, il = a.length; i < il; i += 3) {
+            for (let j = 0; j < 3; ++j) {
                 min[j] = Math.min(a[i + j], min[j]);
                 max[j] = Math.max(a[i + j], max[j]);
             }
@@ -76,9 +76,7 @@ export class GlbExporter extends MeshExporter<GlbData> {
             indexArray = indices!.slice(0, drawCount);
         }
 
-        const [ vertexMin, vertexMax ] = GlbExporter.vecMinMax(vertexArray, 3);
-        const [ normalMin, normalMax ] = GlbExporter.vecMinMax(normalArray, 3);
-        const [ indexMin, indexMax ] = arrayMinMax(indexArray);
+        const [ vertexMin, vertexMax ] = GlbExporter.vec3MinMax(vertexArray);
 
         // binary buffer
         let vertexBuffer = vertexArray.buffer;
@@ -134,18 +132,14 @@ export class GlbExporter extends MeshExporter<GlbData> {
             byteOffset: 0,
             componentType: 5126, // FLOAT
             count: vertexCount,
-            type: 'VEC3',
-            max: normalMax,
-            min: normalMin
+            type: 'VEC3'
         });
         this.accessors.push({
             bufferView: bufferViewOffset + 2,
             byteOffset: 0,
             componentType: 5125, // UNSIGNED_INT
             count: drawCount,
-            type: 'SCALAR',
-            max: [ indexMax ],
-            min: [ indexMin ]
+            type: 'SCALAR'
         });
 
         return {
@@ -212,8 +206,6 @@ export class GlbExporter extends MeshExporter<GlbData> {
             colorArray[i * 4 + 3] = alpha;
         }
 
-        const [ colorMin, colorMax ] = GlbExporter.vecMinMax(colorArray, 4);
-
         // binary buffer
         let colorBuffer = colorArray.buffer;
         if (!IsNativeEndianLittle) {
@@ -238,9 +230,7 @@ export class GlbExporter extends MeshExporter<GlbData> {
             byteOffset: 0,
             componentType: 5126, // FLOAT
             count: vertexCount,
-            type: 'VEC4',
-            max: colorMax,
-            min: colorMin
+            type: 'VEC4'
         });
 
         return accessorOffset;