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.
- package/lib/esm/mat2.d.ts +1 -1
- package/lib/esm/mat2.d.ts.map +1 -1
- package/lib/esm/mat2.js +3 -2
- package/lib/esm/mat2d.d.ts.map +1 -1
- package/lib/esm/mat2d.js +4 -5
- package/lib/esm/mat3.d.ts.map +1 -1
- package/lib/esm/mat3.js +16 -15
- package/lib/esm/mat4.d.ts.map +1 -1
- package/lib/esm/mat4.js +18 -17
- package/lib/esm/quat.js +3 -3
- package/lib/esm/scalar.d.ts +6 -35
- package/lib/esm/scalar.d.ts.map +1 -1
- package/lib/esm/scalar.js +11 -53
- 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 -473
- package/lib/cjs/mat2d.d.ts +0 -329
- package/lib/cjs/mat2d.d.ts.map +0 -1
- package/lib/cjs/mat2d.js +0 -641
- package/lib/cjs/mat3.d.ts +0 -295
- package/lib/cjs/mat3.d.ts.map +0 -1
- package/lib/cjs/mat3.js +0 -670
- package/lib/cjs/mat4.d.ts +0 -532
- package/lib/cjs/mat4.d.ts.map +0 -1
- package/lib/cjs/mat4.js +0 -1576
- 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/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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LENBQUMsQ0FBTztRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRmUsU0FBSSxPQUVuQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixJQUFJLENBQUMsQ0FBTztRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRmUsU0FBSSxPQUVuQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRmUsVUFBSyxRQUVwQixDQUFBO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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
|