JSFiddle - React, Tailwind, and code Playground
by adil_invideo
HTML
<script src="https://pixijs.download/v6.1.0-rc.2/pixi.js"></script>
<script src="https://pagecdn.io/lib/mathjs/7.1.0/math.min.js"></script>
<input type="range" min=0 max=1 value=0 id="slider" step="0.001" />
CSS
body {
display: flex;
flex-direction: column;
}
JavaScript
const translateM = (m, mOffset, x, y, z) => {
for (let i = 0; i < 4; i++) {
const mi = mOffset + i;
m[12 + mi] += m[mi] * x + m[4 + mi] * y + m[8 + mi] * z;
}
};
const matrixLength = (x, y, z) => {
return Math.sqrt(x * x + y * y + z * z);
};
const M = {
degToRadian: (deg) => {
return deg * Math.PI / 180;
},
multiply: (a, b) => {
const out = [];
let a00 = a[0],
a01 = a[1],
a02 = a[2],
a03 = a[3];
let a10 = a[4],
a11 = a[5],
a12 = a[6],
a13 = a[7];
let a20 = a[8],
a21 = a[9],
a22 = a[10],
a23 = a[11];
let a30 = a[12],
a31 = a[13],
a32 = a[14],
a33 = a[15];
// Cache only the current line of the second matrix
let b0 = b[0],
b1 = b[1],
b2 = b[2],
b3 = b[3];
out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
b0 = b[4];
b1 = b[5];
b2 = b[6];
b3 = b[7];
out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
b0 = b[8];
b1 = b[9];
b2 = b[10];
b3 = b[11];
out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
b0 = b[12];
b1 = b[13];
b2 = b[14];
b3 = b[15];
out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
return out;
}
}
const Mat3 = {
translate: (tx, ty) => {
return [
1.0, 0.0, 0.0,
...