reze-engine 0.2.18 → 0.3.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/README.md +67 -66
- package/dist/bezier-interpolate.d.ts +15 -0
- package/dist/bezier-interpolate.d.ts.map +1 -0
- package/dist/bezier-interpolate.js +40 -0
- package/dist/engine.d.ts +10 -9
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +284 -144
- package/dist/ik-solver.d.ts +26 -0
- package/dist/ik-solver.d.ts.map +1 -0
- package/dist/ik-solver.js +372 -0
- package/dist/math.d.ts +1 -0
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +8 -0
- package/dist/model.d.ts +82 -3
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +357 -4
- package/dist/pmx-loader.d.ts +3 -1
- package/dist/pmx-loader.d.ts.map +1 -1
- package/dist/pmx-loader.js +218 -130
- package/dist/vmd-loader.d.ts +11 -1
- package/dist/vmd-loader.d.ts.map +1 -1
- package/dist/vmd-loader.js +91 -15
- package/package.json +1 -1
- package/src/bezier-interpolate.ts +47 -0
- package/src/camera.ts +358 -358
- package/src/engine.ts +308 -165
- package/src/ik-solver.ts +488 -0
- package/src/math.ts +555 -546
- package/src/model.ts +930 -421
- package/src/physics.ts +752 -752
- package/src/pmx-loader.ts +1173 -1054
- package/src/vmd-loader.ts +276 -179
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bezier interpolation for VMD animations
|
|
3
|
+
* Based on the reference implementation from babylon-mmd
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Bezier interpolation function
|
|
8
|
+
* @param x1 First control point X (0-127, normalized to 0-1)
|
|
9
|
+
* @param x2 Second control point X (0-127, normalized to 0-1)
|
|
10
|
+
* @param y1 First control point Y (0-127, normalized to 0-1)
|
|
11
|
+
* @param y2 Second control point Y (0-127, normalized to 0-1)
|
|
12
|
+
* @param t Interpolation parameter (0-1)
|
|
13
|
+
* @returns Interpolated value (0-1)
|
|
14
|
+
*/
|
|
15
|
+
export function bezierInterpolate(x1: number, x2: number, y1: number, y2: number, t: number): number {
|
|
16
|
+
// Clamp t to [0, 1]
|
|
17
|
+
t = Math.max(0, Math.min(1, t))
|
|
18
|
+
|
|
19
|
+
// Binary search for the t value that gives us the desired x
|
|
20
|
+
// We're solving for t in the Bezier curve: x(t) = 3*(1-t)^2*t*x1 + 3*(1-t)*t^2*x2 + t^3
|
|
21
|
+
let start = 0
|
|
22
|
+
let end = 1
|
|
23
|
+
let mid = 0.5
|
|
24
|
+
|
|
25
|
+
// Iterate until we find the t value that gives us the desired x
|
|
26
|
+
for (let i = 0; i < 15; i++) {
|
|
27
|
+
// Evaluate Bezier curve at mid point
|
|
28
|
+
const x = 3 * (1 - mid) * (1 - mid) * mid * x1 + 3 * (1 - mid) * mid * mid * x2 + mid * mid * mid
|
|
29
|
+
|
|
30
|
+
if (Math.abs(x - t) < 0.0001) {
|
|
31
|
+
break
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (x < t) {
|
|
35
|
+
start = mid
|
|
36
|
+
} else {
|
|
37
|
+
end = mid
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
mid = (start + end) / 2
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Now evaluate the y value at this t
|
|
44
|
+
const y = 3 * (1 - mid) * (1 - mid) * mid * y1 + 3 * (1 - mid) * mid * mid * y2 + mid * mid * mid
|
|
45
|
+
|
|
46
|
+
return y
|
|
47
|
+
}
|