@carbonenginejs/core-math 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +24 -0
- package/README.md +110 -0
- package/THIRD-PARTY-NOTICES.md +38 -0
- package/package.json +74 -0
- package/src/box3.js +1329 -0
- package/src/constants.js +16 -0
- package/src/curve.js +390 -0
- package/src/geometry/box.js +132 -0
- package/src/geometry/cylinder.js +234 -0
- package/src/geometry/helpers/LICENSE +15 -0
- package/src/geometry/helpers/earcut.js +766 -0
- package/src/geometry/helpers/misc.js +103 -0
- package/src/geometry/index.js +7 -0
- package/src/geometry/json.js +115 -0
- package/src/geometry/lathe.js +148 -0
- package/src/geometry/octahedron.js +0 -0
- package/src/geometry/plane.js +76 -0
- package/src/geometry/shape.js +95 -0
- package/src/geometry/sphere.js +116 -0
- package/src/geometry/torus.js +88 -0
- package/src/index.js +29 -0
- package/src/lne3.js +488 -0
- package/src/mat3.js +131 -0
- package/src/mat4.js +600 -0
- package/src/mesh.js +298 -0
- package/src/noise.js +225 -0
- package/src/num.js +735 -0
- package/src/pln.js +740 -0
- package/src/pool.js +160 -0
- package/src/quat.js +110 -0
- package/src/ray3.js +1056 -0
- package/src/sph3.js +718 -0
- package/src/tangent.js +256 -0
- package/src/tri3.js +650 -0
- package/src/utils.js +15 -0
- package/src/vec2.js +229 -0
- package/src/vec3.js +1116 -0
- package/src/vec4.js +315 -0
- package/src/vertex.js +109 -0
package/src/pool.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GL_BYTE,
|
|
3
|
+
GL_UNSIGNED_BYTE,
|
|
4
|
+
GL_SHORT,
|
|
5
|
+
GL_UNSIGNED_SHORT,
|
|
6
|
+
GL_INT,
|
|
7
|
+
GL_UNSIGNED_INT,
|
|
8
|
+
GL_FLOAT
|
|
9
|
+
} from "./constants.js";
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
function loop(n, f)
|
|
13
|
+
{
|
|
14
|
+
const result = Array(n);
|
|
15
|
+
for (let i = 0; i < n; ++i) result[i] = f(i);
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function nextPow16(v)
|
|
20
|
+
{
|
|
21
|
+
for (let i = 16; i <= (1 << 28); i *= 16)
|
|
22
|
+
{
|
|
23
|
+
if (v <= i) return i;
|
|
24
|
+
}
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function log2(v)
|
|
29
|
+
{
|
|
30
|
+
let r, shift;
|
|
31
|
+
r = (v > 0xFFFF) << 4;
|
|
32
|
+
v >>>= r;
|
|
33
|
+
shift = (v > 0xFF) << 3;
|
|
34
|
+
v >>>= shift;
|
|
35
|
+
r |= shift;
|
|
36
|
+
shift = (v > 0xF) << 2;
|
|
37
|
+
v >>>= shift;
|
|
38
|
+
r |= shift;
|
|
39
|
+
shift = (v > 0x3) << 1;
|
|
40
|
+
v >>>= shift;
|
|
41
|
+
r |= shift;
|
|
42
|
+
return r | (v >> 1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function createPool()
|
|
46
|
+
{
|
|
47
|
+
|
|
48
|
+
const bufferPool = loop(8, function ()
|
|
49
|
+
{
|
|
50
|
+
return [];
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
function free(buf)
|
|
54
|
+
{
|
|
55
|
+
bufferPool[log2(buf.byteLength) >> 2].push(buf);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function alloc(n)
|
|
59
|
+
{
|
|
60
|
+
let sz = nextPow16(n),
|
|
61
|
+
bin = bufferPool[log2(sz) >> 2];
|
|
62
|
+
|
|
63
|
+
if (bin.length > 0) return bin.pop();
|
|
64
|
+
|
|
65
|
+
return new ArrayBuffer(sz);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Shortcut to allocating a float 32 array
|
|
70
|
+
* @param {Number} length
|
|
71
|
+
* @returns {Float32Array}
|
|
72
|
+
*/
|
|
73
|
+
function allocF32(length)
|
|
74
|
+
{
|
|
75
|
+
const result = new Float32Array(alloc(4 * length), 0, length);
|
|
76
|
+
return result.length !== length ? result.subarray(0, length) : result;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Allocated a typed array of a given size
|
|
81
|
+
* @param {Number|Function}type
|
|
82
|
+
* @param {Number} n
|
|
83
|
+
* @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|null}
|
|
84
|
+
*/
|
|
85
|
+
function allocType(type, n)
|
|
86
|
+
{
|
|
87
|
+
let result = null;
|
|
88
|
+
switch (type)
|
|
89
|
+
{
|
|
90
|
+
case GL_BYTE:
|
|
91
|
+
case Int8Array:
|
|
92
|
+
result = new Int8Array(alloc(n), 0, n);
|
|
93
|
+
break;
|
|
94
|
+
|
|
95
|
+
case GL_UNSIGNED_BYTE:
|
|
96
|
+
case Uint8Array:
|
|
97
|
+
result = new Uint8Array(alloc(n), 0, n);
|
|
98
|
+
break;
|
|
99
|
+
|
|
100
|
+
case GL_SHORT:
|
|
101
|
+
case Int16Array:
|
|
102
|
+
result = new Int16Array(alloc(2 * n), 0, n);
|
|
103
|
+
break;
|
|
104
|
+
|
|
105
|
+
case GL_UNSIGNED_SHORT:
|
|
106
|
+
case Uint16Array:
|
|
107
|
+
result = new Uint16Array(alloc(2 * n), 0, n);
|
|
108
|
+
break;
|
|
109
|
+
|
|
110
|
+
case GL_INT:
|
|
111
|
+
case Int32Array:
|
|
112
|
+
result = new Int32Array(alloc(4 * n), 0, n);
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case GL_UNSIGNED_INT:
|
|
116
|
+
case Uint32Array:
|
|
117
|
+
result = new Uint32Array(alloc(4 * n), 0, n);
|
|
118
|
+
break;
|
|
119
|
+
|
|
120
|
+
case GL_FLOAT:
|
|
121
|
+
case Float32Array:
|
|
122
|
+
result = new Float32Array(alloc(4 * n), 0, n);
|
|
123
|
+
break;
|
|
124
|
+
|
|
125
|
+
default:
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (result.length !== n)
|
|
130
|
+
{
|
|
131
|
+
return result.subarray(0, n);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function freeType(array)
|
|
138
|
+
{
|
|
139
|
+
free(array.buffer);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
allocF32,
|
|
144
|
+
allocType,
|
|
145
|
+
unalloc: freeType,
|
|
146
|
+
freeType,
|
|
147
|
+
free
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export const pool = createPool();
|
|
153
|
+
|
|
154
|
+
export const {
|
|
155
|
+
allocF32,
|
|
156
|
+
allocType,
|
|
157
|
+
unalloc,
|
|
158
|
+
freeType,
|
|
159
|
+
free
|
|
160
|
+
} = pool;
|
package/src/quat.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { quat as glQuat } from "gl-matrix";
|
|
2
|
+
import { vec3 } from "./vec3.js";
|
|
3
|
+
import { num } from "./num.js";
|
|
4
|
+
import { pool } from "./pool.js";
|
|
5
|
+
|
|
6
|
+
const quat = { ...glQuat };
|
|
7
|
+
|
|
8
|
+
export { quat };
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Allocates a pooled vec4
|
|
12
|
+
* @returns {Float32Array|quat}
|
|
13
|
+
*/
|
|
14
|
+
quat.alloc = function()
|
|
15
|
+
{
|
|
16
|
+
return pool.allocF32(4);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Unallocates a pooled vec4
|
|
21
|
+
* @param {Float32Array|quat} a
|
|
22
|
+
*/
|
|
23
|
+
quat.unalloc = function(a)
|
|
24
|
+
{
|
|
25
|
+
pool.freeType(a);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Creates a quat from unit vectors
|
|
30
|
+
*
|
|
31
|
+
* @param {quat} out
|
|
32
|
+
* @param {vec3} from
|
|
33
|
+
* @param {vec3} to
|
|
34
|
+
* @returns {quat}
|
|
35
|
+
*/
|
|
36
|
+
quat.fromUnitVectors = function(out, from, to)
|
|
37
|
+
{
|
|
38
|
+
let r = vec3.dot(from, to) + 1;
|
|
39
|
+
if (r < num.EPSILON)
|
|
40
|
+
{
|
|
41
|
+
r = 0;
|
|
42
|
+
if (Math.abs(from[0]) > Math.abs(from[2]))
|
|
43
|
+
{
|
|
44
|
+
out[0] = -from[1];
|
|
45
|
+
out[1] = from[0];
|
|
46
|
+
out[2] = 0;
|
|
47
|
+
out[3] = r;
|
|
48
|
+
}
|
|
49
|
+
else
|
|
50
|
+
{
|
|
51
|
+
out[0] = 0;
|
|
52
|
+
out[1] = - from[2];
|
|
53
|
+
out[2] = from[1];
|
|
54
|
+
out[3] = r;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else
|
|
58
|
+
{
|
|
59
|
+
out[0] = from[1] * to[2] - from[2] * to[1];
|
|
60
|
+
out[1] = from[2] * to[0] - from[0] * to[2];
|
|
61
|
+
out[2] = from[0] * to[1] - from[1] * to[0];
|
|
62
|
+
out[3] = r;
|
|
63
|
+
}
|
|
64
|
+
return quat.normalize(out, out);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const {
|
|
68
|
+
add,
|
|
69
|
+
calculateW,
|
|
70
|
+
clone,
|
|
71
|
+
conjugate,
|
|
72
|
+
copy,
|
|
73
|
+
create,
|
|
74
|
+
dot,
|
|
75
|
+
equals,
|
|
76
|
+
exactEquals,
|
|
77
|
+
exp,
|
|
78
|
+
fromEuler,
|
|
79
|
+
fromMat3,
|
|
80
|
+
fromValues,
|
|
81
|
+
getAngle,
|
|
82
|
+
getAxisAngle,
|
|
83
|
+
identity,
|
|
84
|
+
invert,
|
|
85
|
+
len,
|
|
86
|
+
length,
|
|
87
|
+
lerp,
|
|
88
|
+
ln,
|
|
89
|
+
mul,
|
|
90
|
+
multiply,
|
|
91
|
+
normalize,
|
|
92
|
+
pow,
|
|
93
|
+
random,
|
|
94
|
+
rotateX,
|
|
95
|
+
rotateY,
|
|
96
|
+
rotateZ,
|
|
97
|
+
rotationTo,
|
|
98
|
+
scale,
|
|
99
|
+
set,
|
|
100
|
+
setAxes,
|
|
101
|
+
setAxisAngle,
|
|
102
|
+
slerp,
|
|
103
|
+
sqlerp,
|
|
104
|
+
sqrLen,
|
|
105
|
+
squaredLength,
|
|
106
|
+
str,
|
|
107
|
+
alloc,
|
|
108
|
+
unalloc,
|
|
109
|
+
fromUnitVectors
|
|
110
|
+
} = quat;
|