| 1 |
function d3d_transform_set_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 m; |
| 15 |
m[0] = (omc * xx * xx) + c; |
| 16 |
m[1] = (omc * xx * yy) + (s * zz); |
| 17 |
m[2] = (omc * xx * zz) - (s * yy); |
| 18 |
m[3] = 0; |
| 19 |
m[4] = (omc * xx * yy) - (s * zz); |
| 20 |
m[5] = (omc * yy * yy) + c; |
| 21 |
m[6] = (omc * yy * zz) + (s * xx); |
| 22 |
m[7] = 0; |
| 23 |
m[8] = (omc * xx * zz) + (s * yy); |
| 24 |
m[9] = (omc * yy * zz) - (s * xx); |
| 25 |
m[10] = (omc * zz * zz) + c; |
| 26 |
m[11] = 0; |
| 27 |
m[12] = 0; |
| 28 |
m[13] = 0; |
| 29 |
m[14] = 0; |
| 30 |
m[15] = 1; |
| 31 |
matrix_set(2, m); |
| 32 |
} |