@shapediver/viewer.data-engine.geometry-engine 2.8.0 → 2.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryLoader.d.ts","sourceRoot":"","sources":["../../../src/gltfv2/loaders/GeometryLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,6CAA6C,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAA+B,oBAAoB,EAAiB,MAAM,iCAAiC,CAAA;AAGlH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,qBAAa,cAAc;IAUnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAXjC,OAAO,CAAC,qBAAqB,CAA8B;gBAOtC,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,cAAc,EAC/B,iBAAiB,EAAE,gBAAgB,EACnC,eAAe,EAAE,cAAc,EAC/B,YAAY,EAAE,GAAG;IAOtC,IAAW,oBAAoB,IAAI,oBAAoB,CAEtD;IAMM,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS;IAiB9D,OAAO,CAAC,aAAa;CA+JxB"}
1
+ {"version":3,"file":"GeometryLoader.d.ts","sourceRoot":"","sources":["../../../src/gltfv2/loaders/GeometryLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,6CAA6C,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAA+B,oBAAoB,EAAiB,MAAM,iCAAiC,CAAA;AAGlH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,qBAAa,cAAc;IAUnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAXjC,OAAO,CAAC,qBAAqB,CAA8B;gBAOtC,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,cAAc,EAC/B,iBAAiB,EAAE,gBAAgB,EACnC,eAAe,EAAE,cAAc,EAC/B,YAAY,EAAE,GAAG;IAOtC,IAAW,oBAAoB,IAAI,oBAAoB,CAEtD;IAMM,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS;IAiB9D,OAAO,CAAC,aAAa;CAwJxB"}
@@ -47,19 +47,17 @@ class GeometryLoader {
47
47
  const dracoDef = primitive.extensions[GLTFLoader_1.GLTF_EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];
48
48
  const arrayBuffer = this._bufferViewLoader.getBufferView(dracoDef.bufferView);
49
49
  const decoder = new this._dracoModule.Decoder();
50
- const buffer = new this._dracoModule.DecoderBuffer();
51
- buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);
52
- const geometryType = decoder.GetEncodedGeometryType(buffer);
50
+ const array = new Int8Array(arrayBuffer);
51
+ const geometryType = decoder.GetEncodedGeometryType(array);
53
52
  let dracoGeometry;
54
53
  if (geometryType === this._dracoModule.TRIANGULAR_MESH) {
55
54
  dracoGeometry = new this._dracoModule.Mesh();
56
- decoder.DecodeBufferToMesh(buffer, dracoGeometry);
55
+ decoder.DecodeArrayToMesh(array, array.byteLength, dracoGeometry);
57
56
  }
58
57
  else if (geometryType === this._dracoModule.POINT_CLOUD) {
59
58
  dracoGeometry = new this._dracoModule.PointCloud();
60
- decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);
59
+ decoder.DecodeArrayToPointCloud(array, array.byteLength, dracoGeometry);
61
60
  }
62
- this._dracoModule.destroy(buffer);
63
61
  if (dracoDef.attributes['POSITION'] === undefined) {
64
62
  const errorMsg = "No position attribute found in the mesh.";
65
63
  this._dracoModule.destroy(decoder);
@@ -72,42 +70,31 @@ class GeometryLoader {
72
70
  decoder.GetAttributeFloatForAllPoints(dracoGeometry, attribute, attributeData);
73
71
  const byteOffset = attribute.byte_offset();
74
72
  const normalized = attribute.normalized();
75
- const num_components = attribute.num_components();
76
- const count = attributeData.size();
77
- const array = new Float32Array(count);
78
- for (let i = 0; i < count; i++) {
79
- for (let a = 0; a < num_components; a++) {
80
- const temp = i * num_components;
81
- const value = attributeData.GetValue(temp + a);
82
- array[temp + a] = value;
83
- }
84
- }
85
- this._dracoModule.destroy(attributeData);
86
- attributes[a] = new viewer_shared_types_1.AttributeData(array, num_components, // itemSize
87
- array.BYTES_PER_ELEMENT * num_components, // itemBytes = elementBytes * itemSize
73
+ const numComponents = attribute.num_components();
74
+ const numPoints = dracoGeometry.num_points();
75
+ const numValues = numPoints * numComponents;
76
+ const byteLength = numValues * Float32Array.BYTES_PER_ELEMENT;
77
+ const ptr = this._dracoModule._malloc(byteLength);
78
+ decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, this._dracoModule.DT_FLOAT32, byteLength, ptr);
79
+ const array = new Float32Array(this._dracoModule.HEAPF32.buffer, ptr, numValues).slice();
80
+ this._dracoModule._free(ptr);
81
+ if (a.includes("COLOR"))
82
+ array.forEach((n, i) => array[i] = Math.max(0, Math.min(1, n)));
83
+ attributes[a] = new viewer_shared_types_1.AttributeData(array, numComponents, // itemSize
84
+ array.BYTES_PER_ELEMENT * numComponents, // itemBytes = elementBytes * itemSize
88
85
  byteOffset, // byteOffset
89
86
  array.BYTES_PER_ELEMENT, // elementBytes
90
87
  normalized, // normalized
91
- array.length / num_components);
88
+ array.length / numComponents);
92
89
  }
