1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
function mat4() {
return [
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
]
}
function orthographic(pLeft, pRight, pBottom, pTop) {
const lResult = mat4();
lResult[0] = 2.0 / (pRight - pLeft);
lResult[5] = 2.0 / (pTop - pBottom);
lResult[10] = 1.0;
lResult[12] = -(pRight + pLeft) / (pRight - pLeft);
lResult[13] = -(pTop + pBottom) / (pTop - pBottom);
return lResult;
}
function translateMatrix(m, x, y, z) {
m = [...m];
m[12] += x;
m[13] += y;
m[14] += z;
return m;
}
function rotateMatrix2d(m, angle) {
m = [...m];
m[0] = Math.cos(angle);
m[1] = -Math.sin(angle);
m[4] = Math.sin(angle);
m[5] = Math.cos(angle);
return m;
}
function scaleMatrix(m, x, y, z) {
m = [...m];
m[0] = m[0] * x;
m[5] = m[5] * y;
m[10] = m[10] * z;
return m;
}
function multMat4ByVec2(matrix, vec) {
var lInnerVec = {...vec};
lInnerVec.z = 0.0;
lInnerVec.w = 1.0;
return {
x: lInnerVec.x * matrix[0] + lInnerVec.y * matrix[4] + lInnerVec.z * matrix[8] + lInnerVec.w * matrix[12],
y: lInnerVec.x * matrix[1] + lInnerVec.y * matrix[5] + lInnerVec.z * matrix[9] + lInnerVec.w * matrix[13]
};
}
function multMat4ByVec4(matrix, vec) {
return {
x: vec.x * matrix[0] + vec.y * matrix[4] + vec.z * matrix[8] + vec.w * matrix[12],
y: vec.x * matrix[1] + vec.y * matrix[5] + vec.z * matrix[9] + vec.w * matrix[13],
z: vec.x * matrix[2] + vec.y * matrix[6] + vec.z * matrix[10] + vec.w * matrix[14],
w: vec.x * matrix[3] + vec.y * matrix[7] + vec.z * matrix[11] + vec.w * matrix[15]
};
}
|