@shapediver/viewer.data-engine.geometry-engine 2.8.0 → 2.8.1
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;
|
|
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
|
|
51
|
-
|
|
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.
|
|
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.
|
|
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
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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 /
|
|
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
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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":";;;AACA,iFAAyE;AACzE,yEAAkH;AAElH,8CAA+C;AAK/C,MAAa,cAAc;IAKvB,4BAA4B;IAE5B,2BAA2B;IAE3B,YACqB,QAAkB,EAClB,eAA+B,EAC/B,iBAAmC,EACnC,eAA+B,EAC/B,YAAiB;QAJjB,aAAQ,GAAR,QAAQ,CAAU;QAClB,oBAAe,GAAf,eAAe,CAAgB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAkB;QACnC,oBAAe,GAAf,eAAe,CAAgB;QAC/B,iBAAY,GAAZ,YAAY,CAAK;QAbtC,yBAAyB;QAEjB,0BAAqB,GAAG,IAAI,0CAAoB,EAAE,CAAC;
|
|
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.
|
|
3
|
+
"version": "2.8.1",
|
|
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.
|
|
44
|
-
"@shapediver/viewer.data-engine.shared-types": "2.8.
|
|
45
|
-
"@shapediver/viewer.rendering-engine.camera-engine": "2.8.
|
|
46
|
-
"@shapediver/viewer.rendering-engine.light-engine": "2.8.
|
|
47
|
-
"@shapediver/viewer.shared.build-data": "2.8.
|
|
48
|
-
"@shapediver/viewer.shared.node-tree": "2.8.
|
|
49
|
-
"@shapediver/viewer.shared.node-tree-utils": "2.8.
|
|
50
|
-
"@shapediver/viewer.shared.services": "2.8.
|
|
51
|
-
"@shapediver/viewer.shared.types": "2.8.
|
|
43
|
+
"@shapediver/viewer.data-engine.material-engine": "2.8.1",
|
|
44
|
+
"@shapediver/viewer.data-engine.shared-types": "2.8.1",
|
|
45
|
+
"@shapediver/viewer.rendering-engine.camera-engine": "2.8.1",
|
|
46
|
+
"@shapediver/viewer.rendering-engine.light-engine": "2.8.1",
|
|
47
|
+
"@shapediver/viewer.shared.build-data": "2.8.1",
|
|
48
|
+
"@shapediver/viewer.shared.node-tree": "2.8.1",
|
|
49
|
+
"@shapediver/viewer.shared.node-tree-utils": "2.8.1",
|
|
50
|
+
"@shapediver/viewer.shared.services": "2.8.1",
|
|
51
|
+
"@shapediver/viewer.shared.types": "2.8.1",
|
|
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": "
|
|
60
|
+
"gitHead": "0ec5dfbaed9b9fd24067bf1d64f1a8a925473034"
|
|
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
|
|
73
|
-
|
|
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.
|
|
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.
|
|
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
|
|
101
|
-
const count = attributeData.size();
|
|
98
|
+
const numComponents = attribute.num_components();
|
|
102
99
|
|
|
103
|
-
const
|
|
100
|
+
const numPoints = dracoGeometry.num_points();
|
|
101
|
+
const numValues = numPoints * numComponents;
|
|
102
|
+
const byteLength = numValues * Float32Array.BYTES_PER_ELEMENT;
|
|
104
103
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
117
|
-
array.BYTES_PER_ELEMENT *
|
|
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 /
|
|
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
|
-
|
|
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
|