| 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 |
} |