93
- const numFaces = geometryType == this._dracoModule.TRIANGULAR_MESH ? dracoGeometry.num_faces() : 0;
94
- const numIndices = numFaces * 3;
95
- const indexArray = new Uint32Array(numIndices);
96
- // For mesh, we need to generate the faces.
97
90
  if (geometryType == this._dracoModule.TRIANGULAR_MESH) {
98
- const ia = new this._dracoModule.DracoInt32Array();
99
- for (let i = 0; i < numFaces; ++i) {
100
- decoder.GetFaceFromMesh(dracoGeometry, i, ia);
101
- const index = i * 3;
102
- indexArray[index] = ia.GetValue(0);
103
- indexArray[index + 1] = ia.GetValue(1);
104
- indexArray[index + 2] = ia.GetValue(2);
105
- }
106
- this._dracoModule.destroy(ia);
107
- }
108
- this._dracoModule.destroy(decoder);
109
- this._dracoModule.destroy(dracoGeometry);
110
- if (geometryType == this._dracoModule.TRIANGULAR_MESH)
91
+ const numFaces = dracoGeometry.num_faces();
92
+ const numIndices = numFaces * 3;
93
+ const byteLength = numIndices * 4;
94
+ const ptr = this._dracoModule._malloc(byteLength);
95
+ decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);
96
+ const indexArray = new Uint32Array(this._dracoModule.HEAPF32.buffer, ptr, numIndices).slice();
97
+ this._dracoModule._free(ptr);
111
98
  indices = new viewer_shared_types_1.AttributeData(indexArray, 1, // itemSize
112
99
  indexArray.BYTES_PER_ELEMENT * 1, // itemBytes = elementBytes * itemSize
113
100
  0, // byteOffset
@@ -115,6 +102,9 @@ class GeometryLoader {
115
102
  false, // normalized
116
103
  indexArray.length // count
117
104
  );
105
+ }
106
+ this._dracoModule.destroy(decoder);
107
+ this._dracoModule.destroy(dracoGeometry);
118
108
  }
