@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
84 lines (81 loc) • 4.17 kB
JavaScript
import { aR as Animation, aD as Quaternion, V as Vector3 } from './index-MZPybX0H.esm.js';
import { S as SetInterpolationForKey } from './objectModelMapping-De5EKNEZ.esm.js';
import './spotLight.pure-CRdZC6Ci.esm.js';
/** @internal */
// eslint-disable-next-line @typescript-eslint/naming-convention
function getVector3(_target, source, offset, scale) {
return Vector3.FromArray(source, offset).scaleInPlace(scale);
}
/** @internal */
// eslint-disable-next-line @typescript-eslint/naming-convention
function getQuaternion(_target, source, offset, scale) {
return Quaternion.FromArray(source, offset).scaleInPlace(scale);
}
/** @internal */
// eslint-disable-next-line @typescript-eslint/naming-convention
function getWeights(target, source, offset, scale) {
const value = new Array(target._numMorphTargets);
for (let i = 0; i < value.length; i++) {
value[i] = source[offset++] * scale;
}
return value;
}
/** @internal */
class AnimationPropertyInfo {
/** @internal */
constructor(type, name, getValue, getStride) {
this.type = type;
this.name = name;
this.getValue = getValue;
this.getStride = getStride;
}
_buildAnimation(name, fps, keys) {
const babylonAnimation = new Animation(name, this.name, fps, this.type);
babylonAnimation.setKeys(keys, true);
return babylonAnimation;
}
}
/** @internal */
class TransformNodeAnimationPropertyInfo extends AnimationPropertyInfo {
/** @internal */
buildAnimations(target, name, fps, keys) {
const babylonAnimations = [];
babylonAnimations.push({ babylonAnimatable: target._babylonTransformNode, babylonAnimation: this._buildAnimation(name, fps, keys) });
return babylonAnimations;
}
}
/** @internal */
class WeightAnimationPropertyInfo extends AnimationPropertyInfo {
buildAnimations(target, name, fps, keys) {
const babylonAnimations = [];
if (target._numMorphTargets) {
for (let targetIndex = 0; targetIndex < target._numMorphTargets; targetIndex++) {
const babylonAnimation = new Animation(`${name}_${targetIndex}`, this.name, fps, this.type);
babylonAnimation.setKeys(keys.map((key) => ({
frame: key.frame,
inTangent: key.inTangent ? key.inTangent[targetIndex] : undefined,
value: key.value[targetIndex],
outTangent: key.outTangent ? key.outTangent[targetIndex] : undefined,
interpolation: key.interpolation,
})), true);
if (target._primitiveBabylonMeshes) {
for (const babylonMesh of target._primitiveBabylonMeshes) {
if (babylonMesh.morphTargetManager) {
const morphTarget = babylonMesh.morphTargetManager.getTarget(targetIndex);
const babylonAnimationClone = babylonAnimation.clone();
morphTarget.animations.push(babylonAnimationClone);
babylonAnimations.push({ babylonAnimatable: morphTarget, babylonAnimation: babylonAnimationClone });
}
}
}
}
}
return babylonAnimations;
}
}
SetInterpolationForKey("/nodes/{}/translation", [new TransformNodeAnimationPropertyInfo(Animation.ANIMATIONTYPE_VECTOR3, "position", getVector3, () => 3)]);
SetInterpolationForKey("/nodes/{}/rotation", [new TransformNodeAnimationPropertyInfo(Animation.ANIMATIONTYPE_QUATERNION, "rotationQuaternion", getQuaternion, () => 4)]);
SetInterpolationForKey("/nodes/{}/scale", [new TransformNodeAnimationPropertyInfo(Animation.ANIMATIONTYPE_VECTOR3, "scaling", getVector3, () => 3)]);
SetInterpolationForKey("/nodes/{}/weights", [new WeightAnimationPropertyInfo(Animation.ANIMATIONTYPE_FLOAT, "influence", getWeights, (target) => target._numMorphTargets)]);
export { AnimationPropertyInfo, TransformNodeAnimationPropertyInfo, WeightAnimationPropertyInfo, getQuaternion, getVector3, getWeights };
//# sourceMappingURL=glTFLoaderAnimation-y0JCKnOd.esm.js.map