pixospritz-core 0.10.1 → 1.0.1
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/README.md +36 -286
- package/dist/bundle.js +13 -3
- package/dist/bundle.js.map +1 -1
- package/dist/style.css +1 -0
- package/package.json +43 -44
- package/src/components/WebGLView.jsx +318 -0
- package/src/css/pixos.css +372 -0
- package/src/engine/actions/animate.js +41 -0
- package/src/engine/actions/changezone.js +135 -0
- package/src/engine/actions/chat.js +109 -0
- package/src/engine/actions/dialogue.js +90 -0
- package/src/engine/actions/face.js +22 -0
- package/src/engine/actions/greeting.js +28 -0
- package/src/engine/actions/interact.js +86 -0
- package/src/engine/actions/move.js +67 -0
- package/src/engine/actions/patrol.js +109 -0
- package/src/engine/actions/prompt.js +185 -0
- package/src/engine/actions/script.js +42 -0
- package/src/engine/core/audio/AudioSystem.js +543 -0
- package/src/engine/core/cutscene/PxcPlayer.js +956 -0
- package/src/engine/core/cutscene/manager.js +243 -0
- package/src/engine/core/database/index.js +75 -0
- package/src/engine/core/debug/index.js +371 -0
- package/src/engine/core/hud/index.js +765 -0
- package/src/engine/core/index.js +540 -0
- package/src/engine/core/input/gamepad/Controller.js +71 -0
- package/src/engine/core/input/gamepad/ControllerButtons.js +231 -0
- package/src/engine/core/input/gamepad/ControllerStick.js +173 -0
- package/src/engine/core/input/gamepad/index.js +592 -0
- package/src/engine/core/input/keyboard.js +196 -0
- package/src/engine/core/input/manager.js +485 -0
- package/src/engine/core/input/mouse.js +203 -0
- package/src/engine/core/input/touch.js +175 -0
- package/src/engine/core/mode/manager.js +199 -0
- package/src/engine/core/net/manager.js +535 -0
- package/src/engine/core/queue/action.js +83 -0
- package/src/engine/core/queue/event.js +82 -0
- package/src/engine/core/queue/index.js +44 -0
- package/src/engine/core/queue/loadable.js +33 -0
- package/src/engine/core/render/CameraEffects.js +494 -0
- package/src/engine/core/render/FrustumCuller.js +417 -0
- package/src/engine/core/render/LODManager.js +285 -0
- package/src/engine/core/render/ParticleManager.js +529 -0
- package/src/engine/core/render/TextureAtlas.js +465 -0
- package/src/engine/core/render/camera.js +338 -0
- package/src/engine/core/render/light.js +197 -0
- package/src/engine/core/render/manager.js +1079 -0
- package/src/engine/core/render/shaders.js +110 -0
- package/src/engine/core/render/skybox.js +342 -0
- package/src/engine/core/resource/manager.js +133 -0
- package/src/engine/core/resource/object.js +611 -0
- package/src/engine/core/resource/texture.js +103 -0
- package/src/engine/core/resource/tileset.js +177 -0
- package/src/engine/core/scene/avatar.js +215 -0
- package/src/engine/core/scene/speech.js +138 -0
- package/src/engine/core/scene/sprite.js +702 -0
- package/src/engine/core/scene/spritz.js +189 -0
- package/src/engine/core/scene/world.js +681 -0
- package/src/engine/core/scene/zone.js +1167 -0
- package/src/engine/core/store/index.js +110 -0
- package/src/engine/dynamic/animatedSprite.js +64 -0
- package/src/engine/dynamic/animatedTile.js +98 -0
- package/src/engine/dynamic/avatar.js +110 -0
- package/src/engine/dynamic/map.js +174 -0
- package/src/engine/dynamic/sprite.js +255 -0
- package/src/engine/dynamic/spritz.js +119 -0
- package/src/engine/events/EventSystem.js +609 -0
- package/src/engine/events/camera.js +142 -0
- package/src/engine/events/chat.js +75 -0
- package/src/engine/events/menu.js +186 -0
- package/src/engine/scripting/CallbackManager.js +514 -0
- package/src/engine/scripting/PixoScriptInterpreter.js +81 -0
- package/src/engine/scripting/PixoScriptLibrary.js +704 -0
- package/src/engine/shaders/effects/index.js +450 -0
- package/src/engine/shaders/fs.js +222 -0
- package/src/engine/shaders/particles/fs.js +41 -0
- package/src/engine/shaders/particles/vs.js +61 -0
- package/src/engine/shaders/picker/fs.js +34 -0
- package/src/engine/shaders/picker/init.js +62 -0
- package/src/engine/shaders/picker/vs.js +42 -0
- package/src/engine/shaders/pxsl/README.md +250 -0
- package/src/engine/shaders/pxsl/index.js +25 -0
- package/src/engine/shaders/pxsl/library.js +608 -0
- package/src/engine/shaders/pxsl/manager.js +338 -0
- package/src/engine/shaders/pxsl/specification.js +363 -0
- package/src/engine/shaders/pxsl/transpiler.js +753 -0
- package/src/engine/shaders/skybox/cosmic/fs.js +147 -0
- package/src/engine/shaders/skybox/cosmic/vs.js +23 -0
- package/src/engine/shaders/skybox/matrix/fs.js +127 -0
- package/src/engine/shaders/skybox/matrix/vs.js +23 -0
- package/src/engine/shaders/skybox/morning/fs.js +109 -0
- package/src/engine/shaders/skybox/morning/vs.js +23 -0
- package/src/engine/shaders/skybox/neon/fs.js +119 -0
- package/src/engine/shaders/skybox/neon/vs.js +23 -0
- package/src/engine/shaders/skybox/sky/fs.js +114 -0
- package/src/engine/shaders/skybox/sky/vs.js +23 -0
- package/src/engine/shaders/skybox/sunset/fs.js +101 -0
- package/src/engine/shaders/skybox/sunset/vs.js +23 -0
- package/src/engine/shaders/transition/blur/fs.js +42 -0
- package/src/engine/shaders/transition/blur/vs.js +26 -0
- package/src/engine/shaders/transition/cross/fs.js +36 -0
- package/src/engine/shaders/transition/cross/vs.js +26 -0
- package/src/engine/shaders/transition/crossBlur/fs.js +41 -0
- package/src/engine/shaders/transition/crossBlur/vs.js +25 -0
- package/src/engine/shaders/transition/dissolve/fs.js +78 -0
- package/src/engine/shaders/transition/dissolve/vs.js +24 -0
- package/src/engine/shaders/transition/fade/fs.js +31 -0
- package/src/engine/shaders/transition/fade/vs.js +27 -0
- package/src/engine/shaders/transition/iris/fs.js +52 -0
- package/src/engine/shaders/transition/iris/vs.js +24 -0
- package/src/engine/shaders/transition/pixelate/fs.js +44 -0
- package/src/engine/shaders/transition/pixelate/vs.js +24 -0
- package/src/engine/shaders/transition/slide/fs.js +53 -0
- package/src/engine/shaders/transition/slide/vs.js +24 -0
- package/src/engine/shaders/transition/swirl/fs.js +39 -0
- package/src/engine/shaders/transition/swirl/vs.js +26 -0
- package/src/engine/shaders/transition/wipe/fs.js +50 -0
- package/src/engine/shaders/transition/wipe/vs.js +24 -0
- package/src/engine/shaders/vs.js +60 -0
- package/src/engine/utils/CameraController.js +506 -0
- package/src/engine/utils/ObjHelper.js +551 -0
- package/src/engine/utils/debug-logger.js +110 -0
- package/src/engine/utils/enums.js +305 -0
- package/src/engine/utils/generator.js +156 -0
- package/src/engine/utils/index.js +21 -0
- package/src/engine/utils/loaders/ActionLoader.js +77 -0
- package/src/engine/utils/loaders/AudioLoader.js +157 -0
- package/src/engine/utils/loaders/EventLoader.js +66 -0
- package/src/engine/utils/loaders/ObjectLoader.js +67 -0
- package/src/engine/utils/loaders/SpriteLoader.js +77 -0
- package/src/engine/utils/loaders/TilesetLoader.js +103 -0
- package/src/engine/utils/loaders/index.js +21 -0
- package/src/engine/utils/math/matrix4.js +367 -0
- package/src/engine/utils/math/vector.js +458 -0
- package/src/engine/utils/obj/_old_js/index.js +46 -0
- package/src/engine/utils/obj/_old_js/layout.js +308 -0
- package/src/engine/utils/obj/_old_js/material.js +711 -0
- package/src/engine/utils/obj/_old_js/mesh.js +761 -0
- package/src/engine/utils/obj/_old_js/utils.js +647 -0
- package/src/engine/utils/obj/index.js +24 -0
- package/src/engine/utils/obj/js/index.js +277 -0
- package/src/engine/utils/obj/js/loader.js +232 -0
- package/src/engine/utils/obj/layout.js +246 -0
- package/src/engine/utils/obj/material.js +665 -0
- package/src/engine/utils/obj/mesh.js +657 -0
- package/src/engine/utils/obj/ts/index.ts +72 -0
- package/src/engine/utils/obj/ts/layout.ts +265 -0
- package/src/engine/utils/obj/ts/material.ts +760 -0
- package/src/engine/utils/obj/ts/mesh.ts +785 -0
- package/src/engine/utils/obj/ts/utils.ts +501 -0
- package/src/engine/utils/obj/utils.js +428 -0
- package/src/engine/utils/resources.js +18 -0
- package/src/index.jsx +55 -0
- package/src/spritz/player.js +18 -0
- package/src/spritz/readme.md +18 -0
- package/LICENSE +0 -437
- package/dist/bundle.js.LICENSE.txt +0 -31
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/* *\
|
|
2
|
+
** ----------------------------------------------- **
|
|
3
|
+
** Calliope - Pixos Game Engine **
|
|
4
|
+
** ----------------------------------------------- **
|
|
5
|
+
** Copyright (c) 2020-2025 - Kyle Derby MacInnis **
|
|
6
|
+
** **
|
|
7
|
+
** Any unauthorized distribution or transfer **
|
|
8
|
+
** of this work is strictly prohibited. **
|
|
9
|
+
** **
|
|
10
|
+
** All Rights Reserved. **
|
|
11
|
+
** ----------------------------------------------- **
|
|
12
|
+
\* */
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {Float32Array} Vector3 - A 3-component vector as a Float32Array.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {Float32Array} Vector4 - A 4-component vector as a Float32Array.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @typedef {Float32Array} Matrix3 - A 3x3 matrix as a Float32Array.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @typedef {Float32Array} Matrix4 - A 4x4 matrix as a Float32Array.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
const EPSILON = 0.000001;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Creates a Matrix4 from an array of 16 numbers.
|
|
34
|
+
* @param {number[]} mat - Array of 16 numbers representing the matrix.
|
|
35
|
+
* @returns {Matrix4} The resulting 4x4 matrix.
|
|
36
|
+
*/
|
|
37
|
+
const from = (mat) => {
|
|
38
|
+
let dest = new Float32Array(16);
|
|
39
|
+
dest[0] = mat[0];
|
|
40
|
+
dest[1] = mat[1];
|
|
41
|
+
dest[2] = mat[2];
|
|
42
|
+
dest[3] = mat[3];
|
|
43
|
+
dest[4] = mat[4];
|
|
44
|
+
dest[5] = mat[5];
|
|
45
|
+
dest[6] = mat[6];
|
|
46
|
+
dest[7] = mat[7];
|
|
47
|
+
dest[8] = mat[8];
|
|
48
|
+
dest[9] = mat[9];
|
|
49
|
+
dest[10] = mat[10];
|
|
50
|
+
dest[11] = mat[11];
|
|
51
|
+
dest[12] = mat[12];
|
|
52
|
+
dest[13] = mat[13];
|
|
53
|
+
dest[14] = mat[14];
|
|
54
|
+
dest[15] = mat[15];
|
|
55
|
+
return dest;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Creates an identity Matrix4.
|
|
60
|
+
* @returns {Matrix4} The identity 4x4 matrix.
|
|
61
|
+
*/
|
|
62
|
+
const create = () => {
|
|
63
|
+
let matrix = new Float32Array(16);
|
|
64
|
+
matrix[0] = 1;
|
|
65
|
+
matrix[5] = 1;
|
|
66
|
+
matrix[10] = 1;
|
|
67
|
+
matrix[15] = 1;
|
|
68
|
+
return matrix;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Creates an identity Matrix3.
|
|
73
|
+
* @returns {Matrix3} The identity 3x3 matrix.
|
|
74
|
+
*/
|
|
75
|
+
const create3 = () => {
|
|
76
|
+
let matrix = new Float32Array(9);
|
|
77
|
+
matrix[0] = 1;
|
|
78
|
+
matrix[4] = 1;
|
|
79
|
+
matrix[8] = 1;
|
|
80
|
+
return matrix;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Creates a perspective projection Matrix4.
|
|
85
|
+
* @param {number} fovy - Vertical field of view in radians.
|
|
86
|
+
* @param {number} aspect - Aspect ratio (width/height).
|
|
87
|
+
* @param {number} near - Near clipping plane.
|
|
88
|
+
* @param {number} far - Far clipping plane.
|
|
89
|
+
* @returns {Matrix4} The perspective projection matrix.
|
|
90
|
+
*/
|
|
91
|
+
const perspective = (fovy, aspect, near, far) => {
|
|
92
|
+
let matrix = new Float32Array(16);
|
|
93
|
+
let f = 1.0 / Math.tan(fovy / 2);
|
|
94
|
+
matrix[0] = f / aspect;
|
|
95
|
+
matrix[1] = 0;
|
|
96
|
+
matrix[2] = 0;
|
|
97
|
+
matrix[3] = 0;
|
|
98
|
+
matrix[4] = 0;
|
|
99
|
+
matrix[5] = f;
|
|
100
|
+
matrix[6] = 0;
|
|
101
|
+
matrix[7] = 0;
|
|
102
|
+
matrix[8] = 0;
|
|
103
|
+
matrix[9] = 0;
|
|
104
|
+
matrix[10] = -1;
|
|
105
|
+
matrix[11] = -1;
|
|
106
|
+
matrix[12] = 0;
|
|
107
|
+
matrix[13] = 0;
|
|
108
|
+
matrix[14] = -2 * near;
|
|
109
|
+
matrix[15] = 0;
|
|
110
|
+
if (far != null && far !== Infinity && far !== near) {
|
|
111
|
+
const nf = 1 / (near - far);
|
|
112
|
+
matrix[10] = (far + near) * nf;
|
|
113
|
+
matrix[14] = 2 * far * near * nf;
|
|
114
|
+
}
|
|
115
|
+
return matrix;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Creates a frustum projection Matrix4.
|
|
120
|
+
* @param {number} l - Left clipping plane.
|
|
121
|
+
* @param {number} r - Right clipping plane.
|
|
122
|
+
* @param {number} b - Bottom clipping plane.
|
|
123
|
+
* @param {number} t - Top clipping plane.
|
|
124
|
+
* @param {number} n - Near clipping plane.
|
|
125
|
+
* @param {number} f - Far clipping plane.
|
|
126
|
+
* @returns {Matrix4} The frustum projection matrix.
|
|
127
|
+
*/
|
|
128
|
+
const frustum = (l, r, b, t, n, f) => {
|
|
129
|
+
let m = new Float32Array(16);
|
|
130
|
+
|
|
131
|
+
m[0] = (2 * n) / (r - l);
|
|
132
|
+
m[1] = 0;
|
|
133
|
+
m[2] = (r + l) / (r - l);
|
|
134
|
+
m[3] = 0;
|
|
135
|
+
|
|
136
|
+
m[4] = 0;
|
|
137
|
+
m[5] = (2 * n) / (t - b);
|
|
138
|
+
m[6] = (t + b) / (t - b);
|
|
139
|
+
m[7] = 0;
|
|
140
|
+
|
|
141
|
+
m[8] = 0;
|
|
142
|
+
m[9] = 0;
|
|
143
|
+
m[10] = -(f + n) / (f - n);
|
|
144
|
+
m[11] = (-2 * f * n) / (f - n);
|
|
145
|
+
|
|
146
|
+
m[12] = 0;
|
|
147
|
+
m[13] = 0;
|
|
148
|
+
m[14] = -1;
|
|
149
|
+
m[15] = 0;
|
|
150
|
+
|
|
151
|
+
return m;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Translates a Matrix4 by a vector.
|
|
156
|
+
* @param {Matrix4} m1 - The matrix to store the result in.
|
|
157
|
+
* @param {Matrix4} m2 - The matrix to translate.
|
|
158
|
+
* @param {Vector3} v - The translation vector [x, y, z].
|
|
159
|
+
* @returns {Matrix4} The translated matrix.
|
|
160
|
+
*/
|
|
161
|
+
const translate = (m1, m2, v) => {
|
|
162
|
+
let matrix = m1;
|
|
163
|
+
let [x, y, z] = v;
|
|
164
|
+
|
|
165
|
+
let [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = m2;
|
|
166
|
+
if (m1 !== m2) {
|
|
167
|
+
matrix[0] = a00;
|
|
168
|
+
matrix[1] = a01;
|
|
169
|
+
matrix[2] = a02;
|
|
170
|
+
matrix[3] = a03;
|
|
171
|
+
matrix[4] = a10;
|
|
172
|
+
matrix[5] = a11;
|
|
173
|
+
matrix[6] = a12;
|
|
174
|
+
matrix[7] = a13;
|
|
175
|
+
matrix[8] = a20;
|
|
176
|
+
matrix[9] = a21;
|
|
177
|
+
matrix[10] = a22;
|
|
178
|
+
matrix[11] = a23;
|
|
179
|
+
}
|
|
180
|
+
matrix[12] = a00 * x + a10 * y + a20 * z + m2[12];
|
|
181
|
+
matrix[13] = a01 * x + a11 * y + a21 * z + m2[13];
|
|
182
|
+
matrix[14] = a02 * x + a12 * y + a22 * z + m2[14];
|
|
183
|
+
matrix[15] = a03 * x + a13 * y + a23 * z + m2[15];
|
|
184
|
+
return matrix;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Subtracts two vectors.
|
|
189
|
+
* @param {Vector3} a - The first vector.
|
|
190
|
+
* @param {Vector3} b - The second vector.
|
|
191
|
+
* @returns {Vector3} The resulting vector a - b.
|
|
192
|
+
*/
|
|
193
|
+
const subtractVectors = (a, b) => {
|
|
194
|
+
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Rotates a Matrix4 around an axis by a given angle.
|
|
199
|
+
* @param {Matrix4} m1 - The matrix to store the result in.
|
|
200
|
+
* @param {Matrix4} m2 - The matrix to rotate.
|
|
201
|
+
* @param {number} rad - The angle in radians.
|
|
202
|
+
* @param {Vector3} axis - The axis to rotate around [x, y, z].
|
|
203
|
+
* @returns {Matrix4} The rotated matrix.
|
|
204
|
+
*/
|
|
205
|
+
const rotate = (m1, m2, rad, axis) => {
|
|
206
|
+
let matrix = m1;
|
|
207
|
+
let [x, y, z] = axis;
|
|
208
|
+
let len = Math.hypot(x, y, z);
|
|
209
|
+
|
|
210
|
+
if (len < EPSILON) {
|
|
211
|
+
throw new Error('Matrix4*4 rotate has wrong axis');
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
len = 1 / len;
|
|
215
|
+
x *= len;
|
|
216
|
+
y *= len;
|
|
217
|
+
z *= len;
|
|
218
|
+
|
|
219
|
+
let s = Math.sin(rad);
|
|
220
|
+
let c = Math.cos(rad);
|
|
221
|
+
let t = 1 - c;
|
|
222
|
+
|
|
223
|
+
let [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = m2;
|
|
224
|
+
|
|
225
|
+
let b00 = x * x * t + c;
|
|
226
|
+
let b01 = y * x * t + z * s;
|
|
227
|
+
let b02 = z * x * t - y * s;
|
|
228
|
+
let b10 = x * y * t - z * s;
|
|
229
|
+
let b11 = y * y * t + c;
|
|
230
|
+
let b12 = z * y * t + x * s;
|
|
231
|
+
let b20 = x * z * t + y * s;
|
|
232
|
+
let b21 = y * z * t - x * s;
|
|
233
|
+
let b22 = z * z * t + c;
|
|
234
|
+
|
|
235
|
+
matrix[0] = a00 * b00 + a10 * b01 + a20 * b02;
|
|
236
|
+
matrix[1] = a01 * b00 + a11 * b01 + a21 * b02;
|
|
237
|
+
matrix[2] = a02 * b00 + a12 * b01 + a22 * b02;
|
|
238
|
+
matrix[3] = a03 * b00 + a13 * b01 + a23 * b02;
|
|
239
|
+
matrix[4] = a00 * b10 + a10 * b11 + a20 * b12;
|
|
240
|
+
matrix[5] = a01 * b10 + a11 * b11 + a21 * b12;
|
|
241
|
+
matrix[6] = a02 * b10 + a12 * b11 + a22 * b12;
|
|
242
|
+
matrix[7] = a03 * b10 + a13 * b11 + a23 * b12;
|
|
243
|
+
matrix[8] = a00 * b20 + a10 * b21 + a20 * b22;
|
|
244
|
+
matrix[9] = a01 * b20 + a11 * b21 + a21 * b22;
|
|
245
|
+
matrix[10] = a02 * b20 + a12 * b21 + a22 * b22;
|
|
246
|
+
matrix[11] = a03 * b20 + a13 * b21 + a23 * b22;
|
|
247
|
+
|
|
248
|
+
if (m2 !== m1) {
|
|
249
|
+
matrix[12] = m2[12];
|
|
250
|
+
matrix[13] = m2[13];
|
|
251
|
+
matrix[14] = m2[14];
|
|
252
|
+
matrix[15] = m2[15];
|
|
253
|
+
}
|
|
254
|
+
return matrix;
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Checks if a value is a power of 2.
|
|
259
|
+
* @param {number} value - The value to check.
|
|
260
|
+
* @returns {boolean} True if the value is a power of 2.
|
|
261
|
+
*/
|
|
262
|
+
function isPowerOf2(value) {
|
|
263
|
+
return (value & (value - 1)) == 0;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Copies a Matrix4 to another.
|
|
268
|
+
* @param {Matrix4} mat - The source matrix.
|
|
269
|
+
* @param {Matrix4} dest - The destination matrix.
|
|
270
|
+
* @returns {Matrix4} The destination matrix.
|
|
271
|
+
*/
|
|
272
|
+
function set(mat, dest) {
|
|
273
|
+
dest[0] = mat[0];
|
|
274
|
+
dest[1] = mat[1];
|
|
275
|
+
dest[2] = mat[2];
|
|
276
|
+
dest[3] = mat[3];
|
|
277
|
+
dest[4] = mat[4];
|
|
278
|
+
dest[5] = mat[5];
|
|
279
|
+
dest[6] = mat[6];
|
|
280
|
+
dest[7] = mat[7];
|
|
281
|
+
dest[8] = mat[8];
|
|
282
|
+
dest[9] = mat[9];
|
|
283
|
+
dest[10] = mat[10];
|
|
284
|
+
dest[11] = mat[11];
|
|
285
|
+
dest[12] = mat[12];
|
|
286
|
+
dest[13] = mat[13];
|
|
287
|
+
dest[14] = mat[14];
|
|
288
|
+
dest[15] = mat[15];
|
|
289
|
+
return dest;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix.
|
|
294
|
+
* @param {Matrix3} out - The Matrix3 to store the result in.
|
|
295
|
+
* @param {Matrix4} a - The Matrix4 to derive the normal matrix from.
|
|
296
|
+
* @returns {Matrix3} The resulting normal matrix.
|
|
297
|
+
*/
|
|
298
|
+
function normalFromMat4(out, a) {
|
|
299
|
+
var a00 = a[0],
|
|
300
|
+
a01 = a[1],
|
|
301
|
+
a02 = a[2],
|
|
302
|
+
a03 = a[3];
|
|
303
|
+
var a10 = a[4],
|
|
304
|
+
a11 = a[5],
|
|
305
|
+
a12 = a[6],
|
|
306
|
+
a13 = a[7];
|
|
307
|
+
var a20 = a[8],
|
|
308
|
+
a21 = a[9],
|
|
309
|
+
a22 = a[10],
|
|
310
|
+
a23 = a[11];
|
|
311
|
+
var a30 = a[12],
|
|
312
|
+
a31 = a[13],
|
|
313
|
+
a32 = a[14],
|
|
314
|
+
a33 = a[15];
|
|
315
|
+
|
|
316
|
+
var b00 = a00 * a11 - a01 * a10;
|
|
317
|
+
var b01 = a00 * a12 - a02 * a10;
|
|
318
|
+
var b02 = a00 * a13 - a03 * a10;
|
|
319
|
+
var b03 = a01 * a12 - a02 * a11;
|
|
320
|
+
var b04 = a01 * a13 - a03 * a11;
|
|
321
|
+
var b05 = a02 * a13 - a03 * a12;
|
|
322
|
+
var b06 = a20 * a31 - a21 * a30;
|
|
323
|
+
var b07 = a20 * a32 - a22 * a30;
|
|
324
|
+
var b08 = a20 * a33 - a23 * a30;
|
|
325
|
+
var b09 = a21 * a32 - a22 * a31;
|
|
326
|
+
var b10 = a21 * a33 - a23 * a31;
|
|
327
|
+
var b11 = a22 * a33 - a23 * a32;
|
|
328
|
+
|
|
329
|
+
// Calculate the determinant
|
|
330
|
+
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
|
331
|
+
|
|
332
|
+
if (!det) {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
det = 1.0 / det;
|
|
336
|
+
|
|
337
|
+
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
|
|
338
|
+
out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
|
|
339
|
+
out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
|
|
340
|
+
|
|
341
|
+
out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
|
|
342
|
+
out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
|
|
343
|
+
out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
|
|
344
|
+
|
|
345
|
+
out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
|
|
346
|
+
out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
|
|
347
|
+
out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
|
|
348
|
+
|
|
349
|
+
return out;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Normalizes a vector to unit length.
|
|
354
|
+
* @param {Vector3} v - The vector to normalize.
|
|
355
|
+
* @returns {Vector3} The normalized vector.
|
|
356
|
+
*/
|
|
357
|
+
const normalize = (v) => {
|
|
358
|
+
let len = Math.hypot(...v);
|
|
359
|
+
// Guard against zero-length vectors which would produce NaN components.
|
|
360
|
+
if (!len || Math.abs(len) < EPSILON) {
|
|
361
|
+
// Return a safe default forward vector (world +Z) so callers don't get NaNs.
|
|
362
|
+
return [0, 0, 1];
|
|
363
|
+
}
|
|
364
|
+
return [v[0] / len, v[1] / len, v[2] / len];
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
export { from, normalize, subtractVectors, normalFromMat4, create, create3, perspective, frustum, translate, rotate, isPowerOf2, set };
|