@combeenation/3d-viewer 20.0.0-beta1 → 20.0.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.
- 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 +4 -12
- package/dist/lib-cjs/utils/viewer-utils.js +64 -60
- 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 +68 -67
|
@@ -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,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Mesh, Node, Nullable, TransformNode, Vector3, Viewer } from '../index';
|
|
2
2
|
export declare type BakeGeometrySettings = {
|
|
3
3
|
keepTransformation?: boolean;
|
|
4
4
|
};
|
|
5
5
|
export declare type CreateTransformNodeSettings = {
|
|
6
|
-
parentNode?:
|
|
6
|
+
parentNode?: Nullable<Node>;
|
|
7
7
|
position?: Vector3;
|
|
8
8
|
rotation?: Vector3;
|
|
9
9
|
scaling?: Vector3;
|
|
@@ -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
|
|
@@ -48,7 +48,7 @@ export declare class ViewerUtils {
|
|
|
48
48
|
bakeGeometryOfMesh(mesh: Mesh, settings?: BakeGeometrySettings): void;
|
|
49
49
|
/**
|
|
50
50
|
* Get a `TransformNode` by name or create one if not already available.\
|
|
51
|
-
* Optionally set
|
|
51
|
+
* Optionally set some settings of the existing or new `TransformNode` right away.
|
|
52
52
|
*/
|
|
53
53
|
getOrCreateTransformNode(nodeName: string, settings?: CreateTransformNodeSettings): TransformNode;
|
|
54
54
|
/**
|
|
@@ -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
|
}
|
|
@@ -55,7 +55,7 @@ class ViewerUtils {
|
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Get a `TransformNode` by name or create one if not already available.\
|
|
58
|
-
* Optionally set
|
|
58
|
+
* Optionally set some settings of the existing or new `TransformNode` right away.
|
|
59
59
|
*/
|
|
60
60
|
getOrCreateTransformNode(nodeName, settings) {
|
|
61
61
|
const { parentNode, position, rotation, scaling } = settings !== null && settings !== void 0 ? settings : {};
|
|
@@ -64,10 +64,14 @@ class ViewerUtils {
|
|
|
64
64
|
if (!node) {
|
|
65
65
|
node = new index_1.TransformNode(nodeName, scene);
|
|
66
66
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
if (parentNode !== undefined)
|
|
68
|
+
node.parent = parentNode;
|
|
69
|
+
if (position !== undefined)
|
|
70
|
+
node.position = position;
|
|
71
|
+
if (rotation !== undefined)
|
|
72
|
+
node.rotation = rotation;
|
|
73
|
+
if (scaling !== undefined)
|
|
74
|
+
node.scaling = scaling;
|
|
71
75
|
return node;
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
@@ -80,7 +84,7 @@ class ViewerUtils {
|
|
|
80
84
|
const allNodes = node ? node.getChildren(undefined, false) : [...this.viewer.scene.getNodes()];
|
|
81
85
|
if (!criteria)
|
|
82
86
|
return allNodes;
|
|
83
|
-
const foundNodes = allNodes.filter(node =>
|
|
87
|
+
const foundNodes = allNodes.filter(node => _matchesFindNodeCriteria(node, criteria));
|
|
84
88
|
return foundNodes;
|
|
85
89
|
}
|
|
86
90
|
/**
|
|
@@ -95,7 +99,7 @@ class ViewerUtils {
|
|
|
95
99
|
else if (!criteria) {
|
|
96
100
|
return parent;
|
|
97
101
|
}
|
|
98
|
-
const matchesCriteria =
|
|
102
|
+
const matchesCriteria = _matchesFindNodeCriteria(parent, criteria);
|
|
99
103
|
if (matchesCriteria) {
|
|
100
104
|
return parent;
|
|
101
105
|
}
|
|
@@ -103,58 +107,58 @@ class ViewerUtils {
|
|
|
103
107
|
return this.findParentNode(parent, criteria);
|
|
104
108
|
}
|
|
105
109
|
}
|
|
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);
|
|
110
|
+
}
|
|
111
|
+
exports.ViewerUtils = ViewerUtils;
|
|
112
|
+
/**
|
|
113
|
+
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
114
|
+
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
115
|
+
*/
|
|
116
|
+
function _bakeMorphTargetManagerIntoVertices(kind, morphTargetManager, geometry) {
|
|
117
|
+
const origVerticesData = geometry.getVerticesData(kind);
|
|
118
|
+
if (!origVerticesData) {
|
|
119
|
+
// no vertices data for this kind availabe on the mesh geometry
|
|
120
|
+
return;
|
|
129
121
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return morphTarget.getUVs();
|
|
122
|
+
let verticesData = [...origVerticesData];
|
|
123
|
+
for (let i = 0; i < morphTargetManager.numTargets; i++) {
|
|
124
|
+
const target = morphTargetManager.getTarget(i);
|
|
125
|
+
const targetVerticesData = _getVerticesDataFromMorphTarget(kind, target);
|
|
126
|
+
if (targetVerticesData) {
|
|
127
|
+
// vertices data of this kind are implemented on the morph target
|
|
128
|
+
// add the influence of this morph target to the vertices data
|
|
129
|
+
// formula is taken from: https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets#basics
|
|
130
|
+
verticesData = verticesData.map((oldVal, idx) => oldVal + (targetVerticesData[idx] - origVerticesData[idx]) * target.influence);
|
|
140
131
|
}
|
|
141
|
-
return null;
|
|
142
132
|
}
|
|
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);
|
|
133
|
+
// apply the updated vertices data
|
|
134
|
+
geometry.setVerticesData(kind, verticesData);
|
|
135
|
+
}
|
|
136
|
+
function _getVerticesDataFromMorphTarget(kind, morphTarget) {
|
|
137
|
+
switch (kind) {
|
|
138
|
+
case index_1.VertexBuffer.PositionKind:
|
|
139
|
+
return morphTarget.getPositions();
|
|
140
|
+
case index_1.VertexBuffer.NormalKind:
|
|
141
|
+
return morphTarget.getNormals();
|
|
142
|
+
case index_1.VertexBuffer.TangentKind:
|
|
143
|
+
return morphTarget.getTangents();
|
|
144
|
+
case index_1.VertexBuffer.UVKind:
|
|
145
|
+
return morphTarget.getUVs();
|
|
157
146
|
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
function _matchesFindNodeCriteria(node, criteria) {
|
|
150
|
+
if (!criteria)
|
|
151
|
+
return true;
|
|
152
|
+
const { nodeName, tagName, metadataObject, type } = criteria;
|
|
153
|
+
const nodeNameFits = !nodeName || node.name === nodeName;
|
|
154
|
+
const tagNameFits = !tagName || index_1.Tags.MatchesQuery(node, tagName);
|
|
155
|
+
const metadataFits = !metadataObject || _matchesMetadata(node.metadata, metadataObject);
|
|
156
|
+
const typeFits = !type || node instanceof type;
|
|
157
|
+
return nodeNameFits && tagNameFits && metadataFits && typeFits;
|
|
158
|
+
}
|
|
159
|
+
function _matchesMetadata(metadata, filter) {
|
|
160
|
+
if (!metadata || typeof metadata !== 'object')
|
|
161
|
+
return false;
|
|
162
|
+
return Object.entries(filter).every(([key, value]) => metadata[key] === value);
|
|
158
163
|
}
|
|
159
|
-
exports.ViewerUtils = ViewerUtils;
|
|
160
164
|
//# sourceMappingURL=viewer-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-utils.js","sourceRoot":"","sources":["../../../src/utils/viewer-utils.ts"],"names":[],"mappings":";;;AAAA,
|
|
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,
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
MorphTarget,
|
|
6
6
|
MorphTargetManager,
|
|
7
7
|
Node,
|
|
8
|
+
Nullable,
|
|
8
9
|
Tags,
|
|
9
10
|
TransformNode,
|
|
10
11
|
Vector3,
|
|
@@ -17,7 +18,7 @@ export type BakeGeometrySettings = {
|
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
export type CreateTransformNodeSettings = {
|
|
20
|
-
parentNode?:
|
|
21
|
+
parentNode?: Nullable<Node>;
|
|
21
22
|
position?: Vector3;
|
|
22
23
|
rotation?: Vector3;
|
|
23
24
|
scaling?: Vector3;
|
|
@@ -36,7 +37,7 @@ export type DerivedNodeType<T extends Node> = new (...args: any[]) => T;
|
|
|
36
37
|
|
|
37
38
|
/**
|
|
38
39
|
* Criteria object for find node functions {@link ViewerUtils.findChildNodes} and {@link ViewerUtils.findParentNode}.\
|
|
39
|
-
*
|
|
40
|
+
* All given properties must match for the criteria to pass.
|
|
40
41
|
*
|
|
41
42
|
* @param nodeName has to match exactly
|
|
42
43
|
* @param tagName uses algorithm of `Tags.MatchesQuery`, in most cases this is just an exact string match check
|
|
@@ -94,10 +95,10 @@ export class ViewerUtils {
|
|
|
94
95
|
if (morphTargetManager?.numTargets) {
|
|
95
96
|
// apply morph target vertices data to mesh geometry
|
|
96
97
|
// mostly only the "PositionKind" is implemented
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.PositionKind, morphTargetManager, geometry);
|
|
99
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.NormalKind, morphTargetManager, geometry);
|
|
100
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.TangentKind, morphTargetManager, geometry);
|
|
101
|
+
_bakeMorphTargetManagerIntoVertices(VertexBuffer.UVKind, morphTargetManager, geometry);
|
|
101
102
|
|
|
102
103
|
// remove morph target manager with all it's morph targets
|
|
103
104
|
mesh.morphTargetManager = null;
|
|
@@ -111,7 +112,7 @@ export class ViewerUtils {
|
|
|
111
112
|
|
|
112
113
|
/**
|
|
113
114
|
* Get a `TransformNode` by name or create one if not already available.\
|
|
114
|
-
* Optionally set
|
|
115
|
+
* Optionally set some settings of the existing or new `TransformNode` right away.
|
|
115
116
|
*/
|
|
116
117
|
public getOrCreateTransformNode(nodeName: string, settings?: CreateTransformNodeSettings): TransformNode {
|
|
117
118
|
const { parentNode, position, rotation, scaling } = settings ?? {};
|
|
@@ -122,10 +123,10 @@ export class ViewerUtils {
|
|
|
122
123
|
node = new TransformNode(nodeName, scene);
|
|
123
124
|
}
|
|
124
125
|
|
|
125
|
-
node.parent = parentNode
|
|
126
|
-
node.position = position
|
|
127
|
-
node.rotation = rotation
|
|
128
|
-
node.scaling = scaling
|
|
126
|
+
if (parentNode !== undefined) node.parent = parentNode;
|
|
127
|
+
if (position !== undefined) node.position = position;
|
|
128
|
+
if (rotation !== undefined) node.rotation = rotation;
|
|
129
|
+
if (scaling !== undefined) node.scaling = scaling;
|
|
129
130
|
|
|
130
131
|
return node;
|
|
131
132
|
}
|
|
@@ -141,7 +142,7 @@ export class ViewerUtils {
|
|
|
141
142
|
|
|
142
143
|
if (!criteria) return allNodes as T[];
|
|
143
144
|
|
|
144
|
-
const foundNodes = allNodes.filter(node =>
|
|
145
|
+
const foundNodes = allNodes.filter(node => _matchesFindNodeCriteria(node, criteria));
|
|
145
146
|
return foundNodes as T[];
|
|
146
147
|
}
|
|
147
148
|
|
|
@@ -157,77 +158,77 @@ export class ViewerUtils {
|
|
|
157
158
|
return parent as T;
|
|
158
159
|
}
|
|
159
160
|
|
|
160
|
-
const matchesCriteria =
|
|
161
|
+
const matchesCriteria = _matchesFindNodeCriteria(parent, criteria);
|
|
161
162
|
if (matchesCriteria) {
|
|
162
163
|
return parent as T;
|
|
163
164
|
} else {
|
|
164
165
|
return this.findParentNode(parent, criteria);
|
|
165
166
|
}
|
|
166
167
|
}
|
|
168
|
+
}
|
|
167
169
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
170
|
+
/**
|
|
171
|
+
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
172
|
+
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
173
|
+
*/
|
|
174
|
+
function _bakeMorphTargetManagerIntoVertices(
|
|
175
|
+
kind: string,
|
|
176
|
+
morphTargetManager: MorphTargetManager,
|
|
177
|
+
geometry: Geometry
|
|
178
|
+
): void {
|
|
179
|
+
const origVerticesData = geometry.getVerticesData(kind);
|
|
180
|
+
if (!origVerticesData) {
|
|
181
|
+
// no vertices data for this kind availabe on the mesh geometry
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
182
184
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
185
|
+
let verticesData = [...origVerticesData];
|
|
186
|
+
for (let i = 0; i < morphTargetManager.numTargets; i++) {
|
|
187
|
+
const target = morphTargetManager.getTarget(i);
|
|
188
|
+
const targetVerticesData = _getVerticesDataFromMorphTarget(kind, target);
|
|
189
|
+
if (targetVerticesData) {
|
|
190
|
+
// vertices data of this kind are implemented on the morph target
|
|
191
|
+
// add the influence of this morph target to the vertices data
|
|
192
|
+
// formula is taken from: https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets#basics
|
|
193
|
+
verticesData = verticesData.map(
|
|
194
|
+
(oldVal, idx) => oldVal + (targetVerticesData[idx] - origVerticesData[idx]) * target.influence
|
|
195
|
+
);
|
|
195
196
|
}
|
|
196
|
-
|
|
197
|
-
// apply the updated vertices data
|
|
198
|
-
geometry.setVerticesData(kind, verticesData);
|
|
199
197
|
}
|
|
200
198
|
|
|
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
|
-
}
|
|
199
|
+
// apply the updated vertices data
|
|
200
|
+
geometry.setVerticesData(kind, verticesData);
|
|
201
|
+
}
|
|
212
202
|
|
|
213
|
-
|
|
203
|
+
function _getVerticesDataFromMorphTarget(kind: string, morphTarget: MorphTarget): FloatArray | null {
|
|
204
|
+
switch (kind) {
|
|
205
|
+
case VertexBuffer.PositionKind:
|
|
206
|
+
return morphTarget.getPositions();
|
|
207
|
+
case VertexBuffer.NormalKind:
|
|
208
|
+
return morphTarget.getNormals();
|
|
209
|
+
case VertexBuffer.TangentKind:
|
|
210
|
+
return morphTarget.getTangents();
|
|
211
|
+
case VertexBuffer.UVKind:
|
|
212
|
+
return morphTarget.getUVs();
|
|
214
213
|
}
|
|
215
214
|
|
|
216
|
-
|
|
217
|
-
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function _matchesFindNodeCriteria<T extends Node>(node: Node, criteria?: FindNodeCriteria<T>): boolean {
|
|
219
|
+
if (!criteria) return true;
|
|
218
220
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
221
|
+
const { nodeName, tagName, metadataObject, type } = criteria;
|
|
222
|
+
const nodeNameFits = !nodeName || node.name === nodeName;
|
|
223
|
+
const tagNameFits = !tagName || Tags.MatchesQuery(node, tagName);
|
|
224
|
+
const metadataFits = !metadataObject || _matchesMetadata(node.metadata, metadataObject);
|
|
225
|
+
const typeFits = !type || node instanceof type;
|
|
224
226
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
+
return nodeNameFits && tagNameFits && metadataFits && typeFits;
|
|
228
|
+
}
|
|
227
229
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
+
function _matchesMetadata(metadata: unknown, filter: MetadataObject): boolean {
|
|
231
|
+
if (!metadata || typeof metadata !== 'object') return false;
|
|
230
232
|
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
+
return Object.entries(filter).every(([key, value]) => (metadata as MetadataObject)[key] === value);
|
|
233
234
|
}
|