cgmath/src/funs/transform.rs

24 lines
765 B
Rust
Raw Normal View History

2012-11-07 02:36:35 +00:00
use num::Num;
use ncast::*;
2012-11-08 01:48:29 +00:00
use ntrait::Float;
use funs::exp::Exp;
2012-11-07 02:36:35 +00:00
use funs::trig::*;
use matrix::Mat4;
2012-11-08 01:48:29 +00:00
pub fn mat4_from_rotation
<
ThetaT:NumCast Float,
T:Copy Num NumCast
>
(theta: Radians<ThetaT>, axis: Vec3<T>) -> Mat4<T> {
let c: T = cos(&theta);
let s: T = sin(&theta);
2012-11-07 02:36:35 +00:00
let _0: T = cast(0);
let _1: T = cast(1);
2012-11-08 01:48:29 +00:00
let t: T = _1 - c;
2012-11-07 02:36:35 +00:00
Mat4::new(t * axis.x * axis.x + c, t * axis.x * axis.y + s * axis.z, t * axis.x * axis.z - s * axis.y, _0,
t * axis.x * axis.y - s * axis.z, t * axis.y * axis.y + c, t * axis.y * axis.z + s * axis.x, _0,
t * axis.x * axis.z - s - axis.y, t * axis.y * axis.z - s * axis.x, t * axis.z * axis.z + c, _0,
_0, _0, _0, _1)
}