119
109
  for (let attribute in primitive.attributes) {
120
110
  if (attributes[attribute]) {
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryLoader.js","sourceRoot":"","sources":["../../../src/gltfv2/loaders/GeometryLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GeometryLoader.js","sourceRoot":"","sources":["../../../src/gltfv2/loaders/GeometryLoader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapediver/viewer.data-engine.geometry-engine",
3
- "version": "2.8.0",
3
+ "version": "2.8.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -40,15 +40,15 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@shapediver/sdk.geometry-api-sdk-v2": "1.3.0",
43
- "@shapediver/viewer.data-engine.material-engine": "2.8.0",
44
- "@shapediver/viewer.data-engine.shared-types": "2.8.0",
45
- "@shapediver/viewer.rendering-engine.camera-engine": "2.8.0",
46
- "@shapediver/viewer.rendering-engine.light-engine": "2.8.0",
47
- "@shapediver/viewer.shared.build-data": "2.8.0",
48
- "@shapediver/viewer.shared.node-tree": "2.8.0",
49
- "@shapediver/viewer.shared.node-tree-utils": "2.8.0",
50
- "@shapediver/viewer.shared.services": "2.8.0",
51
- "@shapediver/viewer.shared.types": "2.8.0",
43
+ "@shapediver/viewer.data-engine.material-engine": "2.8.2",
44
+ "@shapediver/viewer.data-engine.shared-types": "2.8.2",
45
+ "@shapediver/viewer.rendering-engine.camera-engine": "2.8.2",
46
+ "@shapediver/viewer.rendering-engine.light-engine": "2.8.2",
47
+ "@shapediver/viewer.shared.build-data": "2.8.2",
48
+ "@shapediver/viewer.shared.node-tree": "2.8.2",
49
+ "@shapediver/viewer.shared.node-tree-utils": "2.8.2",
50
+ "@shapediver/viewer.shared.services": "2.8.2",
51
+ "@shapediver/viewer.shared.types": "2.8.2",
52
52
  "axios": "^1.2.6",
53
53
  "gl-matrix": "3.3.0"
54
54
  },
@@ -57,5 +57,5 @@
57
57
  "path": false,
58
58
  "os": false
59
59
  },
60
- "gitHead": "9caee20107c5d71e43de33edc14ee19d62ec268b"
60
+ "gitHead": "ba7d5e50e27552eef4b3188056c600ab2b288485"
61
61
  }
@@ -17,12 +17,12 @@ export class GeometryLoader {
17
17
  // #region Constructors (1)
18
18
 
19
19
  constructor(
20
- private readonly _content: IGLTF_v2,
21
- private readonly _accessorLoader: AccessorLoader,
22
- private readonly _bufferViewLoader: BufferViewLoader,
20
+ private readonly _content: IGLTF_v2,
21
+ private readonly _accessorLoader: AccessorLoader,
22
+ private readonly _bufferViewLoader: BufferViewLoader,
23
23
  private readonly _materialLoader: MaterialLoader,
24
24
  private readonly _dracoModule: any
25
- ) {}
25
+ ) { }
26
26
 
27
27
  // #endregion Constructors (1)
28
28
 
@@ -69,19 +69,17 @@ export class GeometryLoader {
69
69
  const arrayBuffer = this._bufferViewLoader.getBufferView(dracoDef.bufferView!);
70
70
 
71
71
  const decoder = new this._dracoModule.Decoder();
72
- const buffer = new this._dracoModule.DecoderBuffer();
73
- buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);
74
- const geometryType = decoder.GetEncodedGeometryType(buffer);
72
+ const array = new Int8Array(arrayBuffer);
73
+ const geometryType = decoder.GetEncodedGeometryType(array);
75
74
 
76
75
  let dracoGeometry;
77
76
  if (geometryType === this._dracoModule.TRIANGULAR_MESH) {
78
77
  dracoGeometry = new this._dracoModule.Mesh();
79
- decoder.DecodeBufferToMesh(buffer, dracoGeometry);
78
+ decoder.DecodeArrayToMesh(array, array.byteLength, dracoGeometry);
80
79
  } else if (geometryType === this._dracoModule.POINT_CLOUD) {
81
80
  dracoGeometry = new this._dracoModule.PointCloud();
82
- decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);
81
+ decoder.DecodeArrayToPointCloud(array, array.byteLength, dracoGeometry);
83
82
  }
84
- this._dracoModule.destroy(buffer);
85
83
 
