(t: &[f32; 3], r: &[f32; 4], s: &[f32; 3])
| 613 | } |
| 614 | |
| 615 | fn mat4_from_trs(t: &[f32; 3], r: &[f32; 4], s: &[f32; 3]) -> [[f32; 4]; 4] { |
| 616 | let (x, y, z, w) = (r[0], r[1], r[2], r[3]); |
| 617 | let x2 = x + x; let y2 = y + y; let z2 = z + z; |
| 618 | let xx = x * x2; let xy = x * y2; let xz = x * z2; |
| 619 | let yy = y * y2; let yz = y * z2; let zz = z * z2; |
| 620 | let wx = w * x2; let wy = w * y2; let wz = w * z2; |
| 621 | |
| 622 | // Column-major: m[col][row] |
| 623 | [ |
| 624 | [(1.0 - (yy + zz)) * s[0], (xy + wz) * s[0], (xz - wy) * s[0], 0.0], // column 0 |
| 625 | [(xy - wz) * s[1], (1.0 - (xx + zz)) * s[1], (yz + wx) * s[1], 0.0], // column 1 |
| 626 | [(xz + wy) * s[2], (yz - wx) * s[2], (1.0 - (xx + yy)) * s[2], 0.0], // column 2 |
| 627 | [t[0], t[1], t[2], 1.0], // column 3 (translation) |
| 628 | ] |
| 629 | } |
| 630 | |
| 631 | fn quat_slerp(a: &[f32; 4], b: &[f32; 4], t: f32) -> [f32; 4] { |
| 632 | let mut dot = a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3]; |
no outgoing calls
no test coverage detected