@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/dist/noise.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple 2D value noise — no dependencies.
|
|
3
|
+
* Uses a hash-based pseudo-random lattice with smooth interpolation.
|
|
4
|
+
*/
|
|
5
|
+
/** Deterministic hash for integer coordinates → [0, 1) */
|
|
6
|
+
function hash(ix, iz) {
|
|
7
|
+
// Large primes for mixing
|
|
8
|
+
let h = (ix * 374761393 + iz * 668265263 + 1013904223) | 0;
|
|
9
|
+
h = Math.imul(h ^ (h >>> 13), 1274126177);
|
|
10
|
+
h = h ^ (h >>> 16);
|
|
11
|
+
return (h & 0x7FFFFFFF) / 0x7FFFFFFF;
|
|
12
|
+
}
|
|
13
|
+
/** Smoothstep (Hermite) interpolation */
|
|
14
|
+
function smoothstep(t) {
|
|
15
|
+
return t * t * (3 - 2 * t);
|
|
16
|
+
}
|
|
17
|
+
/** Lerp */
|
|
18
|
+
function lerp(a, b, t) {
|
|
19
|
+
return a + (b - a) * t;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 2D value noise at (x, z). Returns a value in approximately [-1, 1].
|
|
23
|
+
* @param x World X coordinate (pre-scaled by caller)
|
|
24
|
+
* @param z World Z coordinate (pre-scaled by caller)
|
|
25
|
+
*/
|
|
26
|
+
export function valueNoise2D(x, z) {
|
|
27
|
+
const ix = Math.floor(x);
|
|
28
|
+
const iz = Math.floor(z);
|
|
29
|
+
const fx = smoothstep(x - ix);
|
|
30
|
+
const fz = smoothstep(z - iz);
|
|
31
|
+
const v00 = hash(ix, iz);
|
|
32
|
+
const v10 = hash(ix + 1, iz);
|
|
33
|
+
const v01 = hash(ix, iz + 1);
|
|
34
|
+
const v11 = hash(ix + 1, iz + 1);
|
|
35
|
+
const top = lerp(v00, v10, fx);
|
|
36
|
+
const bot = lerp(v01, v11, fx);
|
|
37
|
+
// Map from [0,1] to [-1,1]
|
|
38
|
+
return lerp(top, bot, fz) * 2 - 1;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Fractal Brownian Motion (fBm) using value noise.
|
|
42
|
+
* Stacks multiple octaves for natural-looking terrain.
|
|
43
|
+
*/
|
|
44
|
+
export function fbm(x, z, octaves = 4, lacunarity = 2, persistence = 0.5) {
|
|
45
|
+
let value = 0;
|
|
46
|
+
let amplitude = 1;
|
|
47
|
+
let frequency = 1;
|
|
48
|
+
let maxAmp = 0;
|
|
49
|
+
for (let i = 0; i < octaves; i++) {
|
|
50
|
+
value += valueNoise2D(x * frequency, z * frequency) * amplitude;
|
|
51
|
+
maxAmp += amplitude;
|
|
52
|
+
amplitude *= persistence;
|
|
53
|
+
frequency *= lacunarity;
|
|
54
|
+
}
|
|
55
|
+
return value / maxAmp;
|
|
56
|
+
}
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// 3D Perlin noise (improved, gradient-lattice)
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
/** 12 gradient vectors — edges of a cube (Perlin standard). */
|
|
61
|
+
const GRAD3 = [
|
|
62
|
+
1, 1, 0, -1, 1, 0, 1, -1, 0, -1, -1, 0,
|
|
63
|
+
1, 0, 1, -1, 0, 1, 1, 0, -1, -1, 0, -1,
|
|
64
|
+
0, 1, 1, 0, -1, 1, 0, 1, -1, 0, -1, -1,
|
|
65
|
+
];
|
|
66
|
+
/** Permutation table (256 entries, doubled to avoid modulo). */
|
|
67
|
+
const PERM = new Uint8Array(512);
|
|
68
|
+
{
|
|
69
|
+
const p = [
|
|
70
|
+
151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225,
|
|
71
|
+
140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148,
|
|
72
|
+
247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32,
|
|
73
|
+
57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175,
|
|
74
|
+
74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122,
|
|
75
|
+
60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54,
|
|
76
|
+
65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169,
|
|
77
|
+
200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64,
|
|
78
|
+
52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212,
|
|
79
|
+
207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213,
|
|
80
|
+
119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,
|
|
81
|
+
129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104,
|
|
82
|
+
218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241,
|
|
83
|
+
81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157,
|
|
84
|
+
184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93,
|
|
85
|
+
222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180,
|
|
86
|
+
];
|
|
87
|
+
for (let i = 0; i < 256; i++)
|
|
88
|
+
PERM[i] = PERM[i + 256] = p[i];
|
|
89
|
+
}
|
|
90
|
+
/** Improved Perlin fade: 6t^5 - 15t^4 + 10t^3 */
|
|
91
|
+
function fade(t) {
|
|
92
|
+
return t * t * t * (t * (t * 6 - 15) + 10);
|
|
93
|
+
}
|
|
94
|
+
/** Dot product with one of the 12 gradient vectors. */
|
|
95
|
+
function grad3dot(hash, x, y, z) {
|
|
96
|
+
const idx = (hash % 12) * 3;
|
|
97
|
+
return GRAD3[idx] * x + GRAD3[idx + 1] * y + GRAD3[idx + 2] * z;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 3D Perlin noise. Returns a value in approximately [-1, 1].
|
|
101
|
+
*/
|
|
102
|
+
export function perlinNoise3D(x, y, z) {
|
|
103
|
+
const X = Math.floor(x) & 255;
|
|
104
|
+
const Y = Math.floor(y) & 255;
|
|
105
|
+
const Z = Math.floor(z) & 255;
|
|
106
|
+
const xf = x - Math.floor(x);
|
|
107
|
+
const yf = y - Math.floor(y);
|
|
108
|
+
const zf = z - Math.floor(z);
|
|
109
|
+
const u = fade(xf);
|
|
110
|
+
const v = fade(yf);
|
|
111
|
+
const w = fade(zf);
|
|
112
|
+
// Hash 8 corners
|
|
113
|
+
const A = PERM[X] + Y;
|
|
114
|
+
const AA = PERM[A] + Z;
|
|
115
|
+
const AB = PERM[A + 1] + Z;
|
|
116
|
+
const B = PERM[X + 1] + Y;
|
|
117
|
+
const BA = PERM[B] + Z;
|
|
118
|
+
const BB = PERM[B + 1] + Z;
|
|
119
|
+
// Gradient dots + trilinear interpolation
|
|
120
|
+
return lerp(lerp(lerp(grad3dot(PERM[AA], xf, yf, zf), grad3dot(PERM[BA], xf - 1, yf, zf), u), lerp(grad3dot(PERM[AB], xf, yf - 1, zf), grad3dot(PERM[BB], xf - 1, yf - 1, zf), u), v), lerp(lerp(grad3dot(PERM[AA + 1], xf, yf, zf - 1), grad3dot(PERM[BA + 1], xf - 1, yf, zf - 1), u), lerp(grad3dot(PERM[AB + 1], xf, yf - 1, zf - 1), grad3dot(PERM[BB + 1], xf - 1, yf - 1, zf - 1), u), v), w);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Fractal Brownian Motion using 3D Perlin noise.
|
|
124
|
+
*/
|
|
125
|
+
export function fbm3D(x, y, z, octaves = 4, lacunarity = 2, persistence = 0.5) {
|
|
126
|
+
let value = 0;
|
|
127
|
+
let amplitude = 1;
|
|
128
|
+
let frequency = 1;
|
|
129
|
+
let maxAmp = 0;
|
|
130
|
+
for (let i = 0; i < octaves; i++) {
|
|
131
|
+
value += perlinNoise3D(x * frequency, y * frequency, z * frequency) * amplitude;
|
|
132
|
+
maxAmp += amplitude;
|
|
133
|
+
amplitude *= persistence;
|
|
134
|
+
frequency *= lacunarity;
|
|
135
|
+
}
|
|
136
|
+
return value / maxAmp;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=noise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise.js","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"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,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;QACpE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1E,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;QACxE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QACvE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QACvE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QACzE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QAC3E,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QACzE,GAAG,EAAE,EAAE,EAAE,GAAG,E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"}
|
package/dist/quat.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Vec3 } from './vec3.js';
|
|
2
|
+
import type { Mat4 } from './mat4.js';
|
|
3
|
+
/** A Quat is a Float32Array of length 4: [x, y, z, w] */
|
|
4
|
+
export type Quat = Float32Array;
|
|
5
|
+
export declare function create(): Quat;
|
|
6
|
+
export declare function identity(out: Quat): Quat;
|
|
7
|
+
export declare function fromAxisAngle(out: Quat, axis: Vec3, rad: number): Quat;
|
|
8
|
+
export declare function fromEuler(out: Quat, x: number, y: number, z: number): Quat;
|
|
9
|
+
export declare function multiply(out: Quat, a: Quat, b: Quat): Quat;
|
|
10
|
+
export declare function normalize(out: Quat, a: Quat): Quat;
|
|
11
|
+
export declare function slerp(out: Quat, a: Quat, b: Quat, t: number): Quat;
|
|
12
|
+
/**
|
|
13
|
+
* Extract Euler angles (XYZ order) from a quaternion.
|
|
14
|
+
* Returns [x, y, z] in radians.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toEuler(out: Vec3, q: Quat): Vec3;
|
|
17
|
+
export declare function invert(out: Quat, a: Quat): Quat;
|
|
18
|
+
export declare function copy(out: Quat, a: Quat): Quat;
|
|
19
|
+
/**
|
|
20
|
+
* Extract rotation quaternion from a Mat4.
|
|
21
|
+
* Handles non-uniform scale by normalizing column vectors.
|
|
22
|
+
*/
|
|
23
|
+
export declare function fromMat4(out: Quat, m: Mat4): Quat;
|
|
24
|
+
/**
|
|
25
|
+
* Rotate a quaternion around the X axis by the given angle (radians).
|
|
26
|
+
* Equivalent to multiply(out, fromAxisAngle([1,0,0], rad), a) but without temp allocation.
|
|
27
|
+
*/
|
|
28
|
+
export declare function rotateX(out: Quat, a: Quat, rad: number): Quat;
|
|
29
|
+
/**
|
|
30
|
+
* Rotate a quaternion around the Y axis by the given angle (radians).
|
|
31
|
+
* Equivalent to multiply(out, fromAxisAngle([0,1,0], rad), a) but without temp allocation.
|
|
32
|
+
*/
|
|
33
|
+
export declare function rotateY(out: Quat, a: Quat, rad: number): Quat;
|
|
34
|
+
/**
|
|
35
|
+
* Rotate a quaternion around the Z axis by the given angle (radians).
|
|
36
|
+
* Equivalent to multiply(out, fromAxisAngle([0,0,1], rad), a) but without temp allocation.
|
|
37
|
+
*/
|
|
38
|
+
export declare function rotateZ(out: Quat, a: Quat, rad: number): Quat;
|
|
39
|
+
export declare function toMat4(out: Mat4, q: Quat): Mat4;
|
|
40
|
+
//# sourceMappingURL=quat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quat.d.ts","sourceRoot":"","sources":["../src/quat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,yDAAyD;AACzD,MAAM,MAAM,IAAI,GAAG,YAAY,CAAC;AAEhC,wBAAgB,MAAM,IAAI,IAAI,CAI7B;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAMxC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQtE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAa1E;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAQ1D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAWlD;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAkClE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAoBhD;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAS/C;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAM7C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CA4CjD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAU7D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAU7D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAU7D;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAwB/C"}
|
package/dist/quat.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
export function create() {
|
|
2
|
+
const out = new Float32Array(4);
|
|
3
|
+
out[3] = 1;
|
|
4
|
+
return out;
|
|
5
|
+
}
|
|
6
|
+
export function identity(out) {
|
|
7
|
+
out[0] = 0;
|
|
8
|
+
out[1] = 0;
|
|
9
|
+
out[2] = 0;
|
|
10
|
+
out[3] = 1;
|
|
11
|
+
return out;
|
|
12
|
+
}
|
|
13
|
+
export function fromAxisAngle(out, axis, rad) {
|
|
14
|
+
const half = rad * 0.5;
|
|
15
|
+
const s = Math.sin(half);
|
|
16
|
+
out[0] = axis[0] * s;
|
|
17
|
+
out[1] = axis[1] * s;
|
|
18
|
+
out[2] = axis[2] * s;
|
|
19
|
+
out[3] = Math.cos(half);
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
export function fromEuler(out, x, y, z) {
|
|
23
|
+
const halfX = x * 0.5;
|
|
24
|
+
const halfY = y * 0.5;
|
|
25
|
+
const halfZ = z * 0.5;
|
|
26
|
+
const sx = Math.sin(halfX), cx = Math.cos(halfX);
|
|
27
|
+
const sy = Math.sin(halfY), cy = Math.cos(halfY);
|
|
28
|
+
const sz = Math.sin(halfZ), cz = Math.cos(halfZ);
|
|
29
|
+
out[0] = sx * cy * cz - cx * sy * sz;
|
|
30
|
+
out[1] = cx * sy * cz + sx * cy * sz;
|
|
31
|
+
out[2] = cx * cy * sz - sx * sy * cz;
|
|
32
|
+
out[3] = cx * cy * cz + sx * sy * sz;
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
export function multiply(out, a, b) {
|
|
36
|
+
const ax = a[0], ay = a[1], az = a[2], aw = a[3];
|
|
37
|
+
const bx = b[0], by = b[1], bz = b[2], bw = b[3];
|
|
38
|
+
out[0] = ax * bw + aw * bx + ay * bz - az * by;
|
|
39
|
+
out[1] = ay * bw + aw * by + az * bx - ax * bz;
|
|
40
|
+
out[2] = az * bw + aw * bz + ax * by - ay * bx;
|
|
41
|
+
out[3] = aw * bw - ax * bx - ay * by - az * bz;
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
export function normalize(out, a) {
|
|
45
|
+
const x = a[0], y = a[1], z = a[2], w = a[3];
|
|
46
|
+
let len = x * x + y * y + z * z + w * w;
|
|
47
|
+
if (len > 0) {
|
|
48
|
+
len = 1 / Math.sqrt(len);
|
|
49
|
+
out[0] = x * len;
|
|
50
|
+
out[1] = y * len;
|
|
51
|
+
out[2] = z * len;
|
|
52
|
+
out[3] = w * len;
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
export function slerp(out, a, b, t) {
|
|
57
|
+
const ax = a[0], ay = a[1], az = a[2], aw = a[3];
|
|
58
|
+
let bx = b[0], by = b[1], bz = b[2], bw = b[3];
|
|
59
|
+
let cosom = ax * bx + ay * by + az * bz + aw * bw;
|
|
60
|
+
if (cosom < 0) {
|
|
61
|
+
cosom = -cosom;
|
|
62
|
+
bx = -bx;
|
|
63
|
+
by = -by;
|
|
64
|
+
bz = -bz;
|
|
65
|
+
bw = -bw;
|
|
66
|
+
}
|
|
67
|
+
// Clamp to [0, 1] to avoid NaN from floating-point overshoot in Math.acos
|
|
68
|
+
if (cosom > 1)
|
|
69
|
+
cosom = 1;
|
|
70
|
+
let scale0;
|
|
71
|
+
let scale1;
|
|
72
|
+
if (1.0 - cosom > 1e-6) {
|
|
73
|
+
const omega = Math.acos(cosom);
|
|
74
|
+
const sinom = Math.sin(omega);
|
|
75
|
+
if (sinom > 1e-6) {
|
|
76
|
+
scale0 = Math.sin((1.0 - t) * omega) / sinom;
|
|
77
|
+
scale1 = Math.sin(t * omega) / sinom;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
scale0 = 1.0 - t;
|
|
81
|
+
scale1 = t;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
scale0 = 1.0 - t;
|
|
86
|
+
scale1 = t;
|
|
87
|
+
}
|
|
88
|
+
out[0] = scale0 * ax + scale1 * bx;
|
|
89
|
+
out[1] = scale0 * ay + scale1 * by;
|
|
90
|
+
out[2] = scale0 * az + scale1 * bz;
|
|
91
|
+
out[3] = scale0 * aw + scale1 * bw;
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract Euler angles (XYZ order) from a quaternion.
|
|
96
|
+
* Returns [x, y, z] in radians.
|
|
97
|
+
*/
|
|
98
|
+
export function toEuler(out, q) {
|
|
99
|
+
const x = q[0], y = q[1], z = q[2], w = q[3];
|
|
100
|
+
// Roll (x-axis)
|
|
101
|
+
const sinr_cosp = 2 * (w * x + y * z);
|
|
102
|
+
const cosr_cosp = 1 - 2 * (x * x + y * y);
|
|
103
|
+
out[0] = Math.atan2(sinr_cosp, cosr_cosp);
|
|
104
|
+
// Pitch (y-axis) — clamp to avoid NaN from asin
|
|
105
|
+
const sinp = 2 * (w * y - z * x);
|
|
106
|
+
out[1] = Math.abs(sinp) >= 1
|
|
107
|
+
? Math.sign(sinp) * (Math.PI / 2)
|
|
108
|
+
: Math.asin(sinp);
|
|
109
|
+
// Yaw (z-axis)
|
|
110
|
+
const siny_cosp = 2 * (w * z + x * y);
|
|
111
|
+
const cosy_cosp = 1 - 2 * (y * y + z * z);
|
|
112
|
+
out[2] = Math.atan2(siny_cosp, cosy_cosp);
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
export function invert(out, a) {
|
|
116
|
+
const x = a[0], y = a[1], z = a[2], w = a[3];
|
|
117
|
+
const dot = x * x + y * y + z * z + w * w;
|
|
118
|
+
const invDot = dot > 0 ? 1.0 / dot : 0;
|
|
119
|
+
out[0] = -x * invDot;
|
|
120
|
+
out[1] = -y * invDot;
|
|
121
|
+
out[2] = -z * invDot;
|
|
122
|
+
out[3] = w * invDot;
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
export function copy(out, a) {
|
|
126
|
+
out[0] = a[0];
|
|
127
|
+
out[1] = a[1];
|
|
128
|
+
out[2] = a[2];
|
|
129
|
+
out[3] = a[3];
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Extract rotation quaternion from a Mat4.
|
|
134
|
+
* Handles non-uniform scale by normalizing column vectors.
|
|
135
|
+
*/
|
|
136
|
+
export function fromMat4(out, m) {
|
|
137
|
+
// Column scale lengths
|
|
138
|
+
const sx = Math.sqrt(m[0] * m[0] + m[1] * m[1] + m[2] * m[2]);
|
|
139
|
+
const sy = Math.sqrt(m[4] * m[4] + m[5] * m[5] + m[6] * m[6]);
|
|
140
|
+
const sz = Math.sqrt(m[8] * m[8] + m[9] * m[9] + m[10] * m[10]);
|
|
141
|
+
const isx = sx > 1e-8 ? 1 / sx : 0;
|
|
142
|
+
const isy = sy > 1e-8 ? 1 / sy : 0;
|
|
143
|
+
const isz = sz > 1e-8 ? 1 / sz : 0;
|
|
144
|
+
// Normalized rotation matrix elements
|
|
145
|
+
const m00 = m[0] * isx, m01 = m[1] * isx, m02 = m[2] * isx;
|
|
146
|
+
const m10 = m[4] * isy, m11 = m[5] * isy, m12 = m[6] * isy;
|
|
147
|
+
const m20 = m[8] * isz, m21 = m[9] * isz, m22 = m[10] * isz;
|
|
148
|
+
// Shepperd's method
|
|
149
|
+
const trace = m00 + m11 + m22;
|
|
150
|
+
if (trace > 0) {
|
|
151
|
+
const s = 0.5 / Math.sqrt(trace + 1);
|
|
152
|
+
out[3] = 0.25 / s;
|
|
153
|
+
out[0] = (m12 - m21) * s;
|
|
154
|
+
out[1] = (m20 - m02) * s;
|
|
155
|
+
out[2] = (m01 - m10) * s;
|
|
156
|
+
}
|
|
157
|
+
else if (m00 > m11 && m00 > m22) {
|
|
158
|
+
const s = 2 * Math.sqrt(1 + m00 - m11 - m22);
|
|
159
|
+
out[3] = (m12 - m21) / s;
|
|
160
|
+
out[0] = 0.25 * s;
|
|
161
|
+
out[1] = (m01 + m10) / s;
|
|
162
|
+
out[2] = (m20 + m02) / s;
|
|
163
|
+
}
|
|
164
|
+
else if (m11 > m22) {
|
|
165
|
+
const s = 2 * Math.sqrt(1 + m11 - m00 - m22);
|
|
166
|
+
out[3] = (m20 - m02) / s;
|
|
167
|
+
out[0] = (m01 + m10) / s;
|
|
168
|
+
out[1] = 0.25 * s;
|
|
169
|
+
out[2] = (m12 + m21) / s;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const s = 2 * Math.sqrt(1 + m22 - m00 - m11);
|
|
173
|
+
out[3] = (m01 - m10) / s;
|
|
174
|
+
out[0] = (m20 + m02) / s;
|
|
175
|
+
out[1] = (m12 + m21) / s;
|
|
176
|
+
out[2] = 0.25 * s;
|
|
177
|
+
}
|
|
178
|
+
return out;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Rotate a quaternion around the X axis by the given angle (radians).
|
|
182
|
+
* Equivalent to multiply(out, fromAxisAngle([1,0,0], rad), a) but without temp allocation.
|
|
183
|
+
*/
|
|
184
|
+
export function rotateX(out, a, rad) {
|
|
185
|
+
const half = rad * 0.5;
|
|
186
|
+
const bx = Math.sin(half);
|
|
187
|
+
const bw = Math.cos(half);
|
|
188
|
+
const ax = a[0], ay = a[1], az = a[2], aw = a[3];
|
|
189
|
+
out[0] = bx * aw + bw * ax;
|
|
190
|
+
out[1] = bw * ay - bx * az;
|
|
191
|
+
out[2] = bw * az + bx * ay;
|
|
192
|
+
out[3] = bw * aw - bx * ax;
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Rotate a quaternion around the Y axis by the given angle (radians).
|
|
197
|
+
* Equivalent to multiply(out, fromAxisAngle([0,1,0], rad), a) but without temp allocation.
|
|
198
|
+
*/
|
|
199
|
+
export function rotateY(out, a, rad) {
|
|
200
|
+
const half = rad * 0.5;
|
|
201
|
+
const by = Math.sin(half);
|
|
202
|
+
const bw = Math.cos(half);
|
|
203
|
+
const ax = a[0], ay = a[1], az = a[2], aw = a[3];
|
|
204
|
+
out[0] = bw * ax + by * az;
|
|
205
|
+
out[1] = by * aw + bw * ay;
|
|
206
|
+
out[2] = bw * az - by * ax;
|
|
207
|
+
out[3] = bw * aw - by * ay;
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Rotate a quaternion around the Z axis by the given angle (radians).
|
|
212
|
+
* Equivalent to multiply(out, fromAxisAngle([0,0,1], rad), a) but without temp allocation.
|
|
213
|
+
*/
|
|
214
|
+
export function rotateZ(out, a, rad) {
|
|
215
|
+
const half = rad * 0.5;
|
|
216
|
+
const bz = Math.sin(half);
|
|
217
|
+
const bw = Math.cos(half);
|
|
218
|
+
const ax = a[0], ay = a[1], az = a[2], aw = a[3];
|
|
219
|
+
out[0] = bw * ax - bz * ay;
|
|
220
|
+
out[1] = bw * ay + bz * ax;
|
|
221
|
+
out[2] = bz * aw + bw * az;
|
|
222
|
+
out[3] = bw * aw - bz * az;
|
|
223
|
+
return out;
|
|
224
|
+
}
|
|
225
|
+
export function toMat4(out, q) {
|
|
226
|
+
const x = q[0], y = q[1], z = q[2], w = q[3];
|
|
227
|
+
const x2 = x + x, y2 = y + y, z2 = z + z;
|
|
228
|
+
const xx = x * x2, xy = x * y2, xz = x * z2;
|
|
229
|
+
const yy = y * y2, yz = y * z2, zz = z * z2;
|
|
230
|
+
const wx = w * x2, wy = w * y2, wz = w * z2;
|
|
231
|
+
out[0] = 1 - (yy + zz);
|
|
232
|
+
out[1] = xy + wz;
|
|
233
|
+
out[2] = xz - wy;
|
|
234
|
+
out[3] = 0;
|
|
235
|
+
out[4] = xy - wz;
|
|
236
|
+
out[5] = 1 - (xx + zz);
|
|
237
|
+
out[6] = yz + wx;
|
|
238
|
+
out[7] = 0;
|
|
239
|
+
out[8] = xz + wy;
|
|
240
|
+
out[9] = yz - wx;
|
|
241
|
+
out[10] = 1 - (xx + yy);
|
|
242
|
+
out[11] = 0;
|
|
243
|
+
out[12] = 0;
|
|
244
|
+
out[13] = 0;
|
|
245
|
+
out[14] = 0;
|
|
246
|
+
out[15] = 1;
|
|
247
|
+
return out;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=quat.js.map
|
package/dist/quat.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quat.js","sourceRoot":"","sources":["../src/quat.ts"],"names":[],"mappings":"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"}
|
package/dist/ray.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Vec3 } from './vec3.js';
|
|
2
|
+
import type { Mat4 } from './mat4.js';
|
|
3
|
+
export interface Ray {
|
|
4
|
+
origin: Vec3;
|
|
5
|
+
direction: Vec3;
|
|
6
|
+
}
|
|
7
|
+
export declare function create(): Ray;
|
|
8
|
+
/**
|
|
9
|
+
* Build a ray from screen pixel coordinates using an inverse view-projection matrix.
|
|
10
|
+
* sx, sy are in pixels; vpW, vpH are viewport dimensions.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fromScreenCoords(out: Ray, sx: number, sy: number, vpW: number, vpH: number, invVP: Mat4): Ray;
|
|
13
|
+
/**
|
|
14
|
+
* Ray-sphere intersection. Returns t >= 0 if hit, -1 if miss.
|
|
15
|
+
*/
|
|
16
|
+
export declare function intersectSphere(ray: Ray, center: Vec3, radius: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* Ray-plane intersection. Plane defined as dot(normal, P) = d.
|
|
19
|
+
* Returns t >= 0 if hit, -1 if parallel or behind.
|
|
20
|
+
*/
|
|
21
|
+
export declare function intersectPlane(ray: Ray, normal: Vec3, d: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* Ray-triangle intersection using Möller–Trumbore algorithm.
|
|
24
|
+
* Returns t >= 0 if hit, -1 if miss.
|
|
25
|
+
*/
|
|
26
|
+
export declare function intersectTriangle(ray: Ray, v0: Vec3, v1: Vec3, v2: Vec3): number;
|
|
27
|
+
/**
|
|
28
|
+
* Compute point on ray at parameter t: out = origin + t * direction.
|
|
29
|
+
*/
|
|
30
|
+
export declare function pointOnRay(out: Vec3, ray: Ray, t: number): Vec3;
|
|
31
|
+
//# sourceMappingURL=ray.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ray.d.ts","sourceRoot":"","sources":["../src/ray.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,wBAAgB,MAAM,IAAI,GAAG,CAK5B;AAgBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,IAAI,GACV,GAAG,CAkCL;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,MAAM,GACb,MAAM,CAwBR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,IAAI,EACZ,CAAC,EAAE,MAAM,GACR,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,GACP,MAAM,CAgCR;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAK/D"}
|
package/dist/ray.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as V3 from './vec3.js';
|
|
2
|
+
export function create() {
|
|
3
|
+
return {
|
|
4
|
+
origin: new Float32Array(3),
|
|
5
|
+
direction: V3.fromValues(0, 0, -1),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
// Scratch vectors (pre-allocated, no heap alloc per call)
|
|
9
|
+
const _ndcNear = V3.create();
|
|
10
|
+
const _ndcFar = V3.create();
|
|
11
|
+
const _clipNear = new Float32Array(4);
|
|
12
|
+
const _clipFar = new Float32Array(4);
|
|
13
|
+
function transformMat4Vec4(out, v, m) {
|
|
14
|
+
const x = v[0], y = v[1], z = v[2], w = v[3];
|
|
15
|
+
out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;
|
|
16
|
+
out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;
|
|
17
|
+
out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;
|
|
18
|
+
out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Build a ray from screen pixel coordinates using an inverse view-projection matrix.
|
|
22
|
+
* sx, sy are in pixels; vpW, vpH are viewport dimensions.
|
|
23
|
+
*/
|
|
24
|
+
export function fromScreenCoords(out, sx, sy, vpW, vpH, invVP) {
|
|
25
|
+
// Pixel -> NDC [-1,1]
|
|
26
|
+
const ndcX = (sx / vpW) * 2 - 1;
|
|
27
|
+
const ndcY = 1 - (sy / vpH) * 2; // flip Y
|
|
28
|
+
// Near point in clip space (z = -1 for WebGPU NDC is 0, but we use -1..1 convention with invVP)
|
|
29
|
+
_clipNear[0] = ndcX;
|
|
30
|
+
_clipNear[1] = ndcY;
|
|
31
|
+
_clipNear[2] = 0; // WebGPU near plane = 0
|
|
32
|
+
_clipNear[3] = 1;
|
|
33
|
+
// Far point in clip space
|
|
34
|
+
_clipFar[0] = ndcX;
|
|
35
|
+
_clipFar[1] = ndcY;
|
|
36
|
+
_clipFar[2] = 1; // WebGPU far plane = 1
|
|
37
|
+
_clipFar[3] = 1;
|
|
38
|
+
// Unproject
|
|
39
|
+
transformMat4Vec4(_clipNear, _clipNear, invVP);
|
|
40
|
+
transformMat4Vec4(_clipFar, _clipFar, invVP);
|
|
41
|
+
// Perspective divide
|
|
42
|
+
const wNear = _clipNear[3];
|
|
43
|
+
V3.set(_ndcNear, _clipNear[0] / wNear, _clipNear[1] / wNear, _clipNear[2] / wNear);
|
|
44
|
+
const wFar = _clipFar[3];
|
|
45
|
+
V3.set(_ndcFar, _clipFar[0] / wFar, _clipFar[1] / wFar, _clipFar[2] / wFar);
|
|
46
|
+
// Origin = near point, direction = normalize(far - near)
|
|
47
|
+
V3.copy(out.origin, _ndcNear);
|
|
48
|
+
V3.sub(out.direction, _ndcFar, _ndcNear);
|
|
49
|
+
V3.normalize(out.direction, out.direction);
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Ray-sphere intersection. Returns t >= 0 if hit, -1 if miss.
|
|
54
|
+
*/
|
|
55
|
+
export function intersectSphere(ray, center, radius) {
|
|
56
|
+
const ocX = ray.origin[0] - center[0];
|
|
57
|
+
const ocY = ray.origin[1] - center[1];
|
|
58
|
+
const ocZ = ray.origin[2] - center[2];
|
|
59
|
+
const dX = ray.direction[0];
|
|
60
|
+
const dY = ray.direction[1];
|
|
61
|
+
const dZ = ray.direction[2];
|
|
62
|
+
const a = dX * dX + dY * dY + dZ * dZ;
|
|
63
|
+
const b = 2 * (ocX * dX + ocY * dY + ocZ * dZ);
|
|
64
|
+
const c = ocX * ocX + ocY * ocY + ocZ * ocZ - radius * radius;
|
|
65
|
+
const discriminant = b * b - 4 * a * c;
|
|
66
|
+
if (discriminant < 0)
|
|
67
|
+
return -1;
|
|
68
|
+
const sqrtD = Math.sqrt(discriminant);
|
|
69
|
+
const t1 = (-b - sqrtD) / (2 * a);
|
|
70
|
+
if (t1 >= 0)
|
|
71
|
+
return t1;
|
|
72
|
+
const t2 = (-b + sqrtD) / (2 * a);
|
|
73
|
+
if (t2 >= 0)
|
|
74
|
+
return t2;
|
|
75
|
+
return -1;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Ray-plane intersection. Plane defined as dot(normal, P) = d.
|
|
79
|
+
* Returns t >= 0 if hit, -1 if parallel or behind.
|
|
80
|
+
*/
|
|
81
|
+
export function intersectPlane(ray, normal, d) {
|
|
82
|
+
const denom = V3.dot(ray.direction, normal);
|
|
83
|
+
if (Math.abs(denom) < 1e-8)
|
|
84
|
+
return -1; // parallel
|
|
85
|
+
const t = (d - V3.dot(ray.origin, normal)) / denom;
|
|
86
|
+
return t >= 0 ? t : -1;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Ray-triangle intersection using Möller–Trumbore algorithm.
|
|
90
|
+
* Returns t >= 0 if hit, -1 if miss.
|
|
91
|
+
*/
|
|
92
|
+
export function intersectTriangle(ray, v0, v1, v2) {
|
|
93
|
+
const e1x = v1[0] - v0[0], e1y = v1[1] - v0[1], e1z = v1[2] - v0[2];
|
|
94
|
+
const e2x = v2[0] - v0[0], e2y = v2[1] - v0[1], e2z = v2[2] - v0[2];
|
|
95
|
+
const dx = ray.direction[0], dy = ray.direction[1], dz = ray.direction[2];
|
|
96
|
+
// h = d × e2
|
|
97
|
+
const hx = dy * e2z - dz * e2y;
|
|
98
|
+
const hy = dz * e2x - dx * e2z;
|
|
99
|
+
const hz = dx * e2y - dy * e2x;
|
|
100
|
+
const a = e1x * hx + e1y * hy + e1z * hz;
|
|
101
|
+
if (a > -1e-8 && a < 1e-8)
|
|
102
|
+
return -1; // parallel
|
|
103
|
+
const f = 1 / a;
|
|
104
|
+
const sx = ray.origin[0] - v0[0];
|
|
105
|
+
const sy = ray.origin[1] - v0[1];
|
|
106
|
+
const sz = ray.origin[2] - v0[2];
|
|
107
|
+
const u = f * (sx * hx + sy * hy + sz * hz);
|
|
108
|
+
if (u < 0 || u > 1)
|
|
109
|
+
return -1;
|
|
110
|
+
// q = s × e1
|
|
111
|
+
const qx = sy * e1z - sz * e1y;
|
|
112
|
+
const qy = sz * e1x - sx * e1z;
|
|
113
|
+
const qz = sx * e1y - sy * e1x;
|
|
114
|
+
const v = f * (dx * qx + dy * qy + dz * qz);
|
|
115
|
+
if (v < 0 || u + v > 1)
|
|
116
|
+
return -1;
|
|
117
|
+
const t = f * (e2x * qx + e2y * qy + e2z * qz);
|
|
118
|
+
return t >= 0 ? t : -1;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Compute point on ray at parameter t: out = origin + t * direction.
|
|
122
|
+
*/
|
|
123
|
+
export function pointOnRay(out, ray, t) {
|
|
124
|
+
out[0] = ray.origin[0] + t * ray.direction[0];
|
|
125
|
+
out[1] = ray.origin[1] + t * ray.direction[1];
|
|
126
|
+
out[2] = ray.origin[2] + t * ray.direction[2];
|
|
127
|
+
return out;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=ray.js.map
|
package/dist/ray.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ray.js","sourceRoot":"","sources":["../src/ray.ts"],"names":[],"mappings":"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"}
|