86
84
  if (dracoDef.attributes['POSITION'] === undefined) {
87
85
  const errorMsg = "No position attribute found in the mesh.";
@@ -97,51 +95,41 @@ export class GeometryLoader {
97
95
 
98
96
  const byteOffset = attribute.byte_offset();
99
97
  const normalized = attribute.normalized();
100
- const num_components = attribute.num_components();
101
- const count = attributeData.size();
98
+ const numComponents = attribute.num_components();
102
99
 
103
- const array = new Float32Array(count);
100
+ const numPoints = dracoGeometry.num_points();
101
+ const numValues = numPoints * numComponents;
102
+ const byteLength = numValues * Float32Array.BYTES_PER_ELEMENT;
104
103
 
105
- for (let i = 0; i < count; i++) {
106
- for (let a = 0; a < num_components; a++) {
107
- const temp = i * num_components;
108
- const value = attributeData.GetValue(temp + a);
109
- array[temp + a] = value;
110
- }
111
- }
112
- this._dracoModule.destroy(attributeData);
104
+ const ptr = this._dracoModule._malloc(byteLength);
105
+ decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, this._dracoModule.DT_FLOAT32, byteLength, ptr);
106
+ const array = new Float32Array(this._dracoModule.HEAPF32.buffer, ptr, numValues).slice();
107
+ this._dracoModule._free(ptr);
108
+
109
+ if(a.includes("COLOR")) array.forEach((n, i) => array[i] = Math.max(0, Math.min(1, n)));
113
110
 
114
111
  attributes[a] = new AttributeData(
115
112
  array,
116
- num_components, // itemSize
117
- array.BYTES_PER_ELEMENT * num_components, // itemBytes = elementBytes * itemSize
113
+ numComponents, // itemSize
114
+ array.BYTES_PER_ELEMENT * numComponents, // itemBytes = elementBytes * itemSize
118
115
  byteOffset, // byteOffset
119
116
  array.BYTES_PER_ELEMENT, // elementBytes
120
117
  normalized, // normalized
121
- array.length / num_components
118
+ array.length / numComponents
122
119
  );
123
120
  }
124
121
 
125
- const numFaces = geometryType == this._dracoModule.TRIANGULAR_MESH ? dracoGeometry.num_faces() : 0;
126
- const numIndices = numFaces * 3;
127
- const indexArray = new Uint32Array(numIndices);
128
-
129
- // For mesh, we need to generate the faces.
130
122
  if (geometryType == this._dracoModule.TRIANGULAR_MESH) {
131
- const ia = new this._dracoModule.DracoInt32Array();
132
- for (let i = 0; i < numFaces; ++i) {
133
- decoder.GetFaceFromMesh(dracoGeometry, i, ia);
134
- const index = i * 3;
135
- indexArray[index] = ia.GetValue(0);
136
- indexArray[index + 1] = ia.GetValue(1);
137
- indexArray[index + 2] = ia.GetValue(2);
138
- }
139
- this._dracoModule.destroy(ia);
140
- }
141
- this._dracoModule.destroy(decoder);
142
- this._dracoModule.destroy(dracoGeometry);
143
123
 
144
- if (geometryType == this._dracoModule.TRIANGULAR_MESH)
124
+ const numFaces = dracoGeometry.num_faces();
125
+ const numIndices = numFaces * 3;
126
+ const byteLength = numIndices * 4;
127
+
128
+ const ptr = this._dracoModule._malloc(byteLength);
129
+ decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);
130
+ const indexArray = new Uint32Array(this._dracoModule.HEAPF32.buffer, ptr, numIndices).slice();
131
+ this._dracoModule._free(ptr);
132
+
145
133
  indices = new AttributeData(
146
134
  indexArray,
147
135
  1, // itemSize
@@ -151,6 +139,10 @@ export class GeometryLoader {
151
139
  false, // normalized
152
140
  indexArray.length // count
153
141
  );
142
+ }
143
+
144
+ this._dracoModule.destroy(decoder);
145
+ this._dracoModule.destroy(dracoGeometry);
154
146
  }
155
147
 
156
148
  for (let attribute in primitive.attributes) {
@@ -159,6 +151,7 @@ export class GeometryLoader {
159
151
  continue;
160
152
  }
161
153
 
154
+
162
155
  let attributeName = attribute;
163
156
  // attribute name conversion to be consistent with gltf
164
157
  if (/\d/.test(attributeName) && !attributeName.includes('_')) {
@@ -174,7 +167,7 @@ export class GeometryLoader {
174
167
  attributes[attributeName] = (this._accessorLoader.getAccessor(primitive.attributes[attribute]))!;
175
168
  }
176
169
 
177
- if ((primitive.indices || primitive.indices === 0) && !indices)
170
+ if ((primitive.indices || primitive.indices === 0) && !indices)
178
171
  indices = this._accessorLoader.getAccessor(primitive.indices);
179
172
 
180
173
  // reading and assigning morph targets