@certe/atmos-math 0.1.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/LICENCE +674 -0
- package/README.md +105 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/mat4.d.ts +20 -0
- package/dist/mat4.d.ts.map +1 -0
- package/dist/mat4.js +382 -0
- package/dist/mat4.js.map +1 -0
- package/dist/noise.d.ts +24 -0
- package/dist/noise.d.ts.map +1 -0
- package/dist/noise.js +138 -0
- package/dist/noise.js.map +1 -0
- package/dist/quat.d.ts +40 -0
- package/dist/quat.d.ts.map +1 -0
- package/dist/quat.js +249 -0
- package/dist/quat.js.map +1 -0
- package/dist/ray.d.ts +31 -0
- package/dist/ray.d.ts.map +1 -0
- package/dist/ray.js +129 -0
- package/dist/ray.js.map +1 -0
- package/dist/vec3.d.ts +17 -0
- package/dist/vec3.d.ts.map +1 -0
- package/dist/vec3.js +109 -0
- package/dist/vec3.js.map +1 -0
- package/package.json +24 -0
- package/src/index.ts +9 -0
package/README.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# ๐งฎ @certe/atmos-math
|
|
2
|
+
|
|
3
|
+
Lightweight, zero-dependency math library for the Atmos Engine. Every type is a plain `Float32Array` โ GPU-upload friendly, zero heap allocations on hot paths, and fully tree-shakeable.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ๐ฆ Modules
|
|
8
|
+
|
|
9
|
+
| Module | Type | Description |
|
|
10
|
+
|--------|------|-------------|
|
|
11
|
+
| `Vec3` | `Float32Array(3)` | 3D vectors |
|
|
12
|
+
| `Mat4` | `Float32Array(16)` | 4ร4 matrices (column-major) |
|
|
13
|
+
| `Quat` | `Float32Array(4)` | Quaternions `[x, y, z, w]` |
|
|
14
|
+
| `Ray` | `{ origin: Vec3, direction: Vec3 }` | Rays for picking & intersection |
|
|
15
|
+
| Noise | โ | Value noise, Perlin 3D, fBm |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## ๐ Out-Param Pattern
|
|
20
|
+
|
|
21
|
+
All operations follow the same convention โ the **first parameter is the output** and the function returns it for chaining:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { Vec3, Mat4, Quat } from '@certe/atmos-math';
|
|
25
|
+
|
|
26
|
+
const a = Vec3.fromValues(1, 2, 3);
|
|
27
|
+
const b = Vec3.fromValues(4, 5, 6);
|
|
28
|
+
const out = Vec3.create();
|
|
29
|
+
|
|
30
|
+
Vec3.add(out, a, b); // out = [5, 7, 9], returns out
|
|
31
|
+
Vec3.scale(out, out, 2); // out = [10, 14, 18]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
This avoids garbage collection pressure in per-frame code.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## ๐ Quick Start
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import { Vec3, Mat4, Quat } from '@certe/atmos-math';
|
|
42
|
+
|
|
43
|
+
// Build a TRS matrix from quaternion rotation + position + scale
|
|
44
|
+
const pos = Vec3.fromValues(0, 5, -10);
|
|
45
|
+
const rot = Quat.create();
|
|
46
|
+
Quat.fromEuler(rot, 0, Math.PI / 4, 0);
|
|
47
|
+
const scl = Vec3.fromValues(1, 1, 1);
|
|
48
|
+
|
|
49
|
+
const world = Mat4.create();
|
|
50
|
+
Mat4.fromRotationTranslationScale(world, rot, pos, scl);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## ๐ API Overview
|
|
56
|
+
|
|
57
|
+
### Vec3
|
|
58
|
+
|
|
59
|
+
`create` ยท `fromValues` ยท `set` ยท `copy` ยท `add` ยท `sub` ยท `scale` ยท `dot` ยท `cross` ยท `length` ยท `distance` ยท `normalize` ยท `transformQuat` ยท `lerp`
|
|
60
|
+
|
|
61
|
+
### Mat4
|
|
62
|
+
|
|
63
|
+
`create` ยท `identity` ยท `multiply` ยท `translate` ยท `scale` ยท `rotateX/Y/Z` ยท `perspective` ยท `ortho` ยท `lookAt` ยท `invert` ยท `transpose` ยท `fromRotationTranslationScale`
|
|
64
|
+
|
|
65
|
+
### Quat
|
|
66
|
+
|
|
67
|
+
`create` ยท `identity` ยท `fromAxisAngle` ยท `fromEuler` ยท `fromMat4` ยท `toEuler` ยท `toMat4` ยท `multiply` ยท `normalize` ยท `slerp` ยท `invert` ยท `copy` ยท `rotateX/Y/Z`
|
|
68
|
+
|
|
69
|
+
### Ray
|
|
70
|
+
|
|
71
|
+
`create` ยท `fromScreenCoords` ยท `intersectSphere` ยท `intersectPlane` ยท `intersectTriangle` ยท `pointOnRay`
|
|
72
|
+
|
|
73
|
+
### Noise
|
|
74
|
+
|
|
75
|
+
`valueNoise2D` ยท `fbm` ยท `perlinNoise3D` ยท `fbm3D`
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## ๐ง Design Principles
|
|
80
|
+
|
|
81
|
+
- **Float32Array everywhere** โ matches GPU uniform/attribute layouts
|
|
82
|
+
- **Zero allocations in hot paths** โ module-level scratch arrays for temporaries
|
|
83
|
+
- **Functional API** โ no classes, no `this`, pure functions
|
|
84
|
+
- **Tree-shakeable** โ import only what you use
|
|
85
|
+
- **No dependencies** โ standalone package
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## ๐ Structure
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
packages/math/src/
|
|
93
|
+
index.ts # Re-exports all modules
|
|
94
|
+
vec3.ts # 3D vector operations
|
|
95
|
+
mat4.ts # 4ร4 matrix operations
|
|
96
|
+
quat.ts # Quaternion operations
|
|
97
|
+
ray.ts # Ray creation & intersection tests
|
|
98
|
+
noise.ts # Value noise, Perlin 3D, fBm
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## ๐ Dependencies
|
|
104
|
+
|
|
105
|
+
None.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * as Vec3 from './vec3.js';
|
|
2
|
+
export * as Mat4 from './mat4.js';
|
|
3
|
+
export * as Quat from './quat.js';
|
|
4
|
+
export * as Ray from './ray.js';
|
|
5
|
+
export type { Vec3 as Vec3Type } from './vec3.js';
|
|
6
|
+
export type { Mat4 as Mat4Type } from './mat4.js';
|
|
7
|
+
export type { Quat as QuatType } from './quat.js';
|
|
8
|
+
export type { Ray as RayType } from './ray.js';
|
|
9
|
+
export { valueNoise2D, fbm, perlinNoise3D, fbm3D } from './noise.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,YAAY,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAClD,YAAY,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAClD,YAAY,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAClD,YAAY,EAAE,GAAG,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAKhC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/mat4.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Vec3 } from './vec3.js';
|
|
2
|
+
import type { Quat } from './quat.js';
|
|
3
|
+
/** A Mat4 is a Float32Array of length 16 in column-major order */
|
|
4
|
+
export type Mat4 = Float32Array;
|
|
5
|
+
export declare function create(): Mat4;
|
|
6
|
+
export declare function identity(out: Mat4): Mat4;
|
|
7
|
+
export declare function multiply(out: Mat4, a: Mat4, b: Mat4): Mat4;
|
|
8
|
+
export declare function translate(out: Mat4, a: Mat4, v: Vec3): Mat4;
|
|
9
|
+
export declare function scale(out: Mat4, a: Mat4, v: Vec3): Mat4;
|
|
10
|
+
export declare function rotateX(out: Mat4, a: Mat4, rad: number): Mat4;
|
|
11
|
+
export declare function rotateY(out: Mat4, a: Mat4, rad: number): Mat4;
|
|
12
|
+
export declare function rotateZ(out: Mat4, a: Mat4, rad: number): Mat4;
|
|
13
|
+
/** Orthographic projection (WebGPU NDC: depth 0..1) */
|
|
14
|
+
export declare function ortho(out: Mat4, left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4;
|
|
15
|
+
export declare function perspective(out: Mat4, fovY: number, aspect: number, near: number, far: number): Mat4;
|
|
16
|
+
export declare function lookAt(out: Mat4, eye: Vec3, center: Vec3, up: Vec3): Mat4;
|
|
17
|
+
export declare function invert(out: Mat4, a: Mat4): Mat4 | null;
|
|
18
|
+
export declare function transpose(out: Mat4, a: Mat4): Mat4;
|
|
19
|
+
export declare function fromRotationTranslationScale(out: Mat4, q: Quat, v: Vec3, s: Vec3): Mat4;
|
|
20
|
+
//# sourceMappingURL=mat4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mat4.d.ts","sourceRoot":"","sources":["../src/mat4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,kEAAkE;AAClE,MAAM,MAAM,IAAI,GAAG,YAAY,CAAC;AAEhC,wBAAgB,MAAM,IAAI,IAAI,CAE7B;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAMxC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CA+B1D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAoB3D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAOvD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAoB7D;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAoB7D;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAoB7D;AAED,uDAAuD;AACvD,wBAAgB,KAAK,CACnB,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,IAAI,CAaN;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,IAAI,CA0BN;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,CAiCzE;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAwCtD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAgBlD;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,IAAI,EACT,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,IAAI,GACN,IAAI,CAyBN"}
|
package/dist/mat4.js
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
export function create() {
|
|
2
|
+
return new Float32Array(16);
|
|
3
|
+
}
|
|
4
|
+
export function identity(out) {
|
|
5
|
+
out[0] = 1;
|
|
6
|
+
out[1] = 0;
|
|
7
|
+
out[2] = 0;
|
|
8
|
+
out[3] = 0;
|
|
9
|
+
out[4] = 0;
|
|
10
|
+
out[5] = 1;
|
|
11
|
+
out[6] = 0;
|
|
12
|
+
out[7] = 0;
|
|
13
|
+
out[8] = 0;
|
|
14
|
+
out[9] = 0;
|
|
15
|
+
out[10] = 1;
|
|
16
|
+
out[11] = 0;
|
|
17
|
+
out[12] = 0;
|
|
18
|
+
out[13] = 0;
|
|
19
|
+
out[14] = 0;
|
|
20
|
+
out[15] = 1;
|
|
21
|
+
return out;
|
|
22
|
+
}
|
|
23
|
+
export function multiply(out, a, b) {
|
|
24
|
+
const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
25
|
+
const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
26
|
+
const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
27
|
+
const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
28
|
+
let b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
|
|
29
|
+
out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
30
|
+
out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
31
|
+
out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
32
|
+
out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
33
|
+
b0 = b[4];
|
|
34
|
+
b1 = b[5];
|
|
35
|
+
b2 = b[6];
|
|
36
|
+
b3 = b[7];
|
|
37
|
+
out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
38
|
+
out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
39
|
+
out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
40
|
+
out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
41
|
+
b0 = b[8];
|
|
42
|
+
b1 = b[9];
|
|
43
|
+
b2 = b[10];
|
|
44
|
+
b3 = b[11];
|
|
45
|
+
out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
46
|
+
out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
47
|
+
out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
48
|
+
out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
49
|
+
b0 = b[12];
|
|
50
|
+
b1 = b[13];
|
|
51
|
+
b2 = b[14];
|
|
52
|
+
b3 = b[15];
|
|
53
|
+
out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
|
|
54
|
+
out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
|
|
55
|
+
out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
|
|
56
|
+
out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
export function translate(out, a, v) {
|
|
60
|
+
const x = v[0], y = v[1], z = v[2];
|
|
61
|
+
if (a === out) {
|
|
62
|
+
out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];
|
|
63
|
+
out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];
|
|
64
|
+
out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];
|
|
65
|
+
out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
69
|
+
const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
70
|
+
const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
71
|
+
out[0] = a00;
|
|
72
|
+
out[1] = a01;
|
|
73
|
+
out[2] = a02;
|
|
74
|
+
out[3] = a03;
|
|
75
|
+
out[4] = a10;
|
|
76
|
+
out[5] = a11;
|
|
77
|
+
out[6] = a12;
|
|
78
|
+
out[7] = a13;
|
|
79
|
+
out[8] = a20;
|
|
80
|
+
out[9] = a21;
|
|
81
|
+
out[10] = a22;
|
|
82
|
+
out[11] = a23;
|
|
83
|
+
out[12] = a00 * x + a10 * y + a20 * z + a[12];
|
|
84
|
+
out[13] = a01 * x + a11 * y + a21 * z + a[13];
|
|
85
|
+
out[14] = a02 * x + a12 * y + a22 * z + a[14];
|
|
86
|
+
out[15] = a03 * x + a13 * y + a23 * z + a[15];
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
export function scale(out, a, v) {
|
|
91
|
+
const x = v[0], y = v[1], z = v[2];
|
|
92
|
+
out[0] = a[0] * x;
|
|
93
|
+
out[1] = a[1] * x;
|
|
94
|
+
out[2] = a[2] * x;
|
|
95
|
+
out[3] = a[3] * x;
|
|
96
|
+
out[4] = a[4] * y;
|
|
97
|
+
out[5] = a[5] * y;
|
|
98
|
+
out[6] = a[6] * y;
|
|
99
|
+
out[7] = a[7] * y;
|
|
100
|
+
out[8] = a[8] * z;
|
|
101
|
+
out[9] = a[9] * z;
|
|
102
|
+
out[10] = a[10] * z;
|
|
103
|
+
out[11] = a[11] * z;
|
|
104
|
+
out[12] = a[12];
|
|
105
|
+
out[13] = a[13];
|
|
106
|
+
out[14] = a[14];
|
|
107
|
+
out[15] = a[15];
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
export function rotateX(out, a, rad) {
|
|
111
|
+
const s = Math.sin(rad);
|
|
112
|
+
const c = Math.cos(rad);
|
|
113
|
+
const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
114
|
+
const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
115
|
+
if (a !== out) {
|
|
116
|
+
out[0] = a[0];
|
|
117
|
+
out[1] = a[1];
|
|
118
|
+
out[2] = a[2];
|
|
119
|
+
out[3] = a[3];
|
|
120
|
+
out[12] = a[12];
|
|
121
|
+
out[13] = a[13];
|
|
122
|
+
out[14] = a[14];
|
|
123
|
+
out[15] = a[15];
|
|
124
|
+
}
|
|
125
|
+
out[4] = a10 * c + a20 * s;
|
|
126
|
+
out[5] = a11 * c + a21 * s;
|
|
127
|
+
out[6] = a12 * c + a22 * s;
|
|
128
|
+
out[7] = a13 * c + a23 * s;
|
|
129
|
+
out[8] = a20 * c - a10 * s;
|
|
130
|
+
out[9] = a21 * c - a11 * s;
|
|
131
|
+
out[10] = a22 * c - a12 * s;
|
|
132
|
+
out[11] = a23 * c - a13 * s;
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
export function rotateY(out, a, rad) {
|
|
136
|
+
const s = Math.sin(rad);
|
|
137
|
+
const c = Math.cos(rad);
|
|
138
|
+
const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
139
|
+
const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
140
|
+
if (a !== out) {
|
|
141
|
+
out[4] = a[4];
|
|
142
|
+
out[5] = a[5];
|
|
143
|
+
out[6] = a[6];
|
|
144
|
+
out[7] = a[7];
|
|
145
|
+
out[12] = a[12];
|
|
146
|
+
out[13] = a[13];
|
|
147
|
+
out[14] = a[14];
|
|
148
|
+
out[15] = a[15];
|
|
149
|
+
}
|
|
150
|
+
out[0] = a00 * c - a20 * s;
|
|
151
|
+
out[1] = a01 * c - a21 * s;
|
|
152
|
+
out[2] = a02 * c - a22 * s;
|
|
153
|
+
out[3] = a03 * c - a23 * s;
|
|
154
|
+
out[8] = a00 * s + a20 * c;
|
|
155
|
+
out[9] = a01 * s + a21 * c;
|
|
156
|
+
out[10] = a02 * s + a22 * c;
|
|
157
|
+
out[11] = a03 * s + a23 * c;
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
export function rotateZ(out, a, rad) {
|
|
161
|
+
const s = Math.sin(rad);
|
|
162
|
+
const c = Math.cos(rad);
|
|
163
|
+
const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
164
|
+
const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
165
|
+
if (a !== out) {
|
|
166
|
+
out[8] = a[8];
|
|
167
|
+
out[9] = a[9];
|
|
168
|
+
out[10] = a[10];
|
|
169
|
+
out[11] = a[11];
|
|
170
|
+
out[12] = a[12];
|
|
171
|
+
out[13] = a[13];
|
|
172
|
+
out[14] = a[14];
|
|
173
|
+
out[15] = a[15];
|
|
174
|
+
}
|
|
175
|
+
out[0] = a00 * c + a10 * s;
|
|
176
|
+
out[1] = a01 * c + a11 * s;
|
|
177
|
+
out[2] = a02 * c + a12 * s;
|
|
178
|
+
out[3] = a03 * c + a13 * s;
|
|
179
|
+
out[4] = a10 * c - a00 * s;
|
|
180
|
+
out[5] = a11 * c - a01 * s;
|
|
181
|
+
out[6] = a12 * c - a02 * s;
|
|
182
|
+
out[7] = a13 * c - a03 * s;
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
/** Orthographic projection (WebGPU NDC: depth 0..1) */
|
|
186
|
+
export function ortho(out, left, right, bottom, top, near, far) {
|
|
187
|
+
const lr = 1 / (left - right);
|
|
188
|
+
const bt = 1 / (bottom - top);
|
|
189
|
+
const nf = 1 / (near - far);
|
|
190
|
+
out[0] = -2 * lr;
|
|
191
|
+
out[1] = 0;
|
|
192
|
+
out[2] = 0;
|
|
193
|
+
out[3] = 0;
|
|
194
|
+
out[4] = 0;
|
|
195
|
+
out[5] = -2 * bt;
|
|
196
|
+
out[6] = 0;
|
|
197
|
+
out[7] = 0;
|
|
198
|
+
out[8] = 0;
|
|
199
|
+
out[9] = 0;
|
|
200
|
+
out[10] = nf;
|
|
201
|
+
out[11] = 0;
|
|
202
|
+
out[12] = (left + right) * lr;
|
|
203
|
+
out[13] = (top + bottom) * bt;
|
|
204
|
+
out[14] = near * nf;
|
|
205
|
+
out[15] = 1;
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
export function perspective(out, fovY, aspect, near, far) {
|
|
209
|
+
const f = 1.0 / Math.tan(fovY / 2);
|
|
210
|
+
out[0] = f / aspect;
|
|
211
|
+
out[1] = 0;
|
|
212
|
+
out[2] = 0;
|
|
213
|
+
out[3] = 0;
|
|
214
|
+
out[4] = 0;
|
|
215
|
+
out[5] = f;
|
|
216
|
+
out[6] = 0;
|
|
217
|
+
out[7] = 0;
|
|
218
|
+
out[8] = 0;
|
|
219
|
+
out[9] = 0;
|
|
220
|
+
out[11] = -1;
|
|
221
|
+
out[12] = 0;
|
|
222
|
+
out[13] = 0;
|
|
223
|
+
out[15] = 0;
|
|
224
|
+
if (far !== Infinity) {
|
|
225
|
+
const rangeInv = 1 / (near - far);
|
|
226
|
+
out[10] = far * rangeInv;
|
|
227
|
+
out[14] = far * near * rangeInv;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
out[10] = -1;
|
|
231
|
+
out[14] = -near;
|
|
232
|
+
}
|
|
233
|
+
return out;
|
|
234
|
+
}
|
|
235
|
+
export function lookAt(out, eye, center, up) {
|
|
236
|
+
const eyeX = eye[0], eyeY = eye[1], eyeZ = eye[2];
|
|
237
|
+
const centerX = center[0], centerY = center[1], centerZ = center[2];
|
|
238
|
+
const upX = up[0], upY = up[1], upZ = up[2];
|
|
239
|
+
let fX = centerX - eyeX;
|
|
240
|
+
let fY = centerY - eyeY;
|
|
241
|
+
let fZ = centerZ - eyeZ;
|
|
242
|
+
let len = Math.sqrt(fX * fX + fY * fY + fZ * fZ);
|
|
243
|
+
if (len < 1e-8)
|
|
244
|
+
return identity(out);
|
|
245
|
+
len = 1 / len;
|
|
246
|
+
fX *= len;
|
|
247
|
+
fY *= len;
|
|
248
|
+
fZ *= len;
|
|
249
|
+
let sX = fY * upZ - fZ * upY;
|
|
250
|
+
let sY = fZ * upX - fX * upZ;
|
|
251
|
+
let sZ = fX * upY - fY * upX;
|
|
252
|
+
len = Math.sqrt(sX * sX + sY * sY + sZ * sZ);
|
|
253
|
+
if (len < 1e-8)
|
|
254
|
+
return identity(out);
|
|
255
|
+
len = 1 / len;
|
|
256
|
+
sX *= len;
|
|
257
|
+
sY *= len;
|
|
258
|
+
sZ *= len;
|
|
259
|
+
const uX = sY * fZ - sZ * fY;
|
|
260
|
+
const uY = sZ * fX - sX * fZ;
|
|
261
|
+
const uZ = sX * fY - sY * fX;
|
|
262
|
+
out[0] = sX;
|
|
263
|
+
out[1] = uX;
|
|
264
|
+
out[2] = -fX;
|
|
265
|
+
out[3] = 0;
|
|
266
|
+
out[4] = sY;
|
|
267
|
+
out[5] = uY;
|
|
268
|
+
out[6] = -fY;
|
|
269
|
+
out[7] = 0;
|
|
270
|
+
out[8] = sZ;
|
|
271
|
+
out[9] = uZ;
|
|
272
|
+
out[10] = -fZ;
|
|
273
|
+
out[11] = 0;
|
|
274
|
+
out[12] = -(sX * eyeX + sY * eyeY + sZ * eyeZ);
|
|
275
|
+
out[13] = -(uX * eyeX + uY * eyeY + uZ * eyeZ);
|
|
276
|
+
out[14] = fX * eyeX + fY * eyeY + fZ * eyeZ;
|
|
277
|
+
out[15] = 1;
|
|
278
|
+
return out;
|
|
279
|
+
}
|
|
280
|
+
export function invert(out, a) {
|
|
281
|
+
const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
|
|
282
|
+
const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
|
|
283
|
+
const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
|
|
284
|
+
const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
|
|
285
|
+
const b00 = a00 * a11 - a01 * a10;
|
|
286
|
+
const b01 = a00 * a12 - a02 * a10;
|
|
287
|
+
const b02 = a00 * a13 - a03 * a10;
|
|
288
|
+
const b03 = a01 * a12 - a02 * a11;
|
|
289
|
+
const b04 = a01 * a13 - a03 * a11;
|
|
290
|
+
const b05 = a02 * a13 - a03 * a12;
|
|
291
|
+
const b06 = a20 * a31 - a21 * a30;
|
|
292
|
+
const b07 = a20 * a32 - a22 * a30;
|
|
293
|
+
const b08 = a20 * a33 - a23 * a30;
|
|
294
|
+
const b09 = a21 * a32 - a22 * a31;
|
|
295
|
+
const b10 = a21 * a33 - a23 * a31;
|
|
296
|
+
const b11 = a22 * a33 - a23 * a32;
|
|
297
|
+
let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
|
298
|
+
if (!det)
|
|
299
|
+
return null;
|
|
300
|
+
det = 1.0 / det;
|
|
301
|
+
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
|
302
|
+
out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
|
303
|
+
out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
|
304
|
+
out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
|
|
305
|
+
out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
|
306
|
+
out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
|
307
|
+
out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
|
308
|
+
out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
|
|
309
|
+
out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
|
310
|
+
out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
|
311
|
+
out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
|
312
|
+
out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
|
|
313
|
+
out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
|
|
314
|
+
out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
|
|
315
|
+
out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
|
|
316
|
+
out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
|
|
317
|
+
return out;
|
|
318
|
+
}
|
|
319
|
+
export function transpose(out, a) {
|
|
320
|
+
if (out === a) {
|
|
321
|
+
const a01 = a[1], a02 = a[2], a03 = a[3];
|
|
322
|
+
const a12 = a[6], a13 = a[7];
|
|
323
|
+
const a23 = a[11];
|
|
324
|
+
out[1] = a[4];
|
|
325
|
+
out[2] = a[8];
|
|
326
|
+
out[3] = a[12];
|
|
327
|
+
out[4] = a01;
|
|
328
|
+
out[6] = a[9];
|
|
329
|
+
out[7] = a[13];
|
|
330
|
+
out[8] = a02;
|
|
331
|
+
out[9] = a12;
|
|
332
|
+
out[11] = a[14];
|
|
333
|
+
out[12] = a03;
|
|
334
|
+
out[13] = a13;
|
|
335
|
+
out[14] = a23;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
out[0] = a[0];
|
|
339
|
+
out[1] = a[4];
|
|
340
|
+
out[2] = a[8];
|
|
341
|
+
out[3] = a[12];
|
|
342
|
+
out[4] = a[1];
|
|
343
|
+
out[5] = a[5];
|
|
344
|
+
out[6] = a[9];
|
|
345
|
+
out[7] = a[13];
|
|
346
|
+
out[8] = a[2];
|
|
347
|
+
out[9] = a[6];
|
|
348
|
+
out[10] = a[10];
|
|
349
|
+
out[11] = a[14];
|
|
350
|
+
out[12] = a[3];
|
|
351
|
+
out[13] = a[7];
|
|
352
|
+
out[14] = a[11];
|
|
353
|
+
out[15] = a[15];
|
|
354
|
+
}
|
|
355
|
+
return out;
|
|
356
|
+
}
|
|
357
|
+
export function fromRotationTranslationScale(out, q, v, s) {
|
|
358
|
+
const x = q[0], y = q[1], z = q[2], w = q[3];
|
|
359
|
+
const x2 = x + x, y2 = y + y, z2 = z + z;
|
|
360
|
+
const xx = x * x2, xy = x * y2, xz = x * z2;
|
|
361
|
+
const yy = y * y2, yz = y * z2, zz = z * z2;
|
|
362
|
+
const wx = w * x2, wy = w * y2, wz = w * z2;
|
|
363
|
+
const sx = s[0], sy = s[1], sz = s[2];
|
|
364
|
+
out[0] = (1 - (yy + zz)) * sx;
|
|
365
|
+
out[1] = (xy + wz) * sx;
|
|
366
|
+
out[2] = (xz - wy) * sx;
|
|
367
|
+
out[3] = 0;
|
|
368
|
+
out[4] = (xy - wz) * sy;
|
|
369
|
+
out[5] = (1 - (xx + zz)) * sy;
|
|
370
|
+
out[6] = (yz + wx) * sy;
|
|
371
|
+
out[7] = 0;
|
|
372
|
+
out[8] = (xz + wy) * sz;
|
|
373
|
+
out[9] = (yz - wx) * sz;
|
|
374
|
+
out[10] = (1 - (xx + yy)) * sz;
|
|
375
|
+
out[11] = 0;
|
|
376
|
+
out[12] = v[0];
|
|
377
|
+
out[13] = v[1];
|
|
378
|
+
out[14] = v[2];
|
|
379
|
+
out[15] = 1;
|
|
380
|
+
return out;
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=mat4.js.map
|
package/dist/mat4.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mat4.js","sourceRoot":"","sources":["../src/mat4.ts"],"names":[],"mappings":"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G,GAAG,CAAC;IAChF,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAEhB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;I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"}
|
package/dist/noise.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple 2D value noise โ no dependencies.
|
|
3
|
+
* Uses a hash-based pseudo-random lattice with smooth interpolation.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 2D value noise at (x, z). Returns a value in approximately [-1, 1].
|
|
7
|
+
* @param x World X coordinate (pre-scaled by caller)
|
|
8
|
+
* @param z World Z coordinate (pre-scaled by caller)
|
|
9
|
+
*/
|
|
10
|
+
export declare function valueNoise2D(x: number, z: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Fractal Brownian Motion (fBm) using value noise.
|
|
13
|
+
* Stacks multiple octaves for natural-looking terrain.
|
|
14
|
+
*/
|
|
15
|
+
export declare function fbm(x: number, z: number, octaves?: number, lacunarity?: number, persistence?: number): number;
|
|
16
|
+
/**
|
|
17
|
+
* 3D Perlin noise. Returns a value in approximately [-1, 1].
|
|
18
|
+
*/
|
|
19
|
+
export declare function perlinNoise3D(x: number, y: number, z: number): number;
|
|
20
|
+
/**
|
|
21
|
+
* Fractal Brownian Motion using 3D Perlin noise.
|
|
22
|
+
*/
|
|
23
|
+
export declare function fbm3D(x: number, y: number, z: number, octaves?: number, lacunarity?: number, persistence?: number): number;
|
|
24
|
+
//# sourceMappingURL=noise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAezD;AAED;;;GAGG;AACH,wBAAgB,GAAG,CACjB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,OAAO,SAAI,EAAE,UAAU,SAAI,EAAE,WAAW,SAAM,GAC7C,MAAM,CAcR;AAgDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmCrE;AAED;;GAEG;AACH,wBAAgB,KAAK,CACnB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAC/B,OAAO,SAAI,EAAE,UAAU,SAAI,EAAE,WAAW,SAAM,GAC7C,MAAM,CAcR"}
|