linearly 0.36.0 → 0.37.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.
Files changed (47) hide show
  1. package/lib/esm/mat2.d.ts +1 -1
  2. package/lib/esm/mat2.d.ts.map +1 -1
  3. package/lib/esm/mat2.js +3 -2
  4. package/lib/esm/mat2d.d.ts.map +1 -1
  5. package/lib/esm/mat2d.js +4 -5
  6. package/lib/esm/mat3.d.ts.map +1 -1
  7. package/lib/esm/mat3.js +16 -15
  8. package/lib/esm/mat4.d.ts.map +1 -1
  9. package/lib/esm/mat4.js +18 -17
  10. package/lib/esm/quat.js +3 -3
  11. package/lib/esm/scalar.d.ts +6 -35
  12. package/lib/esm/scalar.d.ts.map +1 -1
  13. package/lib/esm/scalar.js +11 -53
  14. package/package.json +9 -4
  15. package/lib/cjs/common.d.ts +0 -16
  16. package/lib/cjs/common.d.ts.map +0 -1
  17. package/lib/cjs/common.js +0 -70
  18. package/lib/cjs/index.d.ts +0 -10
  19. package/lib/cjs/index.d.ts.map +0 -1
  20. package/lib/cjs/index.js +0 -22
  21. package/lib/cjs/mat2.d.ts +0 -272
  22. package/lib/cjs/mat2.d.ts.map +0 -1
  23. package/lib/cjs/mat2.js +0 -473
  24. package/lib/cjs/mat2d.d.ts +0 -329
  25. package/lib/cjs/mat2d.d.ts.map +0 -1
  26. package/lib/cjs/mat2d.js +0 -641
  27. package/lib/cjs/mat3.d.ts +0 -295
  28. package/lib/cjs/mat3.d.ts.map +0 -1
  29. package/lib/cjs/mat3.js +0 -670
  30. package/lib/cjs/mat4.d.ts +0 -532
  31. package/lib/cjs/mat4.d.ts.map +0 -1
  32. package/lib/cjs/mat4.js +0 -1576
  33. package/lib/cjs/quat.d.ts +0 -334
  34. package/lib/cjs/quat.d.ts.map +0 -1
  35. package/lib/cjs/quat.js +0 -802
  36. package/lib/cjs/scalar.d.ts +0 -501
  37. package/lib/cjs/scalar.d.ts.map +0 -1
  38. package/lib/cjs/scalar.js +0 -728
  39. package/lib/cjs/vec2.d.ts +0 -664
  40. package/lib/cjs/vec2.d.ts.map +0 -1
  41. package/lib/cjs/vec2.js +0 -1247
  42. package/lib/cjs/vec3.d.ts +0 -660
  43. package/lib/cjs/vec3.d.ts.map +0 -1
  44. package/lib/cjs/vec3.js +0 -1329
  45. package/lib/cjs/vec4.d.ts +0 -552
  46. package/lib/cjs/vec4.d.ts.map +0 -1
  47. package/lib/cjs/vec4.js +0 -1200
