@combeenation/3d-viewer 20.0.0-beta1 → 20.0.0
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.
- package/dist/lib-cjs/buildinfo.json +1 -1
- package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
- package/dist/lib-cjs/manager/camera-manager.d.ts +21 -1
- package/dist/lib-cjs/manager/camera-manager.js +6 -13
- package/dist/lib-cjs/manager/camera-manager.js.map +1 -1
- package/dist/lib-cjs/utils/viewer-utils.d.ts +2 -10
- package/dist/lib-cjs/utils/viewer-utils.js +55 -55
- package/dist/lib-cjs/utils/viewer-utils.js.map +1 -1
- package/package.json +1 -1
- package/src/manager/camera-manager.ts +27 -14
- package/src/utils/viewer-utils.ts +61 -61
|
@@ -6,15 +6,35 @@ export declare type CameraPosition = {
|
|
|
6
6
|
target: Vector3;
|
|
7
7
|
};
|
|
8
8
|
export declare type AutofocusSettings = {
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Can be used to customize the margins shown around the 3d model.\
|
|
11
|
+
* Default: 1
|
|
12
|
+
*/
|
|
10
13
|
radiusFactor?: number;
|
|
14
|
+
/** Default: true */
|
|
11
15
|
adjustLowerRadiusLimit?: boolean;
|
|
16
|
+
/** Default: true */
|
|
12
17
|
adjustMinZ?: boolean;
|
|
18
|
+
/** Default: true */
|
|
13
19
|
adjustWheelPrecision?: boolean;
|
|
20
|
+
/** Default: true */
|
|
14
21
|
adjustPanningSensibility?: boolean;
|
|
22
|
+
/** Default: true */
|
|
15
23
|
adjustPinchPrecision?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* `true:` uses `alpha` from input or default value (45°), `false:` keeps current alpha from camera\
|
|
26
|
+
* Default: true
|
|
27
|
+
*/
|
|
16
28
|
adjustAlpha?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* `true:` uses `beta` from input or default value (75°), `false:` keeps current beta from camera\
|
|
31
|
+
* Default: true
|
|
32
|
+
*/
|
|
17
33
|
adjustBeta?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* `true:` uses calculated radius to fit scene bounding sphere, `false:` keeps current radius from camera\
|
|
36
|
+
* Default: true
|
|
37
|
+
*/
|
|
18
38
|
adjustRadius?: boolean;
|
|
19
39
|
/** Desired horizontal camera angle, this won't be overwritten by the autofocus function */
|
|
20
40
|
alpha?: number;
|
|
@@ -62,19 +62,12 @@ class CameraManager {
|
|
|
62
62
|
if (adjustPinchPrecision !== false) {
|
|
63
63
|
activeCamera.pinchPrecision = CameraManager._AUTOFOCUS_CONSTANTS.pinchPrecision / bBoxRadius;
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (adjustBeta !== false) {
|
|
72
|
-
beta = (_b = settings === null || settings === void 0 ? void 0 : settings.beta) !== null && _b !== void 0 ? _b : CameraManager.DEFAULT_CAMERA_POSITION.beta;
|
|
73
|
-
}
|
|
74
|
-
if (adjustRadius !== false) {
|
|
75
|
-
const radiusFactor = (_c = settings === null || settings === void 0 ? void 0 : settings.radiusFactor) !== null && _c !== void 0 ? _c : CameraManager._DEFAULT_AUTOFOCUS_RADIUS_FACTOR;
|
|
76
|
-
radius = distance * radiusFactor;
|
|
77
|
-
}
|
|
65
|
+
const adjustedAlpha = (_a = settings === null || settings === void 0 ? void 0 : settings.alpha) !== null && _a !== void 0 ? _a : CameraManager.DEFAULT_CAMERA_POSITION.alpha;
|
|
66
|
+
const alpha = adjustAlpha !== false ? adjustedAlpha : activeCamera.alpha;
|
|
67
|
+
const adjustedBeta = (_b = settings === null || settings === void 0 ? void 0 : settings.beta) !== null && _b !== void 0 ? _b : CameraManager.DEFAULT_CAMERA_POSITION.beta;
|
|
68
|
+
const beta = adjustBeta !== false ? adjustedBeta : activeCamera.beta;
|
|
69
|
+
const adjustedRadiusFactor = (_c = settings === null || settings === void 0 ? void 0 : settings.radiusFactor) !== null && _c !== void 0 ? _c : CameraManager._DEFAULT_AUTOFOCUS_RADIUS_FACTOR;
|
|
70
|
+
const radius = adjustRadius !== false ? distance * adjustedRadiusFactor : activeCamera.radius;
|
|
78
71
|
const newCameraPosition = {
|
|
79
72
|
alpha,
|
|
80
73
|
beta,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-manager.js","sourceRoot":"","sources":["../../../src/manager/camera-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAYkB;AAClB,mEAAsE;AACtE,6DAAyD;AACzD,yDAAiE;AACjE,qEAAmF;
|
|
1
|
+
{"version":3,"file":"camera-manager.js","sourceRoot":"","sources":["../../../src/manager/camera-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Mesh, Node, TransformNode, Vector3, Viewer } from '../index';
|
|
2
2
|
export declare type BakeGeometrySettings = {
|
|
3
3
|
keepTransformation?: boolean;
|
|
4
4
|
};
|
|
@@ -19,7 +19,7 @@ export declare type MetadataObject = Record<string, unknown>;
|
|
|
19
19
|
export declare type DerivedNodeType<T extends Node> = new (...args: any[]) => T;
|
|
20
20
|
/**
|
|
21
21
|
* Criteria object for find node functions {@link ViewerUtils.findChildNodes} and {@link ViewerUtils.findParentNode}.\
|
|
22
|
-
*
|
|
22
|
+
* All given properties must match for the criteria to pass.
|
|
23
23
|
*
|
|
24
24
|
* @param nodeName has to match exactly
|
|
25
25
|
* @param tagName uses algorithm of `Tags.MatchesQuery`, in most cases this is just an exact string match check
|
|
@@ -63,12 +63,4 @@ export declare class ViewerUtils {
|
|
|
63
63
|
* Returns `undefined` if no node could be found.
|
|
64
64
|
*/
|
|
65
65
|
findParentNode<T extends Node>(node: Node, criteria?: FindNodeCriteria<T>): T | undefined;
|
|
66
|
-
/**
|
|
67
|
-
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
68
|
-
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
69
|
-
*/
|
|
70
|
-
protected _bakeMorphTargetManagerIntoVertices(kind: string, morphTargetManager: MorphTargetManager, geometry: Geometry): void;
|
|
71
|
-
protected _getVerticesDataFromMorphTarget(kind: string, morphTarget: MorphTarget): FloatArray | null;
|
|
72
|
-
protected _matchesFindNodeCriteria<T extends Node>(node: Node, criteria?: FindNodeCriteria<T>): boolean;
|
|
73
|
-
protected _matchesMetadata(metadata: unknown, filter: MetadataObject): boolean;
|
|
74
66
|
}
|
|
@@ -41,10 +41,10 @@ class ViewerUtils {
|
|
|
41
41
|
if (morphTargetManager === null || morphTargetManager === void 0 ? void 0 : morphTargetManager.numTargets) {
|
|
42
42
|
// apply morph target vertices data to mesh geometry
|
|
43
43
|
// mostly only the "PositionKind" is implemented
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
_bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.PositionKind, morphTargetManager, geometry);
|
|
45
|
+
_bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.NormalKind, morphTargetManager, geometry);
|
|
46
|
+
_bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.TangentKind, morphTargetManager, geometry);
|
|
47
|
+
_bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.UVKind, morphTargetManager, geometry);
|
|
48
48
|
// remove morph target manager with all it's morph targets
|
|
49
49
|
mesh.morphTargetManager = null;
|
|
50
50
|
}
|
|
@@ -80,7 +80,7 @@ class ViewerUtils {
|
|
|
80
80
|
const allNodes = node ? node.getChildren(undefined, false) : [...this.viewer.scene.getNodes()];
|
|
81
81
|
if (!criteria)
|
|
82
82
|
return allNodes;
|
|
83
|
-
const foundNodes = allNodes.filter(node =>
|
|
83
|
+
const foundNodes = allNodes.filter(node => _matchesFindNodeCriteria(node, criteria));
|
|
84
84
|
return foundNodes;
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
@@ -95,7 +95,7 @@ class ViewerUtils {
|
|
|
95
95
|
else if (!criteria) {
|
|
96
96
|
return parent;
|
|
97
97
|
}
|
|
98
|
-
const matchesCriteria =
|
|
98
|
+
const matchesCriteria = _matchesFindNodeCriteria(parent, criteria);
|
|
99
99
|
if (matchesCriteria) {
|
|
100
100
|
return parent;
|
|
101
101
|
}
|
|
@@ -103,58 +103,58 @@ class ViewerUtils {
|
|
|
103
103
|
return this.findParentNode(parent, criteria);
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
for (let i = 0; i < morphTargetManager.numTargets; i++) {
|
|
118
|
-
const target = morphTargetManager.getTarget(i);
|
|
119
|
-
const targetVerticesData = this._getVerticesDataFromMorphTarget(kind, target);
|
|
120
|
-
if (targetVerticesData) {
|
|
121
|
-
// vertices data of this kind are implemented on the morph target
|
|
122
|
-
// add the influence of this morph target to the vertices data
|
|
123
|
-
// formula is taken from: https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets#basics
|
|
124
|
-
verticesData = verticesData.map((oldVal, idx) => oldVal + (targetVerticesData[idx] - origVerticesData[idx]) * target.influence);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// apply the updated vertices data
|
|
128
|
-
geometry.setVerticesData(kind, verticesData);
|
|
106
|
+
}
|
|
107
|
+
exports.ViewerUtils = ViewerUtils;
|
|
108
|
+
/**
|
|
109
|
+
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
110
|
+
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
111
|
+
*/
|
|
112
|
+
function _bakeMorphTargetManagerIntoVertices(kind, morphTargetManager, geometry) {
|
|
113
|
+
const origVerticesData = geometry.getVerticesData(kind);
|
|
114
|
+
if (!origVerticesData) {
|
|
115
|
+
// no vertices data for this kind availabe on the mesh geometry
|
|
116
|
+
return;
|
|
129
117
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return morphTarget.getUVs();
|
|
118
|
+
let verticesData = [...origVerticesData];
|
|
119
|
+
for (let i = 0; i < morphTargetManager.numTargets; i++) {
|
|
120
|
+
const target = morphTargetManager.getTarget(i);
|
|
121
|
+
const targetVerticesData = _getVerticesDataFromMorphTarget(kind, target);
|
|
122
|
+
if (targetVerticesData) {
|
|
123
|
+
// vertices data of this kind are implemented on the morph target
|
|
124
|
+
// add the influence of this morph target to the vertices data
|
|
125
|
+
// formula is taken from: https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets#basics
|
|
126
|
+
verticesData = verticesData.map((oldVal, idx) => oldVal + (targetVerticesData[idx] - origVerticesData[idx]) * target.influence);
|
|
140
127
|
}
|
|
141
|
-
return null;
|
|
142
128
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return
|
|
156
|
-
return Object.entries(filter).every(([key, value]) => metadata[key] === value);
|
|
129
|
+
// apply the updated vertices data
|
|
130
|
+
geometry.setVerticesData(kind, verticesData);
|
|
131
|
+
}
|
|
132
|
+
function _getVerticesDataFromMorphTarget(kind, morphTarget) {
|
|
133
|
+
switch (kind) {
|
|
134
|
+
case index_1.VertexBuffer.PositionKind:
|
|
135
|
+
return morphTarget.getPositions();
|
|
136
|
+
case index_1.VertexBuffer.NormalKind:
|
|
137
|
+
return morphTarget.getNormals();
|
|
138
|
+
case index_1.VertexBuffer.TangentKind:
|
|
139
|
+
return morphTarget.getTangents();
|
|
140
|
+
case index_1.VertexBuffer.UVKind:
|
|
141
|
+
return morphTarget.getUVs();
|
|
157
142
|
}
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
function _matchesFindNodeCriteria(node, criteria) {
|
|
146
|
+
if (!criteria)
|
|
147
|
+
return true;
|
|
148
|
+
const { nodeName, tagName, metadataObject, type } = criteria;
|
|
149
|
+
const nodeNameFits = !nodeName || node.name === nodeName;
|
|
150
|
+
const tagNameFits = !tagName || index_1.Tags.MatchesQuery(node, tagName);
|
|
151
|
+
const metadataFits = !metadataObject || _matchesMetadata(node.metadata, metadataObject);
|
|
152
|
+
const typeFits = !type || node instanceof type;
|
|
153
|
+
return nodeNameFits && tagNameFits && metadataFits && typeFits;
|
|
154
|
+
}
|
|
155
|
+
function _matchesMetadata(metadata, filter) {
|
|
156
|
+
if (!metadata || typeof metadata !== 'object')
|
|
157
|
+
return false;
|
|
158
|
+
return Object.entries(filter).every(([key, value]) => metadata[key] === value);
|
|
158
159
|
}
|
|
159
|
-
exports.ViewerUtils = ViewerUtils;
|
|
160
160
|
//# sourceMappingURL=viewer-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-utils.js","sourceRoot":"","sources":["../../../src/utils/viewer-utils.ts"],"names":[],"mappings":";;;AAAA,oCAYkB;AAyClB,MAAa,WAAW;IACtB,gBAAgB;IAChB,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C;;;;;;;OAOG;IACI,kBAAkB,CAAC,IAAU,EAAE,QAA+B;QACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,uCAAuC;YACvC,OAAO;SACR;QAED,gGAAgG;QAChG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,mGAAmG;QACnG,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtB;QAED,2GAA2G;QAC3G,kHAAkH;QAClH,mFAAmF;QACnF,kFAAkF;QAClF,4FAA4F;QAC5F,gHAAgH;QAChH,WAAW;QACX,yEAAyE;QACzE,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,IAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,UAAU,EAAE;YAClC,oDAAoD;YACpD,gDAAgD;YAChD,
|
|
1
|
+
{"version":3,"file":"viewer-utils.js","sourceRoot":"","sources":["../../../src/utils/viewer-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -24,15 +24,35 @@ export type CameraPosition = {
|
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
export type AutofocusSettings = {
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Can be used to customize the margins shown around the 3d model.\
|
|
29
|
+
* Default: 1
|
|
30
|
+
*/
|
|
28
31
|
radiusFactor?: number;
|
|
32
|
+
/** Default: true */
|
|
29
33
|
adjustLowerRadiusLimit?: boolean;
|
|
34
|
+
/** Default: true */
|
|
30
35
|
adjustMinZ?: boolean;
|
|
36
|
+
/** Default: true */
|
|
31
37
|
adjustWheelPrecision?: boolean;
|
|
38
|
+
/** Default: true */
|
|
32
39
|
adjustPanningSensibility?: boolean;
|
|
40
|
+
/** Default: true */
|
|
33
41
|
adjustPinchPrecision?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* `true:` uses `alpha` from input or default value (45°), `false:` keeps current alpha from camera\
|
|
44
|
+
* Default: true
|
|
45
|
+
*/
|
|
34
46
|
adjustAlpha?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* `true:` uses `beta` from input or default value (75°), `false:` keeps current beta from camera\
|
|
49
|
+
* Default: true
|
|
50
|
+
*/
|
|
35
51
|
adjustBeta?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* `true:` uses calculated radius to fit scene bounding sphere, `false:` keeps current radius from camera\
|
|
54
|
+
* Default: true
|
|
55
|
+
*/
|
|
36
56
|
adjustRadius?: boolean;
|
|
37
57
|
/** Desired horizontal camera angle, this won't be overwritten by the autofocus function */
|
|
38
58
|
alpha?: number;
|
|
@@ -214,19 +234,12 @@ export class CameraManager {
|
|
|
214
234
|
activeCamera.pinchPrecision = CameraManager._AUTOFOCUS_CONSTANTS.pinchPrecision / bBoxRadius;
|
|
215
235
|
}
|
|
216
236
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (adjustBeta !== false) {
|
|
224
|
-
beta = settings?.beta ?? CameraManager.DEFAULT_CAMERA_POSITION.beta;
|
|
225
|
-
}
|
|
226
|
-
if (adjustRadius !== false) {
|
|
227
|
-
const radiusFactor = settings?.radiusFactor ?? CameraManager._DEFAULT_AUTOFOCUS_RADIUS_FACTOR;
|
|
228
|
-
radius = distance * radiusFactor;
|
|
229
|
-
}
|
|
237
|
+
const adjustedAlpha = settings?.alpha ?? CameraManager.DEFAULT_CAMERA_POSITION.alpha;
|
|
238
|
+
const alpha = adjustAlpha !== false ? adjustedAlpha : activeCamera.alpha;
|
|
239
|
+
const adjustedBeta = settings?.beta ?? CameraManager.DEFAULT_CAMERA_POSITION.beta;
|
|
240
|
+
const beta = adjustBeta !== false ? adjustedBeta : activeCamera.beta;
|
|
241
|
+
const adjustedRadiusFactor = settings?.radiusFactor ?? CameraManager._DEFAULT_AUTOFOCUS_RADIUS_FACTOR;
|
|
242
|
+
const radius = adjustRadius !== false ? distance * adjustedRadiusFactor : activeCamera.radius;
|
|
230
243
|
|
|
231
244
|
const newCameraPosition: CameraPosition = {
|
|
232
245
|
alpha,
|
|
@@ -36,7 +36,7 @@ export type DerivedNodeType<T extends Node> = new (...args: any[]) => T;
|
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* Criteria object for find node functions {@link ViewerUtils.findChildNodes} and {@link ViewerUtils.findParentNode}.\
|
|
39
|
-
*
|
|
39
|
+
* All given properties must match for the criteria to pass.
|
|
40
40
|
*
|
|
41
41
|
* @param nodeName has to match exactly
|
|
42
42
|
* @param tagName uses algorithm of `Tags.MatchesQuery`, in most cases this is just an exact string match check
|
|
@@ -94,10 +94,10 @@ export class ViewerUtils {
|
|
|
94
94
|
if (morphTargetManager?.numTargets) {
|
|
95
95
|
// apply morph target vertices data to mesh geometry
|
|
96
96
|
// mostly only the "PositionKind" is implemented
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.PositionKind, morphTargetManager, geometry);
|
|
98
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.NormalKind, morphTargetManager, geometry);
|
|
99
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.TangentKind, morphTargetManager, geometry);
|
|
100
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.UVKind, morphTargetManager, geometry);
|
|
101
101
|
|
|
102
102
|
// remove morph target manager with all it's morph targets
|
|
103
103
|
mesh.morphTargetManager = null;
|
|
@@ -141,7 +141,7 @@ export class ViewerUtils {
|
|
|
141
141
|
|
|
142
142
|
if (!criteria) return allNodes as T[];
|
|
143
143
|
|
|
144
|
-
const foundNodes = allNodes.filter(node =>
|
|
144
|
+
const foundNodes = allNodes.filter(node => _matchesFindNodeCriteria(node, criteria));
|
|
145
145
|
return foundNodes as T[];
|
|
146
146
|
}
|
|
147
147
|
|
|
@@ -157,77 +157,77 @@ export class ViewerUtils {
|
|
|
157
157
|
return parent as T;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
const matchesCriteria =
|
|
160
|
+
const matchesCriteria = _matchesFindNodeCriteria(parent, criteria);
|
|
161
161
|
if (matchesCriteria) {
|
|
162
162
|
return parent as T;
|
|
163
163
|
} else {
|
|
164
164
|
return this.findParentNode(parent, criteria);
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
+
}
|
|
167
168
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
169
|
+
/**
|
|
170
|
+
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
171
|
+
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
172
|
+
*/
|
|
173
|
+
function _bakeMorphTargetManagerIntoVertices(
|
|
174
|
+
kind: string,
|
|
175
|
+
morphTargetManager: MorphTargetManager,
|
|
176
|
+
geometry: Geometry
|
|
177
|
+
): void {
|
|
178
|
+
const origVerticesData = geometry.getVerticesData(kind);
|
|
179
|
+
if (!origVerticesData) {
|
|
180
|
+
// no vertices data for this kind availabe on the mesh geometry
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
182
183
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
184
|
+
let verticesData = [...origVerticesData];
|
|
185
|
+
for (let i = 0; i < morphTargetManager.numTargets; i++) {
|
|
186
|
+
const target = morphTargetManager.getTarget(i);
|
|
187
|
+
const targetVerticesData = _getVerticesDataFromMorphTarget(kind, target);
|
|
188
|
+
if (targetVerticesData) {
|
|
189
|
+
// vertices data of this kind are implemented on the morph target
|
|
190
|
+
// add the influence of this morph target to the vertices data
|
|
191
|
+
// formula is taken from: https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets#basics
|
|
192
|
+
verticesData = verticesData.map(
|
|
193
|
+
(oldVal, idx) => oldVal + (targetVerticesData[idx] - origVerticesData[idx]) * target.influence
|
|
194
|
+
);
|
|
195
195
|
}
|
|
196
|
-
|
|
197
|
-
// apply the updated vertices data
|
|
198
|
-
geometry.setVerticesData(kind, verticesData);
|
|
199
196
|
}
|
|
200
197
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
return morphTarget.getPositions();
|
|
205
|
-
case VertexBuffer.NormalKind:
|
|
206
|
-
return morphTarget.getNormals();
|
|
207
|
-
case VertexBuffer.TangentKind:
|
|
208
|
-
return morphTarget.getTangents();
|
|
209
|
-
case VertexBuffer.UVKind:
|
|
210
|
-
return morphTarget.getUVs();
|
|
211
|
-
}
|
|
198
|
+
// apply the updated vertices data
|
|
199
|
+
geometry.setVerticesData(kind, verticesData);
|
|
200
|
+
}
|
|
212
201
|
|
|
213
|
-
|
|
202
|
+
function _getVerticesDataFromMorphTarget(kind: string, morphTarget: MorphTarget): FloatArray | null {
|
|
203
|
+
switch (kind) {
|
|
204
|
+
case VertexBuffer.PositionKind:
|
|
205
|
+
return morphTarget.getPositions();
|
|
206
|
+
case VertexBuffer.NormalKind:
|
|
207
|
+
return morphTarget.getNormals();
|
|
208
|
+
case VertexBuffer.TangentKind:
|
|
209
|
+
return morphTarget.getTangents();
|
|
210
|
+
case VertexBuffer.UVKind:
|
|
211
|
+
return morphTarget.getUVs();
|
|
214
212
|
}
|
|
215
213
|
|
|
216
|
-
|
|
217
|
-
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function _matchesFindNodeCriteria<T extends Node>(node: Node, criteria?: FindNodeCriteria<T>): boolean {
|
|
218
|
+
if (!criteria) return true;
|
|
218
219
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
220
|
+
const { nodeName, tagName, metadataObject, type } = criteria;
|
|
221
|
+
const nodeNameFits = !nodeName || node.name === nodeName;
|
|
222
|
+
const tagNameFits = !tagName || Tags.MatchesQuery(node, tagName);
|
|
223
|
+
const metadataFits = !metadataObject || _matchesMetadata(node.metadata, metadataObject);
|
|
224
|
+
const typeFits = !type || node instanceof type;
|
|
224
225
|
|
|
225
|
-
|
|
226
|
-
|
|
226
|
+
return nodeNameFits && tagNameFits && metadataFits && typeFits;
|
|
227
|
+
}
|
|
227
228
|
|
|
228
|
-
|
|
229
|
-
|
|
229
|
+
function _matchesMetadata(metadata: unknown, filter: MetadataObject): boolean {
|
|
230
|
+
if (!metadata || typeof metadata !== 'object') return false;
|
|
230
231
|
|
|
231
|
-
|
|
232
|
-
}
|
|
232
|
+
return Object.entries(filter).every(([key, value]) => (metadata as MetadataObject)[key] === value);
|
|
233
233
|
}
|