Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries)
Setup JS class Mat4 {
data = new Float 32Array (16 );
constructor ( ) {
this .data [0 ] = this .data [5 ] = this .data [10 ] = this .data [15 ] = 1 ;
}
mul2 (lhs, rhs ) {
const a = lhs.data ;
const b = rhs.data ;
const r = this .data ;
const a00 = a[0 ];
const a01 = a[1 ];
const a02 = a[2 ];
const a03 = a[3 ];
const a10 = a[4 ];
const a11 = a[5 ];
const a12 = a[6 ];
const a13 = a[7 ];
const a20 = a[8 ];
const a21 = a[9 ];
const a22 = a[10 ];
const a23 = a[11 ];
const a30 = a[12 ];
const a31 = a[13 ];
const a32 = a[14 ];
const a33 = a[15 ];
let b0, b1, b2, b3;
b0 = b[0 ];
b1 = b[1 ];
b2 = b[2 ];
b3 = b[3 ];
r[0 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[1 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[2 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[3 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
b0 = b[4 ];
b1 = b[5 ];
b2 = b[6 ];
b3 = b[7 ];
r[4 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[5 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[6 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[7 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
b0 = b[8 ];
b1 = b[9 ];
b2 = b[10 ];
b3 = b[11 ];
r[8 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[9 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[10 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[11 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
b0 = b[12 ];
b1 = b[13 ];
b2 = b[14 ];
b3 = b[15 ];
r[12 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[13 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[14 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[15 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
return this ;
}
mul2opt (lhs, rhs ) {
const a = lhs.data ;
const b = rhs.data ;
const r = this .data ;
const a00 = a[0 ];
const a01 = a[1 ];
const a02 = a[2 ];
const a03 = a[3 ];
const a10 = a[4 ];
const a11 = a[5 ];
const a12 = a[6 ];
const a13 = a[7 ];
const a20 = a[8 ];
const a21 = a[9 ];
const a22 = a[10 ];
const a23 = a[11 ];
const a30 = a[12 ];
const a31 = a[13 ];
const a32 = a[14 ];
const a33 = a[15 ];
r[0 ] = a00 * b[0 ] + a10 * b[1 ] + a20 * b[2 ] + a30 * b[3 ];
r[1 ] = a01 * b[0 ] + a11 * b[1 ] + a21 * b[2 ] + a31 * b[3 ];
r[2 ] = a02 * b[0 ] + a12 * b[1 ] + a22 * b[2 ] + a32 * b[3 ];
r[3 ] = a03 * b[0 ] + a13 * b[1 ] + a23 * b[2 ] + a33 * b[3 ];
r[4 ] = a00 * b[4 ] + a10 * b[5 ] + a20 * b[6 ] + a30 * b[7 ];
r[5 ] = a01 * b[4 ] + a11 * b[5 ] + a21 * b[6 ] + a31 * b[7 ];
r[6 ] = a02 * b[4 ] + a12 * b[5 ] + a22 * b[6 ] + a32 * b[7 ];
r[7 ] = a03 * b[4 ] + a13 * b[5 ] + a23 * b[6 ] + a33 * b[7 ];
r[8 ] = a00 * b[8 ] + a10 * b[9 ] + a20 * b[10 ] + a30 * b[11 ];
r[9 ] = a01 * b[8 ] + a11 * b[9 ] + a21 * b[10 ] + a31 * b[11 ];
r[10 ] = a02 * b[8 ] + a12 * b[9 ] + a22 * b[10 ] + a32 * b[11 ];
r[11 ] = a03 * b[8 ] + a13 * b[9 ] + a23 * b[10 ] + a33 * b[11 ];
r[12 ] = a00 * b[12 ] + a10 * b[13 ] + a20 * b[14 ] + a30 * b[15 ];
r[13 ] = a01 * b[12 ] + a11 * b[13 ] + a21 * b[14 ] + a31 * b[15 ];
r[14 ] = a02 * b[12 ] + a12 * b[13 ] + a22 * b[14 ] + a32 * b[15 ];
r[14 ] = a03 * b[12 ] + a13 * b[13 ] + a23 * b[14 ] + a33 * b[15 ];
}
}
class Mat4Fast {
data = [
1 , 0 , 0 , 0 ,
0 , 1 , 0 , 0 ,
0 , 0 , 1 , 0 ,
0 , 0 , 0 , 1
];
mul2 (lhs, rhs ) {
const a = lhs.data ;
const b = rhs.data ;
const r = this .data ;
const a00 = a[0 ];
const a01 = a[1 ];
const a02 = a[2 ];
const a03 = a[3 ];
const a10 = a[4 ];
const a11 = a[5 ];
const a12 = a[6 ];
const a13 = a[7 ];
const a20 = a[8 ];
const a21 = a[9 ];
const a22 = a[10 ];
const a23 = a[11 ];
const a30 = a[12 ];
const a31 = a[13 ];
const a32 = a[14 ];
const a33 = a[15 ];
let b0, b1, b2, b3;
b0 = b[0 ];
b1 = b[1 ];
b2 = b[2 ];
b3 = b[3 ];
r[0 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[1 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[2 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[3 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
b0 = b[4 ];
b1 = b[5 ];
b2 = b[6 ];
b3 = b[7 ];
r[4 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[5 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[6 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[7 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
b0 = b[8 ];
b1 = b[9 ];
b2 = b[10 ];
b3 = b[11 ];
r[8 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[9 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[10 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[11 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
b0 = b[12 ];
b1 = b[13 ];
b2 = b[14 ];
b3 = b[15 ];
r[12 ] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;
r[13 ] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;
r[14 ] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;
r[15 ] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;
return this ;
}
mul2opt (lhs, rhs ) {
const a = lhs.data ;
const b = rhs.data ;
const r = this .data ;
const a00 = a[0 ];
const a01 = a[1 ];
const a02 = a[2 ];
const a03 = a[3 ];
const a10 = a[4 ];
const a11 = a[5 ];
const a12 = a[6 ];
const a13 = a[7 ];
const a20 = a[8 ];
const a21 = a[9 ];
const a22 = a[10 ];
const a23 = a[11 ];
const a30 = a[12 ];
const a31 = a[13 ];
const a32 = a[14 ];
const a33 = a[15 ];
r[0 ] = a00 * b[0 ] + a10 * b[1 ] + a20 * b[2 ] + a30 * b[3 ];
r[1 ] = a01 * b[0 ] + a11 * b[1 ] + a21 * b[2 ] + a31 * b[3 ];
r[2 ] = a02 * b[0 ] + a12 * b[1 ] + a22 * b[2 ] + a32 * b[3 ];
r[3 ] = a03 * b[0 ] + a13 * b[1 ] + a23 * b[2 ] + a33 * b[3 ];
r[4 ] = a00 * b[4 ] + a10 * b[5 ] + a20 * b[6 ] + a30 * b[7 ];
r[5 ] = a01 * b[4 ] + a11 * b[5 ] + a21 * b[6 ] + a31 * b[7 ];
r[6 ] = a02 * b[4 ] + a12 * b[5 ] + a22 * b[6 ] + a32 * b[7 ];
r[7 ] = a03 * b[4 ] + a13 * b[5 ] + a23 * b[6 ] + a33 * b[7 ];
r[8 ] = a00 * b[8 ] + a10 * b[9 ] + a20 * b[10 ] + a30 * b[11 ];
r[9 ] = a01 * b[8 ] + a11 * b[9 ] + a21 * b[10 ] + a31 * b[11 ];
r[10 ] = a02 * b[8 ] + a12 * b[9 ] + a22 * b[10 ] + a32 * b[11 ];
r[11 ] = a03 * b[8 ] + a13 * b[9 ] + a23 * b[10 ] + a33 * b[11 ];
r[12 ] = a00 * b[12 ] + a10 * b[13 ] + a20 * b[14 ] + a30 * b[15 ];
r[13 ] = a01 * b[12 ] + a11 * b[13 ] + a21 * b[14 ] + a31 * b[15 ];
r[14 ] = a02 * b[12 ] + a12 * b[13 ] + a22 * b[14 ] + a32 * b[15 ];
r[14 ] = a03 * b[12 ] + a13 * b[13 ] + a23 * b[14 ] + a33 * b[15 ];
}
}
const m1 = new Mat 4();
const m2 = new Mat 4();
const m3 = new Mat 4();
const f1 = new Mat 4Fast();
const f2 = new Mat 4Fast();
const f3 = new Mat 4Fast();
Teardown JS