1 |
function d3d_transform_add_rotation_axis(arg0, arg1, arg2, arg3) |
2 |
{ |
3 |
var c = dcos(-arg3); |
4 |
var s = dsin(-arg3); |
5 |
var omc = 1 - c; |
6 |
var xx = arg0; |
7 |
var yy = arg1; |
8 |
var zz = arg2; |
9 |
var length2 = sqr(xx) + sqr(yy) + sqr(zz); |
10 |
var length = sqrt(length2); |
11 |
xx /= length; |
12 |
yy /= length; |
13 |
zz /= length; |
14 |
var mT; |
15 |
mT[0] = (omc * xx * xx) + c; |
16 |
mT[1] = (omc * xx * yy) + (s * zz); |
17 |
mT[2] = (omc * xx * zz) - (s * yy); |
18 |
mT[3] = 0; |
19 |
mT[4] = (omc * xx * yy) - (s * zz); |
20 |
mT[5] = (omc * yy * yy) + c; |
21 |
mT[6] = (omc * yy * zz) + (s * xx); |
22 |
mT[7] = 0; |
23 |
mT[8] = (omc * xx * zz) + (s * yy); |
24 |
mT[9] = (omc * yy * zz) - (s * xx); |
25 |
mT[10] = (omc * zz * zz) + c; |
26 |
mT[11] = 0; |
27 |
mT[12] = 0; |
28 |
mT[13] = 0; |
29 |
mT[14] = 0; |
30 |
mT[15] = 1; |
31 |
var m = matrix_get(2); |
32 |
var mR = matrix_multiply(m, mT); |
33 |
matrix_set(2, mR); |
34 |
} |