package/lib/cjs/vec3.js DELETED
@@ -1,1329 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.vec3 = void 0;
37
- const Common = __importStar(require("./common"));
38
- const scalar_1 = require("./scalar");
39
- /**
40
- * Functions for {@link vec3}, a 3D vector.
41
- * @category Modules
42
- */
43
- var vec3;
44
- (function (vec3) {
45
- /**
46
- * Creates a new vector from given elements
47
- * @category Generators
48
- */
49
- function of(x, y, z) {
50
- if (y === undefined && z === undefined) {
51
- y = z = x;
52
- }
53
- if (y === undefined)
54
- y = 0;
55
- if (z === undefined)
56
- z = 0;
57
- return [x, y, z];
58
- }
59
- vec3.of = of;
60
- /**
61
- * Creates a mutable clone of given vec3
62
- * @category Generators
63
- */
64
- function clone(a) {
65
- return [...a];
66
- }
67
- vec3.clone = clone;
68
- /**
69
- * @category Constants
70
- */
71
- vec3.zero = Object.freeze([0, 0, 0]);
72
- /**
73
- * @category Constants
74
- */
75
- vec3.one = Object.freeze([1, 1, 1]);
76
- /**
77
- * An unit vector pointing towards positive X. Same as `[1, 0, 0]`
78
- * @category Constants
79
- */
80
- vec3.unitX = Object.freeze([1, 0, 0]);
81
- /**
82
- * An unit vector pointing towards positive Y. Same as `[0, 1, 0]`
83
- * @category Constants
84
- */
85
- vec3.unitY = Object.freeze([0, 1, 0]);
86
- /**
87
- * An unit vector pointing towards positive Z. Same as `[0, 0, 1]`
88
- * @category Constants
89
- */
90
- vec3.unitZ = Object.freeze([0, 0, 1]);
91
- /**
92
- * Adds given vec3's
93
- */
94
- function add(...vs) {
95
- let x = 0, y = 0, z = 0;
96
- for (const v of vs) {
97
- if (typeof v === 'number') {
98
- x += v;
99
- y += v;
100
- z += v;
101
- }
102
- else {
103
- x += v[0];
104
- y += v[1];
105
- z += v[2];
106
- }
107
- }
108
- return [x, y, z];
109
- }
110
- vec3.add = add;
111
- /**
112
- * Subtracts given vec3's. When the argument is a single vector, it negates it. Otherwise, it subtracts from left to right.
113
- *
114
- * @shorthands
115
- * - {@link sub}
116
- *
117
- */
118
- function subtract(...vs) {
119
- if (vs.length === 0) {
120
- return vec3.zero;
121
- }
122
- if (vs.length === 1) {
123
- const v = vs[0];
124
- if (typeof v === 'number')
125
- return [-v, -v, -v];
126
- return [-v[0], -v[1], -v[2]];
127
- }
128
- const first = vs[0];
129
- let x = typeof first === 'number' ? first : first[0];
130
- let y = typeof first === 'number' ? first : first[1];
131
- let z = typeof first === 'number' ? first : first[2];
132
- for (let i = 1; i < vs.length; i++) {
133
- const v = vs[i];
134
- if (typeof v === 'number') {
135
- x -= v;
136
- y -= v;
137
- z -= v;
138
- }
139
- else {
140
- x -= v[0];
141
- y -= v[1];
142
- z -= v[2];
143
- }
144
- }
145
- return [x, y, z];
146
- }
147
- vec3.subtract = subtract;
148
- /**
149
- * Alias for {@link subtract}
150
- * @category Shorthands
151
- */
152
- vec3.sub = subtract;
153
- /**
154
- * Subtracts a from b
155
- */
156
- function delta(a, b) {
157
- const ax = typeof a === 'number' ? a : a[0];
158
- const ay = typeof a === 'number' ? a : a[1];
159
- const az = typeof a === 'number' ? a : a[2];
160
- const bx = typeof b === 'number' ? b : b[0];
161
- const by = typeof b === 'number' ? b : b[1];
162
- const bz = typeof b === 'number' ? b : b[2];
163
- return [bx - ax, by - ay, bz - az];
164
- }
165
- vec3.delta = delta;
166
- /**
167
- * Multiplies given vec3's
168
- *
169
- * @shorthands
170
- * - {@link mul}
171
- */
172
- function multiply(...vs) {
173
- let x = 1, y = 1, z = 1;
174
- for (const v of vs) {
175
- if (typeof v === 'number') {
176
- x *= v;
177
- y *= v;
178
- z *= v;
179
- }
180
- else {
181
- x *= v[0];
182
- y *= v[1];
183
- z *= v[2];
184
- }
185
- }
186
- return [x, y, z];
187
- }
188
- vec3.multiply = multiply;
189
- /**
190
- * Alias for {@link multiply}
191
- * @category Shorthands
192
- */
193
- vec3.mul = multiply;
194
- /**
195
- * Divides given vec3's
196
- *
197
- * @shorthands
198
- * - {@link div}
199
- */
200
- function divide(...vs) {
201
- if (vs.length === 0) {
202
- return vec3.one;
203
- }
204
- if (vs.length === 1) {
205
- const v = vs[0];
206
- if (typeof v === 'number')
207
- return [1 / v, 1 / v, 1 / v];
208
- return [1 / v[0], 1 / v[1], 1 / v[2]];
209
- }
210
- const first = vs[0];
211
- let x = typeof first === 'number' ? first : first[0];
212
- let y = typeof first === 'number' ? first : first[1];
213
- let z = typeof first === 'number' ? first : first[2];
214
- for (let i = 1; i < vs.length; i++) {
215
- const v = vs[i];
216
- if (typeof v === 'number') {
217
- x /= v;
218
- y /= v;
219
- z /= v;
220
- }
221
- else {
222
- x /= v[0];
223
- y /= v[1];
224
- z /= v[2];
225
- }
226
- }
227
- return [x, y, z];
228
- }
229
- vec3.divide = divide;
230
- /**
231
- * Alias for {@link divide}
232
- * @category Shorthands
233
- */
234
- vec3.div = divide;
235
- /**
236
- * Applies Math.ceil to each component of a vec3
237
- */
238
- function ceil(a) {
239
- return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])];
240
- }
241
- vec3.ceil = ceil;
242
- /**
243
- * Applies Math.floor to each component of a vec3
244
- */
245
- function floor(a) {
246
- return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])];
247
- }
248
- vec3.floor = floor;
249
- /**
250
- * Applies Math.sign to each component of a vec3
251
- */
252
- function sign(v) {
253
- return [Math.sign(v[0]), Math.sign(v[1]), Math.sign(v[2])];
254
- }
255
- vec3.sign = sign;
256
- /**
257
- * Removes the fractional part
258
- * @see https://www.sidefx.com/docs/houdini/vex/functions/trunc.html
259
- */
260
- function trunc(v) {
261
- return [
262
- v[0] < 0 ? Math.ceil(v[0]) : Math.floor(v[0]),
263
- v[1] < 0 ? Math.ceil(v[1]) : Math.floor(v[1]),
264
- v[2] < 0 ? Math.ceil(v[2]) : Math.floor(v[2]),
265
- ];
266
- }
267
- vec3.trunc = trunc;
268
- /**
269
- * Computes the fractional part of the argument
270
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/fract.xhtml
271
- */
272
- function fract(a) {
273
- return vec3.sub(a, floor(a));
274
- }
275
- vec3.fract = fract;
276
- /**
277
- * Compute value of one parameter modulo another. This is computed as x - y * floor(x/y). Unlike JavaScript's `%` operator, the sign of result always matches to `b`.
278
- * @see https://thebookofshaders.com/glossary/?search=mod
279
- */
280
- function mod(a, b) {
281
- if (typeof b === 'number')
282
- b = [b, b, b];
283
- return [
284
- a[0] - b[0] * Math.floor(a[0] / b[0]),
285
- a[1] - b[1] * Math.floor(a[1] / b[1]),
286
- a[2] - b[2] * Math.floor(a[2] / b[2]),
287
- ];
288
- }
289
- vec3.mod = mod;
290
- /**
291
- * Quantize a vec3 to a given step and offset. If the step is 0, the value is returned unchanged.
292
- * @param v The value to quantize
293
- * @param step The step size
294
- * @param offset The offset
295
- * @returns The quantized value
296
- */
297
- function quantize(v, step, offset = vec3.zero) {
298
- if (typeof step === 'number')
299
- step = [step, step, step];
300
- if (typeof offset === 'number')
301
- offset = [offset, offset, offset];
302
- return [
303
- scalar_1.scalar.quantize(v[0], step[0], offset[0]),
304
- scalar_1.scalar.quantize(v[1], step[1], offset[1]),
305
- scalar_1.scalar.quantize(v[2], step[2], offset[2]),
306
- ];
307
- }
308
- vec3.quantize = quantize;
309
- /**
310
- * Returns the minimum of given vec3's
311
- */
312
- function min(...vs) {
313
- if (vs.length === 0) {
314
- return [Infinity, Infinity, Infinity];
315
- }
316
- else if (vs.length === 1) {
317
- const v = vs[0];
318
- return typeof v === 'number' ? [v, v, v] : v;
319
- }
320
- else if (vs.length > 2) {
321
- const [a, b, ...rest] = vs;
322
- return min(min(a, b), ...rest);
323
- }
324
- let [a, b] = vs;
325
- if (typeof a === 'number')
326
- a = [a, a, a];
327
- if (typeof b === 'number')
328
- b = [b, b, b];
329
- return [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.min(a[2], b[2])];
330
- }
331
- vec3.min = min;
332
- /**
333
- * Returns the maximum of given vec3's
334
- */
335
- function max(...vs) {
336
- if (vs.length === 0) {
337
- return [-Infinity, -Infinity, -Infinity];
338
- }
339
- else if (vs.length === 1) {
340
- const v = vs[0];
341
- return typeof v === 'number' ? [v, v, v] : v;
342
- }
343
- else if (vs.length > 2) {
344
- const [a, b, ...rest] = vs;
345
- return max(max(a, b), ...rest);
346
- }
347
- let [a, b] = vs;
348
- if (typeof a === 'number')
349
- a = [a, a, a];
350
- if (typeof b === 'number')
351
- b = [b, b, b];
352
- return [Math.max(a[0], b[0]), Math.max(a[1], b[1]), Math.max(a[2], b[2])];
353
- }
354
- vec3.max = max;
355
- /**
356
- * Constrain a value to lie between two further values
357
- * @see https://thebookofshaders.com/glossary/?search=clamp
358
- * @param v the value to constrain
359
- * @param min the lower end of the range into which to constrain `v`
360
- * @param max the upper end of the range into which to constrain `v`
361
- */
362
- function clamp(v, min, max) {
363
- if (typeof min === 'number')
364
- min = [min, min, min];
365
- if (typeof max === 'number')
366
- max = [max, max, max];
367
- return [
368
- Math.min(Math.max(v[0], min[0]), max[0]),
369
- Math.min(Math.max(v[1], min[1]), max[1]),
370
- Math.min(Math.max(v[2], min[2]), max[2]),
371
- ];
372
- }
373
- vec3.clamp = clamp;
374
- /**
375
- * Clamps each component to [0, 1]. Equivalent to {@link saturate}.
376
- */
377
- function clamp01(v) {
378
- return clamp(v, 0, 1);
379
- }
380
- vec3.clamp01 = clamp01;
381
- /**
382
- * Clamps each component to [-1, 1]
383
- */
384
- function clamp11(v) {
385
- return clamp(v, -1, 1);
386
- }
387
- vec3.clamp11 = clamp11;
388
- /**
389
- * Returns the absolute value of each component of a vec3
390
- */
391
- function abs(v) {
392
- return [Math.abs(v[0]), Math.abs(v[1]), Math.abs(v[2])];
393
- }
394
- vec3.abs = abs;
395
- /**
396
- * Symmetric round the components of a vec3
397
- */
398
- function round(a) {
399
- return [Common.round(a[0]), Common.round(a[1]), Common.round(a[2])];
400
- }
401
- vec3.round = round;
402
- /**
403
- * Scales a vec3 by a scalar number
404
- */
405
- function scale(a, s) {
406
- return [a[0] * s, a[1] * s, a[2] * s];
407
- }
408
- vec3.scale = scale;
409
- /**
410
- * Returns the average value of the input(s)
411
- * @see https://www.sidefx.com/docs/houdini/vex/functions/avg.html
412
- *
413
- * @shorthands
414
- * - {@link avg}
415
- */
416
- function average(...vs) {
417
- let x = 0, y = 0, z = 0;
418
- const len = vs.length || 1;
419
- for (const v of vs) {
420
- x += v[0];
421
- y += v[1];
422
- z += v[2];
423
- }
424
- return [x / len, y / len, z / len];
425
- }
426
- vec3.average = average;
427
- /**
428
- * Alias for {@link average}
429
- * @category Shorthands
430
- */
431
- vec3.avg = average;
432
- /**
433
- * Adds given vec3's after scaling the second operand by a scalar value
434
- */
435
- function scaleAndAdd(a, b, scale) {
436
- return [a[0] + b[0] * scale, a[1] + b[1] * scale, a[2] + b[2] * scale];
437
- }
438
- vec3.scaleAndAdd = scaleAndAdd;
439
- /**
440
- * Calculates the euclidian distance between two vec3's
441
- *
442
- * @shorthands
443
- * - {@link dist}
444
- */
445
- function distance(a, b) {
446
- const x = b[0] - a[0];
447
- const y = b[1] - a[1];
448
- const z = b[2] - a[2];
449
- return Math.hypot(x, y, z);
450
- }
451
- vec3.distance = distance;
452
- /**
453
- * Alias for {@link distance}
454
- * @category Shorthands
455
- */
456
- vec3.dist = distance;
457
- /**
458
- * Calculates the squared euclidian distance between two vec3's
459
- */
460
- function squaredDistance(a, b) {
461
- const x = b[0] - a[0];
462
- const y = b[1] - a[1];
463
- const z = b[2] - a[2];
464
- return x * x + y * y + z * z;
465
- }
466
- vec3.squaredDistance = squaredDistance;
467
- /**
468
- * Alias for {@link squaredDistance}
469
- * @category Shorthands
470
- */
471
- vec3.sqrDist = squaredDistance;
472
- /**
473
- * Returns the absolute difference between corresponding components of two vec3's
474
- *
475
- * @shorthands
476
- * - {@link diff}
477
- */
478
- function difference(a, b) {
479
- return [Math.abs(b[0] - a[0]), Math.abs(b[1] - a[1]), Math.abs(b[2] - a[2])];
480
- }
481
- vec3.difference = difference;
482
- /**
483
- * Alias for {@link vec3.difference}
484
- * @category Shorthands
485
- */
486
- vec3.diff = difference;
487
- /**
488
- * Calculates the length of a vec3
489
- *
490
- * @shorthands
491
- * - {@link len}
492
- */
493
- function length(a) {
494
- const [x, y, z] = a;
495
- return Math.hypot(x, y, z);
496
- }
497
- vec3.length = length;
498
- /**
499
- * Alias for {@link length}
500
- * @category Shorthands
501
- */
502
- vec3.len = length;
503
- /**
504
- * Calculates the squared length of a vec3
505
- *
506
- * @shorthands
507
- * - {@link sqrLen}
508
- */
509
- function squaredLength(a) {
510
- const x = a[0];
511
- const y = a[1];
512
- const z = a[2];
513
- return x * x + y * y + z * z;
514
- }
515
- vec3.squaredLength = squaredLength;
516
- /**
517
- * Alias for {@link squaredLength}
518
- * @category Shorthands
519
- */
520
- vec3.sqrLen = squaredLength;
521
- /**
522
- * Negates the components of a vec3
523
- *
524
- * @shorthands
525
- * - {@link neg}
526
- */
527
- function negate(a) {
528
- return [-a[0], -a[1], -a[2]];
529
- }
530
- vec3.negate = negate;
531
- /**
532
- * Alias for {@link negate}
533
- */
534
- vec3.neg = negate;
535
- /**
536
- * Returns the inverse of the components of a vec3
537
- *
538
- * @shorthands
539
- * - {@link inv}
540
- */
541
- function invert(a) {
542
- return [1 / a[0], 1 / a[1], 1 / a[2]];
543
- }
544
- vec3.invert = invert;
545
- /**
546
- * Alias for {@link invert}
547
- * @category Shorthands
548
- */
549
- vec3.inv = invert;
550
- /**
551
- * Returns the result of `v` subtracted from {@link one}.
552
- */
553
- function oneMinus(v) {
554
- return subtract(vec3.one, v);
555
- }
556
- vec3.oneMinus = oneMinus;
557
- /**
558
- * Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. The function clamps the given value the range `(omin, omax)` before fitting, so the resulting value will be guaranteed to be in the range `(nmin, nmax)`. To avoid clamping use efit instead.
559
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
560
- * @param value
561
- * @param omin
562
- * @param omax
563
- * @param nmin
564
- * @param nmax
565
- * @returns
566
- */
567
- function fit(value, omin, omax, nmin, nmax) {
568
- return [
569
- scalar_1.scalar.fit(value[0], omin[0], omax[0], nmin[0], nmax[0]),
570
- scalar_1.scalar.fit(value[1], omin[1], omax[1], nmin[1], nmax[1]),
571
- scalar_1.scalar.fit(value[2], omin[2], omax[2], nmin[2], nmax[2]),
572
- ];
573
- }
574
- vec3.fit = fit;
575
- /**
576
- * Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. Unlike `fit`, this function does not clamp values to the given range. If `omin` and `omax` are the same, the function returns the average of `nmin` and `nmax`.
577
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
578
- * @param value
579
- * @param omin
580
- * @param omax
581
- * @param nmin
582
- * @param nmax
583
- * @returns
584
- */
585
- function efit(value, omin, omax, nmin, nmax) {
586
- return [
587
- scalar_1.scalar.efit(value[0], omin[0], omax[0], nmin[0], nmax[0]),
588
- scalar_1.scalar.efit(value[1], omin[1], omax[1], nmin[1], nmax[1]),
589
- scalar_1.scalar.efit(value[2], omin[2], omax[2], nmin[2], nmax[2]),
590
- ];
591
- }
592
- vec3.efit = efit;
593
- /**
594
- * Takes the value in the range `(0, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
595
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit01.html
596
- */
597
- function fit01(value, nmin, nmax) {
598
- return [
599
- scalar_1.scalar.fit01(value[0], nmin[0], nmax[0]),
600
- scalar_1.scalar.fit01(value[1], nmin[1], nmax[1]),
601
- scalar_1.scalar.fit01(value[2], nmin[2], nmax[2]),
602
- ];
603
- }
604
- vec3.fit01 = fit01;
605
- /**
606
- * Takes the value in the range `(-1, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
607
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit11.html
608
- */
609
- function fit11(value, nmin, nmax) {
610
- return [
611
- scalar_1.scalar.fit11(value[0], nmin[0], nmax[0]),
612
- scalar_1.scalar.fit11(value[1], nmin[1], nmax[1]),
613
- scalar_1.scalar.fit11(value[2], nmin[2], nmax[2]),
614
- ];
615
- }
616
- vec3.fit11 = fit11;
617
- /**
618
- * Normalize a vec3
619
- */
620
- function normalize(a) {
621
- const [x, y, z] = a;
622
- const isZeroLength = x === 0 && y === 0 && z === 0;
623
- const len = isZeroLength ? 0 : 1 / Math.hypot(x, y, z);
624
- return [a[0] * len, a[1] * len, a[2] * len];
625
- }
626
- vec3.normalize = normalize;
627
- /**
628
- * Calculates the dot product of two vec3's
629
- */
630
- function dot(a, b) {
631
- return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
632
- }
633
- vec3.dot = dot;
634
- /**
635
- * Computes the cross product of two vec3's
636
- */
637
- function cross(a, b) {
638
- const [ax, ay, az] = a;
639
- const [bx, by, bz] = b;
640
- return [ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx];
641
- }
642
- vec3.cross = cross;
643
- /**
644
- * Reflects incident vector `I` about normal `N`. The normal `N` should be normalized.
645
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/reflect.xhtml
646
- * @param I Incident vector
647
- * @param N Normal vector (should be normalized)
648
- */
649
- function reflect(I, N) {
650
- const d = 2 * dot(N, I);
651
- return [I[0] - d * N[0], I[1] - d * N[1], I[2] - d * N[2]];
652
- }
653
- vec3.reflect = reflect;
654
- /**
655
- * Computes the refraction vector for incident vector `I`, surface normal `N`, and ratio of indices of refraction `eta`. The normal `N` should be normalized.
656
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/refract.xhtml
657
- * @param I Incident vector
658
- * @param N Normal vector (should be normalized)
659
- * @param eta Ratio of indices of refraction
660
- * @returns The refraction vector, or zero vector for total internal reflection
661
- */
662
- function refract(I, N, eta) {
663
- const d = dot(N, I);
664
- const k = 1 - eta * eta * (1 - d * d);
665
- if (k < 0)
666
- return [0, 0, 0];
667
- const s = eta * d + Math.sqrt(k);
668
- return [eta * I[0] - s * N[0], eta * I[1] - s * N[1], eta * I[2] - s * N[2]];
669
- }
670
- vec3.refract = refract;
671
- /**
672
- * Orients a normal to point away from a surface as defined by its incident vector. Returns `N` if `dot(Nref, I) < 0`, otherwise returns `-N`.
673
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/faceforward.xhtml
674
- * @param N Normal vector
675
- * @param I Incident vector
676
- * @param Nref Reference normal
677
- */
678
- function faceforward(N, I, Nref) {
679
- return dot(Nref, I) < 0 ? N : [-N[0], -N[1], -N[2]];
680
- }
681
- vec3.faceforward = faceforward;
682
- /**
683
- * Projects vector `a` onto vector `b`.
684
- * @param a The vector to project
685
- * @param b The vector to project onto
686
- */
687
- function project(a, b) {
688
- const s = dot(a, b) / dot(b, b);
689
- return [b[0] * s, b[1] * s, b[2] * s];
690
- }
691
- vec3.project = project;
692
- /**
693
- * Computes the rejection of vector `a` from vector `b` (the component of `a` perpendicular to `b`).
694
- * @param a The vector to reject
695
- * @param b The vector to reject from
696
- */
697
- function reject(a, b) {
698
- const p = project(a, b);
699
- return [a[0] - p[0], a[1] - p[1], a[2] - p[2]];
700
- }
701
- vec3.reject = reject;
702
- /**
703
- * Linearly interpolate between two vec3's. Same as GLSL's built-in `mix` function.
704
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
705
- *
706
- * @shorthands
707
- * - {@link mix}
708
- */
709
- function lerp(a, b, t) {
710
- if (typeof t === 'number')
711
- t = [t, t, t];
712
- return [
713
- a[0] + t[0] * (b[0] - a[0]),
714
- a[1] + t[1] * (b[1] - a[1]),
715
- a[2] + t[2] * (b[2] - a[2]),
716
- ];
717
- }
718
- vec3.lerp = lerp;
719
- /**
720
- * Alias for {@link lerp}
721
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
722
- * @category Shorthands
723
- */
724
- vec3.mix = lerp;
725
- /**
726
- * Returns the amount to mix `min` and `max` to generate the input value `t`. This is the inverse of the `lerp` function. If `min` and `max` are equal, the mixing value is `0.5`.
727
- * @see https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Inverse-Lerp-Node.html
728
- * @see https://www.sidefx.com/docs/houdini/vex/functions/invlerp.html
729
- *
730
- * @shorthands
731
- * - {@link invlerp}
732
- */
733
- function inverseLerp(a, b, t) {
734
- return [
735
- a[0] === b[0] ? 0.5 : (t[0] - a[0]) / (b[0] - a[0]),
736
- a[1] === b[1] ? 0.5 : (t[1] - a[1]) / (b[1] - a[1]),
737
- a[2] === b[2] ? 0.5 : (t[2] - a[2]) / (b[2] - a[2]),
738
- ];
739
- }
740
- vec3.inverseLerp = inverseLerp;
741
- /**
742
- * Alias for {@link inverseLerp}
743
- * @category Shorthands
744
- */
745
- vec3.invlerp = inverseLerp;
746
- /**
747
- * Performs a spherical linear interpolation between two vec3's
748
- */
749
- function slerp(a, b, t) {
750
- const angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
751
- const sinTotal = Math.sin(angle);
752
- if (sinTotal === 0) {
753
- return lerp(a, b, t);
754
- }
755
- const ratioA = Math.sin((1 - t) * angle) / sinTotal;
756
- const ratioB = Math.sin(t * angle) / sinTotal;
757
- return [
758
- ratioA * a[0] + ratioB * b[0],
759
- ratioA * a[1] + ratioB * b[1],
760
- ratioA * a[2] + ratioB * b[2],
761
- ];
762
- }
763
- vec3.slerp = slerp;
764
- /**
765
- * Performs a hermite interpolation with two control points
766
- *
767
- * @param a the first operand
768
- * @param b the second operand
769
- * @param c the third operand
770
- * @param d the fourth operand
771
- * @param t interpolation amount, in the range [0-1], between the two inputs
772
- */
773
- function hermite(a, b, c, d, t) {
774
- const factorTimes2 = t * t;
775
- const factor1 = factorTimes2 * (2 * t - 3) + 1;
776
- const factor2 = factorTimes2 * (t - 2) + t;
777
- const factor3 = factorTimes2 * (t - 1);
778
- const factor4 = factorTimes2 * (3 - 2 * t);
779
- return [
780
- a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4,
781
- a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4,
782
- a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4,
783
- ];
784
- }
785
- vec3.hermite = hermite;
786
- /**
787
- * Performs a bezier interpolation with two control points
788
- */
789
- function bezier(a, b, c, d, t) {
790
- const inverseFactor = 1 - t;
791
- const inverseFactorTimesTwo = inverseFactor * inverseFactor;
792
- const factorTimes2 = t * t;
793
- const factor1 = inverseFactorTimesTwo * inverseFactor;
794
- const factor2 = 3 * t * inverseFactorTimesTwo;
795
- const factor3 = 3 * factorTimes2 * inverseFactor;
796
- const factor4 = factorTimes2 * t;
797
- return [
798
- a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4,
799
- a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4,
800
- a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4,
801
- ];
802
- }
803
- vec3.bezier = bezier;
804
- /**
805
- * Transforms the vec3 with a mat4.
806
- * 4th vector component is implicitly '1'
807
- */
808
- function transformMat4(a, m) {
809
- const [x, y, z] = a;
810
- const w = m[3] * x + m[7] * y + m[11] * z + m[15] || 1;
811
- return [
812
- (m[0] * x + m[4] * y + m[8] * z + m[12]) / w,
813
- (m[1] * x + m[5] * y + m[9] * z + m[13]) / w,
814
- (m[2] * x + m[6] * y + m[10] * z + m[14]) / w,
815
- ];
816
- }
817
- vec3.transformMat4 = transformMat4;
818
- /**
819
- * Transforms the vec3 with a mat3.
820
- */
821
- function transformMat3(a, m) {
822
- const x = a[0], y = a[1], z = a[2];
823
- return [
824
- x * m[0] + y * m[3] + z * m[6],
825
- x * m[1] + y * m[4] + z * m[7],
826
- x * m[2] + y * m[5] + z * m[8],
827
- ];
828
- }
829
- vec3.transformMat3 = transformMat3;
830
- /**
831
- * Transforms a vec3 with a matrix or quaternion, automatically choosing the appropriate transformation function based on input type
832
- * @param p The vector to transform
833
- * @param m The transformation matrix (mat3 or mat4) or quaternion
834
- * @returns The transformed vector
835
- *
836
- * @shorthands
837
- * - {@link xform}
838
- */
839
- function transform(p, m) {
840
- if (m.length === 4) {
841
- // quat
842
- return transformQuat(p, m);
843
- }
844
- else {
845
- const matrixArray = m;
846
- switch (matrixArray.length) {
847
- case 9: // mat3
848
- return transformMat3(p, m);
849
- case 16: // mat4
850
- return transformMat4(p, m);
851
- default:
852
- throw new Error(`Unsupported matrix size: ${matrixArray.length}`);
853
- }
854
- }
855
- }
856
- vec3.transform = transform;
857
- /**
858
- * Alias for {@link vec3.transform}
859
- * @category Shorthands
860
- */
861
- vec3.xform = transform;
862
- /**
863
- * Transforms the vec3 with a quat
864
- * Can also be used for dual quaternions. (Multiply it with the real part)
865
- *
866
- * @param a the vector to transform
867
- * @param q quaternion to transform with
868
- *
869
- * @shorthands
870
- * - {@link qrotate}
871
- */
872
- // https://github.com/stackgl/gl-vec3/blob/master/transformQuat.js
873
- function transformQuat(a, q) {
874
- // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations
875
- const x = a[0], y = a[1], z = a[2], qx = q[0], qy = q[1], qz = q[2], qw = q[3],
876
- // calculate quat * vec
877
- ix = qw * x + qy * z - qz * y, iy = qw * y + qz * x - qx * z, iz = qw * z + qx * y - qy * x, iw = -qx * x - qy * y - qz * z;
878
- // calculate result * inverse quat
879
- return [
880
- ix * qw + iw * -qx + iy * -qz - iz * -qy,
881
- iy * qw + iw * -qy + iz * -qx - ix * -qz,
882
- iz * qw + iw * -qz + ix * -qy - iy * -qx,
883
- ];
884
- }
885
- vec3.transformQuat = transformQuat;
886
- /**
887
- * Alias for {@link transformQuat}
888
- * @see https://www.sidefx.com/docs/houdini/vex/functions/qrotate.html
889
- * @category Shorthands
890
- */
891
- vec3.qrotate = transformQuat;
892
- /**
893
- * Rotate a 3D vector around the x-axis
894
- * @param v The vec3 point to rotate
895
- * @param origin The origin of the rotation
896
- * @param deg The angle of rotation in degrees
897
- */
898
- function rotateX(v, origin, deg) {
899
- //Translate point to the origin
900
- const py = v[1] - origin[1];
901
- const pz = v[2] - origin[2];
902
- const rad = deg * Common.DEG2RAD;
903
- const s = Math.sin(rad);
904
- const c = Math.cos(rad);
905
- //translate to correct position
906
- return [
907
- v[0], //
908
- origin[1] + py * c - pz * s,
909
- origin[2] + py * s + pz * c,
910
- ];
911
- }
912
- vec3.rotateX = rotateX;
913
- /**
914
- * Rotate a 3D vector around the y-axis
915
- * @param v The vec3 point to rotate
916
- * @param origin The origin of the rotation
917
- * @param deg The angle of rotation in degrees
918
- */
919
- function rotateY(v, origin, deg) {
920
- //Translate point to the origin
921
- const px = v[0] - origin[0];
922
- const pz = v[2] - origin[2];
923
- const rad = deg * Common.DEG2RAD;
924
- const s = Math.sin(rad);
925
- const c = Math.cos(rad);
926
- // Perform rotation then translate to correct position
927
- return [
928
- origin[0] + pz * s + px * c, //
929
- v[1], //
930
- origin[2] + pz * c - px * s,
931
- ];
932
- }
933
- vec3.rotateY = rotateY;
934
- /**
935
- * Rotate a 3D vector around the z-axis
936
- * @param v The vec3 point to rotate
937
- * @param origin The origin of the rotation
938
- * @param deg The angle of rotation in degrees
939
- */
940
- function rotateZ(v, origin, deg) {
941
- //Translate point to the origin
942
- const px = v[0] - origin[0];
943
- const py = v[1] - origin[1];
944
- const rad = deg * Common.DEG2RAD;
945
- const s = Math.sin(rad);
946
- const c = Math.cos(rad);
947
- //translate to correct position
948
- return [
949
- origin[0] + px * c - py * s, //
950
- origin[1] + px * s + py * c,
951
- v[2],
952
- ];
953
- }
954
- vec3.rotateZ = rotateZ;
955
- /**
956
- * Get the angle between two 3D vectors
957
- * @param a The first operand
958
- * @param b The second operand
959
- * @returns The angle in degrees
960
- */
961
- function angle(a, b) {
962
- const [ax, ay, az] = a;
963
- const [bx, by, bz] = b;
964
- const mag = Math.hypot(ax, ay, az) * Math.hypot(bx, by, bz);
965
- const cosine = mag && dot(a, b) / mag;
966
- return Math.acos(Math.min(Math.max(cosine, -1), 1)) * Common.RAD2DEG;
967
- }
968
- vec3.angle = angle;
969
- /**
970
- * Apply a step function by comparing two values
971
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/step.xhtml
972
- * @param edge The location of the edge of the step function.
973
- * @param x The value to be used to generate the step function.
974
- * @returns
975
- */
976
- function step(edge, v) {
977
- if (typeof edge === 'number')
978
- edge = [edge, edge, edge];
979
- if (typeof v === 'number')
980
- v = [v, v, v];
981
- return [
982
- v[0] < edge[0] ? 0 : 1,
983
- v[1] < edge[1] ? 0 : 1,
984
- v[2] < edge[2] ? 0 : 1,
985
- ];
986
- }
987
- vec3.step = step;
988
- /**
989
- * Perform Hermite interpolation between two values.
990
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/smoothstep.xhtml
991
- * @param edge0 Lower edge of the Hermite function.
992
- * @param edge1 Upper edge of the Hermite function.
993
- * @param x Source value for interpolation.
994
- * @returns
995
- */
996
- function smoothstep(edge0, edge1, x) {
997
- if (typeof edge0 === 'number')
998
- edge0 = [edge0, edge0, edge0];
999
- if (typeof edge1 === 'number')
1000
- edge1 = [edge1, edge1, edge1];
1001
- const t0 = scalar_1.scalar.clamp((x[0] - edge0[0]) / (edge1[0] - edge0[0]), 0, 1);
1002
- const t1 = scalar_1.scalar.clamp((x[1] - edge0[1]) / (edge1[1] - edge0[1]), 0, 1);
1003
- const t2 = scalar_1.scalar.clamp((x[2] - edge0[2]) / (edge1[2] - edge0[2]), 0, 1);
1004
- return [
1005
- t0 * t0 * (3 - 2 * t0),
1006
- t1 * t1 * (3 - 2 * t1),
1007
- t2 * t2 * (3 - 2 * t2),
1008
- ];
1009
- }
1010
- vec3.smoothstep = smoothstep;
1011
- /**
1012
- * Converts the components of a vec3 from radians to degrees
1013
- * @param rad The input vec3 in radians
1014
- * @returns The degrees equivalent of the input
1015
- *
1016
- * @shorthands
1017
- * - {@link deg}
1018
- */
1019
- function degrees(rad) {
1020
- return [
1021
- rad[0] * Common.RAD2DEG,
1022
- rad[1] * Common.RAD2DEG,
1023
- rad[2] * Common.RAD2DEG,
1024
- ];
1025
- }
1026
- vec3.degrees = degrees;
1027
- /**
1028
- * Alias for {@link degrees}
1029
- * @category Shorthands
1030
- */
1031
- vec3.deg = degrees;
1032
- /**
1033
- * Converts the components of a vec3 from degrees to radians
1034
- * @param deg The input vec3 in degrees
1035
- * @returns The radians equivalent of the input
1036
- *
1037
- * @shorthands
1038
- * - {@link rad}
1039
- */
1040
- function radians(deg) {
1041
- return [
1042
- deg[0] * Common.DEG2RAD,
1043
- deg[1] * Common.DEG2RAD,
1044
- deg[2] * Common.DEG2RAD,
1045
- ];
1046
- }
1047
- vec3.radians = radians;
1048
- /**
1049
- * Alias for {@link radians}
1050
- * @category Shorthands
1051
- */
1052
- vec3.rad = radians;
1053
- /**
1054
- * Returns the sine of each component, which are angles in degrees
1055
- */
1056
- function sin(deg) {
1057
- return [
1058
- Math.sin(deg[0] * Common.DEG2RAD),
1059
- Math.sin(deg[1] * Common.DEG2RAD),
1060
- Math.sin(deg[2] * Common.DEG2RAD),
1061
- ];
1062
- }
1063
- vec3.sin = sin;
1064
- /**
1065
- * Returns the cosine of each component, which are angles in degrees
1066
- */
1067
- function cos(deg) {
1068
- return [
1069
- Math.cos(deg[0] * Common.DEG2RAD),
1070
- Math.cos(deg[1] * Common.DEG2RAD),
1071
- Math.cos(deg[2] * Common.DEG2RAD),
1072
- ];
1073
- }
1074
- vec3.cos = cos;
1075
- /**
1076
- * Returns the tangent of each component, which are angles in degrees
1077
- */
1078
- function tan(deg) {
1079
- return [
1080
- Math.tan(deg[0] * Common.DEG2RAD),
1081
- Math.tan(deg[1] * Common.DEG2RAD),
1082
- Math.tan(deg[2] * Common.DEG2RAD),
1083
- ];
1084
- }
1085
- vec3.tan = tan;
1086
- /**
1087
- * Returns the arcsine of each component, in degrees
1088
- */
1089
- function asin(v) {
1090
- return [
1091
- Math.asin(v[0]) * Common.RAD2DEG,
1092
- Math.asin(v[1]) * Common.RAD2DEG,
1093
- Math.asin(v[2]) * Common.RAD2DEG,
1094
- ];
1095
- }
1096
- vec3.asin = asin;
1097
- /**
1098
- * Returns the arc cosine of each component, in degrees
1099
- */
1100
- function acos(v) {
1101
- return [
1102
- Math.acos(v[0]) * Common.RAD2DEG,
1103
- Math.acos(v[1]) * Common.RAD2DEG,
1104
- Math.acos(v[2]) * Common.RAD2DEG,
1105
- ];
1106
- }
1107
- vec3.acos = acos;
1108
- /**
1109
- * Returns the arc-tangent of the parameters. If `x` is not provided, `y` is regarded as a value of `y/x`.
1110
- * @param y the values of the y-coordinate
1111
- * @param x the values of the x-coordinate
1112
- * @returns the angle in degrees
1113
- * @see https://thebookofshaders.com/glossary/?search=atan
1114
- * */
1115
- function atan(y, x) {
1116
- if (x === undefined) {
1117
- return [
1118
- Math.atan(y[0]) * Common.RAD2DEG,
1119
- Math.atan(y[1]) * Common.RAD2DEG,
1120
- Math.atan(y[2]) * Common.RAD2DEG,
1121
- ];
1122
- }
1123
- else {
1124
- return [
1125
- Math.atan2(y[0], x[0]) * Common.RAD2DEG,
1126
- Math.atan2(y[1], x[1]) * Common.RAD2DEG,
1127
- Math.atan2(y[2], x[2]) * Common.RAD2DEG,
1128
- ];
1129
- }
1130
- }
1131
- vec3.atan = atan;
1132
- /**
1133
- * Returns the arc-tangent of the parameters.
1134
- * @param y the values of the y-coordinate
1135
- * @param x the values of the x-coordinate
1136
- * @returns the angle in degrees
1137
- * @see https://thebookofshaders.com/glossary/?search=atan
1138
- * */
1139
- function atan2(y, x) {
1140
- return [
1141
- Math.atan2(y[0], x[0]) * Common.RAD2DEG,
1142
- Math.atan2(y[1], x[1]) * Common.RAD2DEG,
1143
- Math.atan2(y[2], x[2]) * Common.RAD2DEG,
1144
- ];
1145
- }
1146
- vec3.atan2 = atan2;
1147
- /**
1148
- * Returns the base to the exponent power, component-wise
1149
- */
1150
- function pow(a, b) {
1151
- if (typeof b === 'number')
1152
- b = [b, b, b];
1153
- return [Math.pow(a[0], b[0]), Math.pow(a[1], b[1]), Math.pow(a[2], b[2])];
1154
- }
1155
- vec3.pow = pow;
1156
- /**
1157
- * Returns e raised to the power of each component
1158
- */
1159
- function exp(v) {
1160
- return [Math.exp(v[0]), Math.exp(v[1]), Math.exp(v[2])];
1161
- }
1162
- vec3.exp = exp;
1163
- /**
1164
- * Returns the natural logarithm of each component
1165
- */
1166
- function log(v) {
1167
- return [Math.log(v[0]), Math.log(v[1]), Math.log(v[2])];
1168
- }
1169
- vec3.log = log;
1170
- /**
1171
- * Returns 2 raised to the power of the parameter
1172
- * @param v the value of the power to which 2 will be raised
1173
- */
1174
- function exp2(v) {
1175
- return [2 ** v[0], 2 ** v[1], 2 ** v[2]];
1176
- }
1177
- vec3.exp2 = exp2;
1178
- /**
1179
- * Returns the base-2 logarithm of each component
1180
- */
1181
- function log2(v) {
1182
- return [Math.log2(v[0]), Math.log2(v[1]), Math.log2(v[2])];
1183
- }
1184
- vec3.log2 = log2;
1185
- /**
1186
- * Returns the square root of each component
1187
- */
1188
- function sqrt(v) {
1189
- return [Math.sqrt(v[0]), Math.sqrt(v[1]), Math.sqrt(v[2])];
1190
- }
1191
- vec3.sqrt = sqrt;
1192
- /**
1193
- * Returns the inverse of the square root of the parameter
1194
- * @param v the value of which to take the inverse of the square root
1195
- * @see https://thebookofshaders.com/glossary/?search=inversesqrt
1196
- *
1197
- * @shorthands
1198
- * - {@link invsqrt}
1199
- */
1200
- function inverseSqrt(v) {
1201
- return [1 / Math.sqrt(v[0]), 1 / Math.sqrt(v[1]), 1 / Math.sqrt(v[2])];
1202
- }
1203
- vec3.inverseSqrt = inverseSqrt;
1204
- /**
1205
- * Alias for {@link inverseSqrt}
1206
- * @category Shorthands
1207
- */
1208
- vec3.invsqrt = inverseSqrt;
1209
- /**
1210
- * Returns the hyperbolic sine of each component
1211
- */
1212
- function sinh(v) {
1213
- return [Math.sinh(v[0]), Math.sinh(v[1]), Math.sinh(v[2])];
1214
- }
1215
- vec3.sinh = sinh;
1216
- /**
1217
- * Returns the hyperbolic cosine of each component
1218
- */
1219
- function cosh(v) {
1220
- return [Math.cosh(v[0]), Math.cosh(v[1]), Math.cosh(v[2])];
1221
- }
1222
- vec3.cosh = cosh;
1223
- /**
1224
- * Returns the hyperbolic tangent of each component
1225
- */
1226
- function tanh(v) {
1227
- return [Math.tanh(v[0]), Math.tanh(v[1]), Math.tanh(v[2])];
1228
- }
1229
- vec3.tanh = tanh;
1230
- /**
1231
- * Returns the inverse hyperbolic sine of each component
1232
- */
1233
- function asinh(v) {
1234
- return [Math.asinh(v[0]), Math.asinh(v[1]), Math.asinh(v[2])];
1235
- }
1236
- vec3.asinh = asinh;
1237
- /**
1238
- * Returns the inverse hyperbolic cosine of each component
1239
- */
1240
- function acosh(v) {
1241
- return [Math.acosh(v[0]), Math.acosh(v[1]), Math.acosh(v[2])];
1242
- }
1243
- vec3.acosh = acosh;
1244
- /**
1245
- * Returns the inverse hyperbolic tangent of each component
1246
- */
1247
- function atanh(v) {
1248
- return [Math.atanh(v[0]), Math.atanh(v[1]), Math.atanh(v[2])];
1249
- }
1250
- vec3.atanh = atanh;
1251
- /**
1252
- * Clamps each component to [0, 1]. Equivalent to HLSL's `saturate`.
1253
- */
1254
- function saturate(v) {
1255
- return [
1256
- Math.max(0, Math.min(1, v[0])),
1257
- Math.max(0, Math.min(1, v[1])),
1258
- Math.max(0, Math.min(1, v[2])),
1259
- ];
1260
- }
1261
- vec3.saturate = saturate;
1262
- /**
1263
- * Returns the sum of all components of a vector.
1264
- * Equivalent to GLM's `glm::compAdd`.
1265
- */
1266
- function compAdd(v) {
1267
- return v[0] + v[1] + v[2];
1268
- }
1269
- vec3.compAdd = compAdd;
1270
- /**
1271
- * Returns the product of all components of a vector.
1272
- * Equivalent to GLM's `glm::compMul`.
1273
- */
1274
- function compMul(v) {
1275
- return v[0] * v[1] * v[2];
1276
- }
1277
- vec3.compMul = compMul;
1278
- /**
1279
- * Returns whether or not the vectors have exactly the same elements in the same position (when compared with `===`)
1280
- *
1281
- * @shorthands
1282
- * - {@link eq}
1283
- */
1284
- function exactEquals(a, b) {
1285
- return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
1286
- }
1287
- vec3.exactEquals = exactEquals;
1288
- /**
1289
- * Alias for {@link exactEquals}
1290
- * @category Shorthands
1291
- */
1292
- vec3.eq = exactEquals;
1293
- /**
1294
- * Returns whether or not the vectors have approximately the same elements in the same position.
1295
- *
1296
- * @shorthands
1297
- * - {@link approx}
1298
- * - {@link equals}
1299
- */
1300
- function approxEquals(a, b) {
1301
- const [a0, a1, a2] = a;
1302
- const [b0, b1, b2] = b;
1303
- return (Math.abs(a0 - b0) <=
1304
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1305
- Math.abs(a1 - b1) <=
1306
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1307
- Math.abs(a2 - b2) <=
1308
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)));
1309
- }
1310
- vec3.approxEquals = approxEquals;
1311
- /**
1312
- * Alias for {@link approxEquals}
1313
- * @category Shorthands
1314
- */
1315
- vec3.approx = approxEquals;
1316
- /**
1317
- * Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
1318
- * @category Shorthands
1319
- * @deprecated Use {@link approxEquals} instead
1320
- */
1321
- vec3.equals = approxEquals;
1322
- /**
1323
- * Returns the string representation of a vec3
1324
- * @param v vector to represent as a string
1325
- * @param fractionDigits number of digits to appear after the decimal point
1326
- */
1327
- vec3.toString = Common.vecToString;
1328
- })(vec3 || (exports.vec3 = vec3 = {}));
1329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWMzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFrQztBQUlsQyxxQ0FBK0I7QUFRL0I7OztHQUdHO0FBQ0gsSUFBaUIsSUFBSSxDQW8xQ3BCO0FBcDFDRCxXQUFpQixJQUFJO0lBT3BCOzs7T0FHRztJQUNILFNBQWdCLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBVSxFQUFFLENBQVU7UUFDbkQsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNWLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxTQUFTO1lBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMxQixJQUFJLENBQUMsS0FBSyxTQUFTO1lBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUUxQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBUmUsT0FBRSxLQVFqQixDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsU0FBZ0IsS0FBSyxDQUFDLENBQU87UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRmUsVUFBSyxRQUVwQixDQUFBO0lBRUQ7O09BRUc7SUFDVSxTQUFJLEdBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVsRDs7T0FFRztJQUNVLFFBQUcsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRWpEOzs7T0FHRztJQUNVLFVBQUssR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENB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LENBQUMsQ0FBTztRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRmUsU0FBSSxPQUVuQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixJQUFJLENBQUMsQ0FBTztRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRmUsU0FBSSxPQUVuQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRmUsVUFBSyxRQUVwQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRmUsVUFBSyxRQUVwQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRmUsVUFBSyxRQUVwQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixRQUFRLENBQUMsQ0FBTztRQUMvQixPQUFPO1lBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUIsQ0FBQTtJQUNGLENBQUM7SUFOZSxhQUFRLFdBTXZCLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixPQUFPLENBQUMsQ0FBTztRQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFGZSxZQUFPLFVBRXRCLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixPQUFPLENBQUMsQ0FBTztRQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFGZSxZQUFPLFVBRXRCLENBQUE7SUFFRDs7Ozs7T0FLRztJQUNILFNBQWdCLFdBQVcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFGZSxnQkFBVyxjQUUxQixDQUFBO0lBRUQ7OztPQUdHO0lBQ1UsT0FBRSxHQUFHLFdBQVcsQ0FBQTtJQUU3Qjs7Ozs7O09BTUc7SUFDSCxTQUFnQixZQUFZLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDNUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV0QixPQUFPLENBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFBO0lBQ0YsQ0FBQztJQVplLGlCQUFZLGVBWTNCLENBQUE7SUFFRDs7O09BR0c7SUFDVSxXQUFNLEdBQUcsWUFBWSxDQUFBO0lBRWxDOzs7O09BSUc7SUFDVSxXQUFNLEdBQUcsWUFBWSxDQUFBO0lBRWxDOzs7O09BSUc7SUFDVSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBR3BCLENBQUE7QUFDWixDQUFDLEVBcDFDZ0IsSUFBSSxvQkFBSixJQUFJLFFBbzFDcEIifQ==