MCPcopy Create free account
hub / github.com/esengine/esengine / sampleSampler

Function sampleSampler

scripts/test-animation-times.mjs:77–116  ·  view source on GitHub ↗
(sampler, time, path)

Source from the content-addressed store, hash-verified

75}
76
77function sampleSampler(sampler, time, path) {
78 const input = sampler.input;
79 const output = sampler.output;
80 if (!input || !output || input.length === 0) return null;
81
82 const minTime = input[0];
83 const maxTime = input[input.length - 1];
84 time = Math.max(minTime, Math.min(maxTime, time));
85
86 let i0 = 0;
87 for (let i = 0; i < input.length - 1; i++) {
88 if (time >= input[i] && time <= input[i + 1]) {
89 i0 = i;
90 break;
91 }
92 if (time < input[i]) break;
93 i0 = i;
94 }
95 const i1 = Math.min(i0 + 1, input.length - 1);
96
97 const t0 = input[i0];
98 const t1 = input[i1];
99 const t = t1 > t0 ? (time - t0) / (t1 - t0) : 0;
100
101 const componentCount = path === 'rotation' ? 4 : 3;
102
103 if (path === 'rotation') {
104 const q0 = [output[i0 * 4], output[i0 * 4 + 1], output[i0 * 4 + 2], output[i0 * 4 + 3]];
105 const q1 = [output[i1 * 4], output[i1 * 4 + 1], output[i1 * 4 + 2], output[i1 * 4 + 3]];
106 return slerpQuaternion(q0, q1, t);
107 }
108
109 const result = [];
110 for (let c = 0; c < componentCount; c++) {
111 const v0 = output[i0 * componentCount + c];
112 const v1 = output[i1 * componentCount + c];
113 result.push(v0 + (v1 - v0) * t);
114 }
115 return result;
116}
117
118function sampleAnimation(clip, time, nodes) {
119 const nodeTransforms = new Map();

Callers 1

sampleAnimationFunction · 0.70

Calls 4

slerpQuaternionFunction · 0.70
pushMethod · 0.65
maxMethod · 0.45
minMethod · 0.45

Tested by

no test coverage detected