linearly 0.36.1 → 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.
- package/lib/esm/scalar.d.ts +6 -35
- package/lib/esm/scalar.d.ts.map +1 -1
- package/lib/esm/scalar.js +9 -51
- package/package.json +9 -4
- package/lib/cjs/common.d.ts +0 -16
- package/lib/cjs/common.d.ts.map +0 -1
- package/lib/cjs/common.js +0 -70
- package/lib/cjs/index.d.ts +0 -10
- package/lib/cjs/index.d.ts.map +0 -1
- package/lib/cjs/index.js +0 -22
- package/lib/cjs/mat2.d.ts +0 -272
- package/lib/cjs/mat2.d.ts.map +0 -1
- package/lib/cjs/mat2.js +0 -474
- package/lib/cjs/mat2d.d.ts +0 -329
- package/lib/cjs/mat2d.d.ts.map +0 -1
- package/lib/cjs/mat2d.js +0 -640
- package/lib/cjs/mat3.d.ts +0 -295
- package/lib/cjs/mat3.d.ts.map +0 -1
- package/lib/cjs/mat3.js +0 -671
- package/lib/cjs/mat4.d.ts +0 -532
- package/lib/cjs/mat4.d.ts.map +0 -1
- package/lib/cjs/mat4.js +0 -1577
- package/lib/cjs/quat.d.ts +0 -334
- package/lib/cjs/quat.d.ts.map +0 -1
- package/lib/cjs/quat.js +0 -802
- package/lib/cjs/scalar.d.ts +0 -501
- package/lib/cjs/scalar.d.ts.map +0 -1
- package/lib/cjs/scalar.js +0 -728
- package/lib/cjs/vec2.d.ts +0 -664
- package/lib/cjs/vec2.d.ts.map +0 -1
- package/lib/cjs/vec2.js +0 -1247
- package/lib/cjs/vec3.d.ts +0 -660
- package/lib/cjs/vec3.d.ts.map +0 -1
- package/lib/cjs/vec3.js +0 -1329
- package/lib/cjs/vec4.d.ts +0 -552
- package/lib/cjs/vec4.d.ts.map +0 -1
- package/lib/cjs/vec4.js +0 -1200
package/lib/cjs/scalar.js
DELETED
|
@@ -1,728 +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.scalar = void 0;
|
|
37
|
-
const Common = __importStar(require("./common"));
|
|
38
|
-
/**
|
|
39
|
-
* Functions for working with scalar values.
|
|
40
|
-
* @category Modules
|
|
41
|
-
*/
|
|
42
|
-
var scalar;
|
|
43
|
-
(function (scalar) {
|
|
44
|
-
/**
|
|
45
|
-
* Adds the given values
|
|
46
|
-
*/
|
|
47
|
-
function add(...vs) {
|
|
48
|
-
return vs.reduce((a, b) => a + b, 0);
|
|
49
|
-
}
|
|
50
|
-
scalar.add = add;
|
|
51
|
-
/**
|
|
52
|
-
* Subtracts the given values. When the argument is a single value, it negates it. Otherwise, it subtracts from left to right.
|
|
53
|
-
*
|
|
54
|
-
* @shorthands
|
|
55
|
-
* - {@link sub}
|
|
56
|
-
*/
|
|
57
|
-
function subtract(...vs) {
|
|
58
|
-
if (vs.length === 0) {
|
|
59
|
-
return 0;
|
|
60
|
-
}
|
|
61
|
-
else if (vs.length === 1) {
|
|
62
|
-
return -vs[0];
|
|
63
|
-
}
|
|
64
|
-
return vs.reduce((a, b) => a - b);
|
|
65
|
-
}
|
|
66
|
-
scalar.subtract = subtract;
|
|
67
|
-
/**
|
|
68
|
-
* Alias for {@link subtract}
|
|
69
|
-
* @category Shorthands
|
|
70
|
-
*/
|
|
71
|
-
scalar.sub = subtract;
|
|
72
|
-
/**
|
|
73
|
-
* Subtracts a from b
|
|
74
|
-
*/
|
|
75
|
-
function delta(a, b) {
|
|
76
|
-
return b - a;
|
|
77
|
-
}
|
|
78
|
-
scalar.delta = delta;
|
|
79
|
-
/**
|
|
80
|
-
* Multiplies the given values
|
|
81
|
-
*
|
|
82
|
-
* @shorthands
|
|
83
|
-
* - {@link mul}
|
|
84
|
-
*/
|
|
85
|
-
function multiply(...vs) {
|
|
86
|
-
return vs.reduce((a, b) => a * b, 1);
|
|
87
|
-
}
|
|
88
|
-
scalar.multiply = multiply;
|
|
89
|
-
/**
|
|
90
|
-
* Alias for {@link multiply}
|
|
91
|
-
* @category Shorthands
|
|
92
|
-
*/
|
|
93
|
-
scalar.mul = multiply;
|
|
94
|
-
/**
|
|
95
|
-
* Divides the given values. When the argument is a single value, it returns its reciprocal. Otherwise, it divides from left to right.
|
|
96
|
-
*
|
|
97
|
-
* @shorthands
|
|
98
|
-
* - {@link div}
|
|
99
|
-
*/
|
|
100
|
-
function divide(...vs) {
|
|
101
|
-
if (vs.length === 0) {
|
|
102
|
-
return 1;
|
|
103
|
-
}
|
|
104
|
-
else if (vs.length === 1) {
|
|
105
|
-
return 1 / vs[0];
|
|
106
|
-
}
|
|
107
|
-
return vs.reduce((a, b) => a / b);
|
|
108
|
-
}
|
|
109
|
-
scalar.divide = divide;
|
|
110
|
-
/**
|
|
111
|
-
* Alias for {@link divide}
|
|
112
|
-
* @category Shorthands
|
|
113
|
-
*/
|
|
114
|
-
scalar.div = divide;
|
|
115
|
-
/**
|
|
116
|
-
* Symmetric round the given number
|
|
117
|
-
*/
|
|
118
|
-
scalar.round = Common.round;
|
|
119
|
-
/**
|
|
120
|
-
* Returns the smallest integer greater than or equal to the input
|
|
121
|
-
*/
|
|
122
|
-
scalar.ceil = Math.ceil;
|
|
123
|
-
/**
|
|
124
|
-
* Returns the largest integer less than or equal to the input
|
|
125
|
-
*/
|
|
126
|
-
scalar.floor = Math.floor;
|
|
127
|
-
/**
|
|
128
|
-
* Returns the sign of the input (-1, 0, or 1)
|
|
129
|
-
*/
|
|
130
|
-
scalar.sign = Math.sign;
|
|
131
|
-
/**
|
|
132
|
-
* Returns the absolute value of the input
|
|
133
|
-
*/
|
|
134
|
-
scalar.abs = Math.abs;
|
|
135
|
-
/**
|
|
136
|
-
* Removes the fractional part
|
|
137
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/trunc.html
|
|
138
|
-
*/
|
|
139
|
-
function trunc(v) {
|
|
140
|
-
return v < 0 ? Math.ceil(v) : Math.floor(v);
|
|
141
|
-
}
|
|
142
|
-
scalar.trunc = trunc;
|
|
143
|
-
/**
|
|
144
|
-
* Computes the fractional part of the argument
|
|
145
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/fract.xhtml
|
|
146
|
-
*/
|
|
147
|
-
function fract(v) {
|
|
148
|
-
return v - scalar.floor(v);
|
|
149
|
-
}
|
|
150
|
-
scalar.fract = fract;
|
|
151
|
-
/**
|
|
152
|
-
* Computes the 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`.
|
|
153
|
-
* @see https://thebookofshaders.com/glossary/?search=mod
|
|
154
|
-
*/
|
|
155
|
-
function mod(a, b) {
|
|
156
|
-
return a - b * scalar.floor(a / b);
|
|
157
|
-
}
|
|
158
|
-
scalar.mod = mod;
|
|
159
|
-
/**
|
|
160
|
-
* Quantize a value to a given step and offset. If the step is 0, the value is returned unchanged.
|
|
161
|
-
* @param v The value to quantize
|
|
162
|
-
* @param step The step size
|
|
163
|
-
* @param offset The offset
|
|
164
|
-
* @returns The quantized value
|
|
165
|
-
*/
|
|
166
|
-
function quantize(v, step, offset = 0) {
|
|
167
|
-
if (step === 0)
|
|
168
|
-
return v;
|
|
169
|
-
return Math.round((v - offset) / step) * step + offset;
|
|
170
|
-
}
|
|
171
|
-
scalar.quantize = quantize;
|
|
172
|
-
/**
|
|
173
|
-
* Returns the minimum of the given values
|
|
174
|
-
*/
|
|
175
|
-
scalar.min = Math.min;
|
|
176
|
-
/**
|
|
177
|
-
* Returns the maximum of the given values
|
|
178
|
-
*/
|
|
179
|
-
scalar.max = Math.max;
|
|
180
|
-
/**
|
|
181
|
-
* Constrain a value to lie between two further values
|
|
182
|
-
* @see https://thebookofshaders.com/glossary/?search=clamp
|
|
183
|
-
* @param v the value to constrain
|
|
184
|
-
* @param min the lower end of the range into which to constrain `s`
|
|
185
|
-
* @param max the upper end of the range into which to constrain `s`
|
|
186
|
-
*/
|
|
187
|
-
function clamp(v, min, max) {
|
|
188
|
-
return Math.max(min, Math.min(max, v));
|
|
189
|
-
}
|
|
190
|
-
scalar.clamp = clamp;
|
|
191
|
-
/**
|
|
192
|
-
* Clamps the value to [0, 1]. Equivalent to {@link saturate}.
|
|
193
|
-
*/
|
|
194
|
-
function clamp01(value) {
|
|
195
|
-
return clamp(value, 0, 1);
|
|
196
|
-
}
|
|
197
|
-
scalar.clamp01 = clamp01;
|
|
198
|
-
/**
|
|
199
|
-
* Clamps the value to [-1, 1]
|
|
200
|
-
*/
|
|
201
|
-
function clamp11(value) {
|
|
202
|
-
return clamp(value, -1, 1);
|
|
203
|
-
}
|
|
204
|
-
scalar.clamp11 = clamp11;
|
|
205
|
-
/**
|
|
206
|
-
* Multiplies two values
|
|
207
|
-
*/
|
|
208
|
-
function scale(a, b) {
|
|
209
|
-
return a * b;
|
|
210
|
-
}
|
|
211
|
-
scalar.scale = scale;
|
|
212
|
-
/**
|
|
213
|
-
* Returns the average value of the input(s)
|
|
214
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/avg.html
|
|
215
|
-
*
|
|
216
|
-
* @shorthands
|
|
217
|
-
* - {@link avg}
|
|
218
|
-
*/
|
|
219
|
-
function average(...vs) {
|
|
220
|
-
let x = 0;
|
|
221
|
-
const len = vs.length || 1;
|
|
222
|
-
for (const v of vs) {
|
|
223
|
-
x += v;
|
|
224
|
-
}
|
|
225
|
-
return x / len;
|
|
226
|
-
}
|
|
227
|
-
scalar.average = average;
|
|
228
|
-
/**
|
|
229
|
-
* Alias for {@link average}
|
|
230
|
-
* @category Shorthands
|
|
231
|
-
*/
|
|
232
|
-
scalar.avg = average;
|
|
233
|
-
/**
|
|
234
|
-
* Adds two values after scaling the second operand by a scalar value
|
|
235
|
-
*/
|
|
236
|
-
function scaleAndAdd(a, b, s) {
|
|
237
|
-
return a + b * s;
|
|
238
|
-
}
|
|
239
|
-
scalar.scaleAndAdd = scaleAndAdd;
|
|
240
|
-
/**
|
|
241
|
-
* Calculates the distance between two values
|
|
242
|
-
*
|
|
243
|
-
* @shorthands
|
|
244
|
-
* - {@link dist}
|
|
245
|
-
*/
|
|
246
|
-
function distance(a, b) {
|
|
247
|
-
return Math.abs(a - b);
|
|
248
|
-
}
|
|
249
|
-
scalar.distance = distance;
|
|
250
|
-
/**
|
|
251
|
-
* Alias for {@link distance}
|
|
252
|
-
* @category Shorthands
|
|
253
|
-
*/
|
|
254
|
-
scalar.dist = distance;
|
|
255
|
-
/**
|
|
256
|
-
* Returns the absolute difference between two numbers
|
|
257
|
-
*
|
|
258
|
-
* @shorthands
|
|
259
|
-
* - {@link diff}
|
|
260
|
-
*/
|
|
261
|
-
function difference(a, b) {
|
|
262
|
-
return Math.abs(b - a);
|
|
263
|
-
}
|
|
264
|
-
scalar.difference = difference;
|
|
265
|
-
/**
|
|
266
|
-
* Alias for {@link difference}
|
|
267
|
-
* @category Shorthands
|
|
268
|
-
*/
|
|
269
|
-
scalar.diff = difference;
|
|
270
|
-
/**
|
|
271
|
-
* Returns the squared difference between two numbers
|
|
272
|
-
*
|
|
273
|
-
* @shorthands
|
|
274
|
-
* - {@link sqrDist}
|
|
275
|
-
*/
|
|
276
|
-
function squaredDistance(a, b) {
|
|
277
|
-
return (a - b) ** 2;
|
|
278
|
-
}
|
|
279
|
-
scalar.squaredDistance = squaredDistance;
|
|
280
|
-
/**
|
|
281
|
-
* Alias for {@link squaredDistance}
|
|
282
|
-
* @category Shorthands
|
|
283
|
-
*/
|
|
284
|
-
scalar.sqrDist = squaredDistance;
|
|
285
|
-
/**
|
|
286
|
-
* Returns the absolute difference between two numbers
|
|
287
|
-
*
|
|
288
|
-
* @shorthands
|
|
289
|
-
* - {@link len}
|
|
290
|
-
*/
|
|
291
|
-
scalar.length = Math.abs;
|
|
292
|
-
/**
|
|
293
|
-
* Alias for {@link length}
|
|
294
|
-
* @category Shorthands
|
|
295
|
-
*/
|
|
296
|
-
scalar.len = scalar.length;
|
|
297
|
-
/**
|
|
298
|
-
* Returns the squared value of the input
|
|
299
|
-
*
|
|
300
|
-
* @shorthands
|
|
301
|
-
* - {@link sqrLen}
|
|
302
|
-
*/
|
|
303
|
-
function squaredLength(a) {
|
|
304
|
-
return a ** 2;
|
|
305
|
-
}
|
|
306
|
-
scalar.squaredLength = squaredLength;
|
|
307
|
-
/**
|
|
308
|
-
* Alias for {@link squaredLength}
|
|
309
|
-
* @category Shorthands
|
|
310
|
-
*/
|
|
311
|
-
scalar.sqrLen = squaredLength;
|
|
312
|
-
/**
|
|
313
|
-
* Negates a value
|
|
314
|
-
*/
|
|
315
|
-
function negate(a) {
|
|
316
|
-
return -a;
|
|
317
|
-
}
|
|
318
|
-
scalar.negate = negate;
|
|
319
|
-
/**
|
|
320
|
-
* Returns the reciprocal of a value (1/a)
|
|
321
|
-
*/
|
|
322
|
-
function invert(a) {
|
|
323
|
-
return 1 / a;
|
|
324
|
-
}
|
|
325
|
-
scalar.invert = invert;
|
|
326
|
-
/**
|
|
327
|
-
* Returns the result of `1 - a`.
|
|
328
|
-
*/
|
|
329
|
-
function oneMinus(a) {
|
|
330
|
-
return 1 - a;
|
|
331
|
-
}
|
|
332
|
-
scalar.oneMinus = oneMinus;
|
|
333
|
-
/**
|
|
334
|
-
* Normalizes a value to -1, 0, or 1. Equivalent to `Math.sign`.
|
|
335
|
-
*/
|
|
336
|
-
scalar.normalize = Math.sign;
|
|
337
|
-
/**
|
|
338
|
-
* Linearly interpolates between two values. Same as GLSL's built-in `mix` function.
|
|
339
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
|
|
340
|
-
*
|
|
341
|
-
* @shorthands
|
|
342
|
-
* - {@link mix}
|
|
343
|
-
*/
|
|
344
|
-
function lerp(a, b, t) {
|
|
345
|
-
return a + (b - a) * t;
|
|
346
|
-
}
|
|
347
|
-
scalar.lerp = lerp;
|
|
348
|
-
/**
|
|
349
|
-
* Alias for {@link lerp}
|
|
350
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
|
|
351
|
-
* @category Shorthands
|
|
352
|
-
*/
|
|
353
|
-
scalar.mix = lerp;
|
|
354
|
-
/**
|
|
355
|
-
* 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`.
|
|
356
|
-
* @see https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Inverse-Lerp-Node.html
|
|
357
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/invlerp.html
|
|
358
|
-
*
|
|
359
|
-
* @shorthands
|
|
360
|
-
* - {@link invlerp}
|
|
361
|
-
*/
|
|
362
|
-
function inverseLerp(a, b, t) {
|
|
363
|
-
if (a === b)
|
|
364
|
-
return 0.5;
|
|
365
|
-
return (t - a) / (b - a);
|
|
366
|
-
}
|
|
367
|
-
scalar.inverseLerp = inverseLerp;
|
|
368
|
-
/**
|
|
369
|
-
* Alias for {@link inverseLerp}
|
|
370
|
-
* @category Shorthands
|
|
371
|
-
*/
|
|
372
|
-
scalar.invlerp = inverseLerp;
|
|
373
|
-
/**
|
|
374
|
-
* 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 {@link efit} instead. If `omin` and `omax` are the same, the function returns the average of `nmin` and `nmax`.
|
|
375
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
|
|
376
|
-
* @param value
|
|
377
|
-
* @param omin
|
|
378
|
-
* @param omax
|
|
379
|
-
* @param nmin
|
|
380
|
-
* @param nmax
|
|
381
|
-
* @returns
|
|
382
|
-
*/
|
|
383
|
-
function fit(value, omin, omax, nmin, nmax) {
|
|
384
|
-
if (omax === omin) {
|
|
385
|
-
return lerp(nmin, nmax, 0.5);
|
|
386
|
-
}
|
|
387
|
-
const t = clamp((value - omin) / (omax - omin), 0, 1);
|
|
388
|
-
return lerp(nmin, nmax, t);
|
|
389
|
-
}
|
|
390
|
-
scalar.fit = fit;
|
|
391
|
-
/**
|
|
392
|
-
* 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`.
|
|
393
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
|
|
394
|
-
* @param value
|
|
395
|
-
* @param omin
|
|
396
|
-
* @param omax
|
|
397
|
-
* @param nmin
|
|
398
|
-
* @param nmax
|
|
399
|
-
* @returns
|
|
400
|
-
*/
|
|
401
|
-
function efit(value, omin, omax, nmin, nmax) {
|
|
402
|
-
if (omax === omin) {
|
|
403
|
-
return lerp(nmin, nmax, 0.5);
|
|
404
|
-
}
|
|
405
|
-
const t = (value - omin) / (omax - omin);
|
|
406
|
-
return lerp(nmin, nmax, t);
|
|
407
|
-
}
|
|
408
|
-
scalar.efit = efit;
|
|
409
|
-
/**
|
|
410
|
-
* Takes the value in the range `(0, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
|
|
411
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit01.html
|
|
412
|
-
*/
|
|
413
|
-
function fit01(value, nmin, nmax) {
|
|
414
|
-
return fit(value, 0, 1, nmin, nmax);
|
|
415
|
-
}
|
|
416
|
-
scalar.fit01 = fit01;
|
|
417
|
-
/**
|
|
418
|
-
* Takes the value in the range `(-1, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
|
|
419
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit11.html
|
|
420
|
-
*/
|
|
421
|
-
function fit11(value, nmin, nmax) {
|
|
422
|
-
return fit(value, -1, 1, nmin, nmax);
|
|
423
|
-
}
|
|
424
|
-
scalar.fit11 = fit11;
|
|
425
|
-
/**
|
|
426
|
-
* Apply a step function by comparing two values
|
|
427
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/step.xhtml
|
|
428
|
-
* @param edge The location of the edge of the step function.
|
|
429
|
-
* @param x The value to be used to generate the step function.
|
|
430
|
-
* @returns
|
|
431
|
-
*/
|
|
432
|
-
function step(edge, x) {
|
|
433
|
-
return x < edge ? 0 : 1;
|
|
434
|
-
}
|
|
435
|
-
scalar.step = step;
|
|
436
|
-
/**
|
|
437
|
-
* Perform Hermite interpolation between two values.
|
|
438
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/smoothstep.xhtml
|
|
439
|
-
* @param edge0 Lower edge of the Hermite function.
|
|
440
|
-
* @param edge1 Upper edge of the Hermite function.
|
|
441
|
-
* @param x Source value for interpolation.
|
|
442
|
-
* @returns
|
|
443
|
-
*/
|
|
444
|
-
function smoothstep(edge0, edge1, x) {
|
|
445
|
-
const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);
|
|
446
|
-
return t * t * (3 - 2 * t);
|
|
447
|
-
}
|
|
448
|
-
scalar.smoothstep = smoothstep;
|
|
449
|
-
/**
|
|
450
|
-
* Converts a number from radians to degrees
|
|
451
|
-
* @param rad A number in radians
|
|
452
|
-
* @returns The degrees equivalent of the input
|
|
453
|
-
*
|
|
454
|
-
* @shorthands
|
|
455
|
-
* - {@link deg}
|
|
456
|
-
*/
|
|
457
|
-
function degrees(rad) {
|
|
458
|
-
return (rad * 180) / Math.PI;
|
|
459
|
-
}
|
|
460
|
-
scalar.degrees = degrees;
|
|
461
|
-
/**
|
|
462
|
-
* Alias for {@link degrees}
|
|
463
|
-
* @category Shorthands
|
|
464
|
-
*/
|
|
465
|
-
scalar.deg = degrees;
|
|
466
|
-
/**
|
|
467
|
-
* Converts a number from degrees to radians
|
|
468
|
-
* @param deg A number in degrees
|
|
469
|
-
* @returns The radians equivalent of the input
|
|
470
|
-
*
|
|
471
|
-
* @shorthands
|
|
472
|
-
* - {@link rad}
|
|
473
|
-
*/
|
|
474
|
-
function radians(deg) {
|
|
475
|
-
return (deg * Math.PI) / 180;
|
|
476
|
-
}
|
|
477
|
-
scalar.radians = radians;
|
|
478
|
-
/**
|
|
479
|
-
* Alias for {@link radians}
|
|
480
|
-
* @category Shorthands
|
|
481
|
-
*/
|
|
482
|
-
scalar.rad = radians;
|
|
483
|
-
/**
|
|
484
|
-
* Returns the sine of an angle in degrees
|
|
485
|
-
* @param deg An angle in degrees
|
|
486
|
-
*/
|
|
487
|
-
function sin(deg) {
|
|
488
|
-
return Math.sin(deg * Common.DEG2RAD);
|
|
489
|
-
}
|
|
490
|
-
scalar.sin = sin;
|
|
491
|
-
/**
|
|
492
|
-
* Returns the cosine of an angle in degrees
|
|
493
|
-
* @param deg An angle in degrees
|
|
494
|
-
*/
|
|
495
|
-
function cos(deg) {
|
|
496
|
-
return Math.cos(deg * Common.DEG2RAD);
|
|
497
|
-
}
|
|
498
|
-
scalar.cos = cos;
|
|
499
|
-
/**
|
|
500
|
-
* Returns the tangent of an angle in degrees
|
|
501
|
-
* @param deg An angle in degrees
|
|
502
|
-
*/
|
|
503
|
-
function tan(deg) {
|
|
504
|
-
return Math.tan(deg * Common.DEG2RAD);
|
|
505
|
-
}
|
|
506
|
-
scalar.tan = tan;
|
|
507
|
-
/**
|
|
508
|
-
* Returns the arcsine of a value, in degrees
|
|
509
|
-
* @param x A numeric expression
|
|
510
|
-
* @returns The angle in degrees
|
|
511
|
-
*/
|
|
512
|
-
function asin(x) {
|
|
513
|
-
return Math.asin(x) * Common.RAD2DEG;
|
|
514
|
-
}
|
|
515
|
-
scalar.asin = asin;
|
|
516
|
-
/**
|
|
517
|
-
* Returns the arc cosine of a value, in degrees
|
|
518
|
-
* @param x A numeric expression
|
|
519
|
-
* @returns The angle in degrees
|
|
520
|
-
*/
|
|
521
|
-
function acos(x) {
|
|
522
|
-
return Math.acos(x) * Common.RAD2DEG;
|
|
523
|
-
}
|
|
524
|
-
scalar.acos = acos;
|
|
525
|
-
/**
|
|
526
|
-
* Returns the arc-tangent of the parameters. If `x` is not provided, `y` is regarded as a value of `y/x`.
|
|
527
|
-
* @see https://thebookofshaders.com/glossary/?search=atan
|
|
528
|
-
* @param y the value of the y-coordinate
|
|
529
|
-
* @param x the value of the x-coordinate
|
|
530
|
-
* @returns the angle in degrees
|
|
531
|
-
*/
|
|
532
|
-
function atan(y, x) {
|
|
533
|
-
if (x === undefined) {
|
|
534
|
-
return Math.atan(y) * Common.RAD2DEG;
|
|
535
|
-
}
|
|
536
|
-
else {
|
|
537
|
-
return Math.atan2(y, x) * Common.RAD2DEG;
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
scalar.atan = atan;
|
|
541
|
-
/**
|
|
542
|
-
* Returns the arc-tangent of the parameters.
|
|
543
|
-
* @see https://thebookofshaders.com/glossary/?search=atan
|
|
544
|
-
* @param y the value of the y-coordinate
|
|
545
|
-
* @param x the value of the x-coordinate
|
|
546
|
-
* @returns the angle in degrees
|
|
547
|
-
*/
|
|
548
|
-
function atan2(y, x) {
|
|
549
|
-
return Math.atan2(y, x) * Common.RAD2DEG;
|
|
550
|
-
}
|
|
551
|
-
scalar.atan2 = atan2;
|
|
552
|
-
/**
|
|
553
|
-
* Returns the base to the exponent power
|
|
554
|
-
*/
|
|
555
|
-
scalar.pow = Math.pow;
|
|
556
|
-
/**
|
|
557
|
-
* Returns e raised to the power of the input
|
|
558
|
-
*/
|
|
559
|
-
scalar.exp = Math.exp;
|
|
560
|
-
/**
|
|
561
|
-
* Returns the natural logarithm of the input
|
|
562
|
-
*/
|
|
563
|
-
scalar.log = Math.log;
|
|
564
|
-
/**
|
|
565
|
-
* Returns 2 raised to the power of the parameter
|
|
566
|
-
* @param v the value of the power to which 2 will be raised
|
|
567
|
-
*/
|
|
568
|
-
function exp2(v) {
|
|
569
|
-
return 2 ** v;
|
|
570
|
-
}
|
|
571
|
-
scalar.exp2 = exp2;
|
|
572
|
-
/**
|
|
573
|
-
* Returns the base-2 logarithm of the input
|
|
574
|
-
*/
|
|
575
|
-
scalar.log2 = Math.log2;
|
|
576
|
-
/**
|
|
577
|
-
* Returns the square root of the input
|
|
578
|
-
*/
|
|
579
|
-
scalar.sqrt = Math.sqrt;
|
|
580
|
-
/**
|
|
581
|
-
* Returns the inverse of the square root of the parameter
|
|
582
|
-
* @param v the value of which to take the inverse of the square root
|
|
583
|
-
* @see https://thebookofshaders.com/glossary/?search=inversesqrt
|
|
584
|
-
*/
|
|
585
|
-
function inverseSqrt(v) {
|
|
586
|
-
return 1 / Math.sqrt(v);
|
|
587
|
-
}
|
|
588
|
-
scalar.inverseSqrt = inverseSqrt;
|
|
589
|
-
/**
|
|
590
|
-
* Alias for {@link inverseSqrt}
|
|
591
|
-
* @category Shorthands
|
|
592
|
-
*/
|
|
593
|
-
scalar.invsqrt = inverseSqrt;
|
|
594
|
-
/**
|
|
595
|
-
* Returns the hyperbolic sine of the input
|
|
596
|
-
*/
|
|
597
|
-
scalar.sinh = Math.sinh;
|
|
598
|
-
/**
|
|
599
|
-
* Returns the hyperbolic cosine of the input
|
|
600
|
-
*/
|
|
601
|
-
scalar.cosh = Math.cosh;
|
|
602
|
-
/**
|
|
603
|
-
* Returns the hyperbolic tangent of the input
|
|
604
|
-
*/
|
|
605
|
-
scalar.tanh = Math.tanh;
|
|
606
|
-
/**
|
|
607
|
-
* Returns the inverse hyperbolic sine of the input
|
|
608
|
-
*/
|
|
609
|
-
scalar.asinh = Math.asinh;
|
|
610
|
-
/**
|
|
611
|
-
* Returns the inverse hyperbolic cosine of the input
|
|
612
|
-
*/
|
|
613
|
-
scalar.acosh = Math.acosh;
|
|
614
|
-
/**
|
|
615
|
-
* Returns the inverse hyperbolic tangent of the input
|
|
616
|
-
*/
|
|
617
|
-
scalar.atanh = Math.atanh;
|
|
618
|
-
/**
|
|
619
|
-
* Clamps the value to [0, 1]. Equivalent to HLSL's `saturate`.
|
|
620
|
-
*/
|
|
621
|
-
function saturate(v) {
|
|
622
|
-
return Math.max(0, Math.min(1, v));
|
|
623
|
-
}
|
|
624
|
-
scalar.saturate = saturate;
|
|
625
|
-
/**
|
|
626
|
-
* Returns a sawtooth wave with the given period. Basically, the output will be the input value modulo `period`, but returns 1 when the phase is 1. The shape of the wave will be continuous for the negative ranges, so when phase is negative integer, the output will be 0, else if phase is negative float, the output will be 1 - fractional part of phase.
|
|
627
|
-
* @see https://www.geogebra.org/calculator/d3grfqqe
|
|
628
|
-
*
|
|
629
|
-
* @param x the input value
|
|
630
|
-
* @param period the period of the wave
|
|
631
|
-
* @category Periodic Functions
|
|
632
|
-
*
|
|
633
|
-
* @shorthands
|
|
634
|
-
* - {@link ramp}
|
|
635
|
-
*
|
|
636
|
-
*/
|
|
637
|
-
function sawtooth(x, period = 1) {
|
|
638
|
-
x /= period;
|
|
639
|
-
if (x === 1)
|
|
640
|
-
return 1;
|
|
641
|
-
if (x < 0)
|
|
642
|
-
return (1 + (x % 1)) % 1;
|
|
643
|
-
return x % 1;
|
|
644
|
-
}
|
|
645
|
-
scalar.sawtooth = sawtooth;
|
|
646
|
-
/**
|
|
647
|
-
* Alias for {@link sawtooth}
|
|
648
|
-
* @category Shorthands
|
|
649
|
-
*/
|
|
650
|
-
scalar.ramp = sawtooth;
|
|
651
|
-
/**
|
|
652
|
-
* Returns a triangle wave with the given period. The output ranges from 0 to 1.
|
|
653
|
-
* @see https://www.geogebra.org/calculator/d3grfqqe
|
|
654
|
-
*
|
|
655
|
-
* @param x The input value
|
|
656
|
-
* @param period The period of the wave
|
|
657
|
-
* @category Periodic Functions
|
|
658
|
-
*/
|
|
659
|
-
function triangle(x, period = 1) {
|
|
660
|
-
x /= period;
|
|
661
|
-
return 1 - Math.abs(1 - 2 * (Math.abs(x) % 1));
|
|
662
|
-
}
|
|
663
|
-
scalar.triangle = triangle;
|
|
664
|
-
/**
|
|
665
|
-
* Returns a cosine wave with the given period. The output ranges from 0 to 1, and y = 0 when x = 0.
|
|
666
|
-
*
|
|
667
|
-
* @see https://www.geogebra.org/calculator/d3grfqqe
|
|
668
|
-
* @param v the input value
|
|
669
|
-
* @param period the period of the wave
|
|
670
|
-
* @category Periodic Functions
|
|
671
|
-
*/
|
|
672
|
-
function coswave(v, period = 1) {
|
|
673
|
-
v = (v * Math.PI * 2) / period;
|
|
674
|
-
return (-Math.cos(v) + 1) / 2;
|
|
675
|
-
}
|
|
676
|
-
scalar.coswave = coswave;
|
|
677
|
-
/**
|
|
678
|
-
* Returns a sine wave with the given period. The output ranges from 0 to 1, and y = 0 when x = 0.
|
|
679
|
-
*
|
|
680
|
-
* @see https://www.geogebra.org/calculator/d3grfqqe
|
|
681
|
-
* @param v the input value
|
|
682
|
-
* @param period the period of the wave
|
|
683
|
-
* @category Periodic Functions
|
|
684
|
-
*/
|
|
685
|
-
function sinwave(v, period = 1) {
|
|
686
|
-
v = (v * Math.PI * 2) / period;
|
|
687
|
-
return (-Math.sin(v) + 1) / 2;
|
|
688
|
-
}
|
|
689
|
-
scalar.sinwave = sinwave;
|
|
690
|
-
/**
|
|
691
|
-
* Returns a square wave with the given period. The output is 0 for the first half and 1 for the second half of each period.
|
|
692
|
-
* @see https://www.geogebra.org/calculator/d3grfqqe
|
|
693
|
-
*
|
|
694
|
-
* @param x the input value
|
|
695
|
-
* @param period the period of the wave
|
|
696
|
-
* @category Periodic Functions
|
|
697
|
-
*/
|
|
698
|
-
function square(x, period = 1) {
|
|
699
|
-
x /= period;
|
|
700
|
-
const phase = ((x % 1) + 1) % 1;
|
|
701
|
-
return phase < 0.5 ? 0 : 1;
|
|
702
|
-
}
|
|
703
|
-
scalar.square = square;
|
|
704
|
-
/**
|
|
705
|
-
* Returns whether or not two numbers are approximately equal.
|
|
706
|
-
*
|
|
707
|
-
* @shorthands
|
|
708
|
-
* - {@link approx}
|
|
709
|
-
* - {@link equals}
|
|
710
|
-
*/
|
|
711
|
-
function approxEquals(a, b) {
|
|
712
|
-
return (Math.abs(a - b) <=
|
|
713
|
-
Common.EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b)));
|
|
714
|
-
}
|
|
715
|
-
scalar.approxEquals = approxEquals;
|
|
716
|
-
/**
|
|
717
|
-
* Alias for {@link approxEquals}
|
|
718
|
-
* @category Shorthands
|
|
719
|
-
*/
|
|
720
|
-
scalar.approx = approxEquals;
|
|
721
|
-
/**
|
|
722
|
-
* Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
|
|
723
|
-
* @category Shorthands
|
|
724
|
-
* @deprecated Use {@link approxEquals} instead
|
|
725
|
-
*/
|
|
726
|
-
scalar.equals = approxEquals;
|
|
727
|
-
})(scalar || (exports.scalar = scalar = {}));
|
|
728
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjYWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBa0M7QUFFbEM7OztHQUdHO0FBQ0gsSUFBaUIsTUFBTSxDQTJ0QnRCO0FBM3RCRCxXQUFpQixNQUFNO0lBQ3RCOztPQUVHO0lBQ0gsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBWTtRQUNsQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFGZSxVQUFHLE1BRWxCLENBQUE7SUFFRDs7Ozs7T0FLRztJQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEVBQVk7UUFDdkMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxDQUFBO1FBQ1QsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2QsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBUGUsZUFBUSxXQU92QixDQUFBO0lBRUQ7OztPQUdHO0lBQ1UsVUFBRyxHQUFHLFFBQVEsQ0FBQTtJQUUzQjs7T0FFRztJQUNILFNBQWdCLEtBQUssQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDYixDQUFDO0lBRmUsWUFBSyxRQUVwQixDQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFnQixRQUFR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
|