Struct ck::Mat4 [] [src]

pub struct Mat4 {
    pub elems: [Vec4; 4],
}

Fields

Methods

impl Mat4
[src]

[src]

Create a new instance of Mat4

use ck::{Vec4, Mat4};

let v1 = Vec4::new( 1.0,  2.0,  3.0,  4.0);
let v2 = Vec4::new( 5.0,  6.0,  7.0,  8.0);
let v3 = Vec4::new( 9.0, 10.0, 11.0, 12.0);
let v4 = Vec4::new(13.0, 14.0, 15.0, 16.0);
let m = Mat4::new(v1, v2, v3, v4);

assert_eq!(m[0].x, 1.0);
assert_eq!(m[0].y, 2.0);
assert_eq!(m[0].z, 3.0);
assert_eq!(m[0].w, 4.0);

assert_eq!(m[1][0], 5.0);
assert_eq!(m[1][1], 6.0);
assert_eq!(m[1][2], 7.0);
assert_eq!(m[1][3], 8.0);

assert_eq!(m[2].x,  9.0);
assert_eq!(m[2].y, 10.0);
assert_eq!(m[2].z, 11.0);
assert_eq!(m[2].w, 12.0);

assert_eq!(m[3][0], 13.0);
assert_eq!(m[3][1], 14.0);
assert_eq!(m[3][2], 15.0);
assert_eq!(m[3][3], 16.0);

[src]

Create a new instance of the identity Mat4

use ck::{Vec4, Mat4};

let m = Mat4::identity();

assert_eq!(m[0][0], 1.0);
assert_eq!(m[0][1], 0.0);
assert_eq!(m[0][2], 0.0);
assert_eq!(m[0][3], 0.0);

assert_eq!(m[1][0], 0.0);
assert_eq!(m[1][1], 1.0);
assert_eq!(m[1][2], 0.0);
assert_eq!(m[1][3], 0.0);

assert_eq!(m[2][0], 0.0);
assert_eq!(m[2][1], 0.0);
assert_eq!(m[2][2], 1.0);
assert_eq!(m[2][3], 0.0);

assert_eq!(m[3][0], 0.0);
assert_eq!(m[3][1], 0.0);
assert_eq!(m[3][2], 0.0);
assert_eq!(m[3][3], 1.0);

[src]

Create a new instance of the zero Mat4

use ck::{Vec4, Mat4};

let m = Mat4::zero();

assert_eq!(m[0][0], 0.0);
assert_eq!(m[0][1], 0.0);
assert_eq!(m[0][2], 0.0);
assert_eq!(m[0][3], 0.0);

assert_eq!(m[1][0], 0.0);
assert_eq!(m[1][1], 0.0);
assert_eq!(m[1][2], 0.0);
assert_eq!(m[1][3], 0.0);

assert_eq!(m[2][0], 0.0);
assert_eq!(m[2][1], 0.0);
assert_eq!(m[2][2], 0.0);
assert_eq!(m[2][3], 0.0);

assert_eq!(m[3][0], 0.0);
assert_eq!(m[3][1], 0.0);
assert_eq!(m[3][2], 0.0);
assert_eq!(m[3][3], 0.0);

[src]

[src]

Get the raw data represented by a Mat4

use ck::{Vec4, Mat4};

let v1 = Vec4::new( 1.0,  2.0,  3.0,  4.0);
let v2 = Vec4::new( 5.0,  6.0,  7.0,  8.0);
let v3 = Vec4::new( 9.0, 10.0, 11.0, 12.0);
let v4 = Vec4::new(13.0, 14.0, 15.0, 16.0);
let m = Mat4::new(v1, v2, v3, v4);
let r: [[f32; 4]; 4] = m.raw();

assert_eq!(m[0][0], r[0][0]);
assert_eq!(m[0][1], r[0][1]);
assert_eq!(m[0][2], r[0][2]);
assert_eq!(m[0][3], r[0][3]);

assert_eq!(m[1][0], r[1][0]);
assert_eq!(m[1][1], r[1][1]);
assert_eq!(m[1][2], r[1][2]);
assert_eq!(m[1][3], r[1][3]);

assert_eq!(m[2][0], r[2][0]);
assert_eq!(m[2][1], r[2][1]);
assert_eq!(m[2][2], r[2][2]);
assert_eq!(m[2][3], r[2][3]);

assert_eq!(m[3][0], r[3][0]);
assert_eq!(m[3][1], r[3][1]);
assert_eq!(m[3][2], r[3][2]);
assert_eq!(m[3][3], r[3][3]);

Trait Implementations

impl Debug for Mat4
[src]

[src]

Formats the value using the given formatter.

impl Index<usize> for Mat4
[src]

The returned type after indexing.

[src]

Indexing for Mat4 instead of field access by name

Examples

use ck::{Vec4, Mat4};

let v1 = Vec4::new( 1.0,  2.0,  3.0,  4.0);
let v2 = Vec4::new( 5.0,  6.0,  7.0,  8.0);
let v3 = Vec4::new( 9.0, 10.0, 11.0, 12.0);
let v4 = Vec4::new(13.0, 14.0, 15.0, 16.0);
let m = Mat4 { elems: [v1, v2, v3, v4] };

assert_eq!(m[0].x, 1.0);
assert_eq!(m[0].y, 2.0);
assert_eq!(m[0].z, 3.0);
assert_eq!(m[0].w, 4.0);

assert_eq!(m[1][0], 5.0);
assert_eq!(m[1][1], 6.0);
assert_eq!(m[1][2], 7.0);
assert_eq!(m[1][3], 8.0);

assert_eq!(m[2].x,  9.0);
assert_eq!(m[2].y, 10.0);
assert_eq!(m[2].z, 11.0);
assert_eq!(m[2].w, 12.0);

assert_eq!(m[3][0], 13.0);
assert_eq!(m[3][1], 14.0);
assert_eq!(m[3][2], 15.0);
assert_eq!(m[3][3], 16.0);

impl IndexMut<usize> for Mat4
[src]

[src]

Mutable indexing for Mat4 instead of field access by name

Examples

use ck::{Vec4, Mat4};

let mut m = Mat4::new(
    Vec4::new(0.0, 0.0, 0.0, 0.0),
    Vec4::new(0.0, 0.0, 0.0, 0.0),
    Vec4::new(0.0, 0.0, 0.0, 0.0),
    Vec4::new(0.0, 0.0, 0.0, 0.0),
);
let v1 = Vec4::new( 1.0,  2.0,  3.0,  4.0);
let v2 = Vec4::new( 5.0,  6.0,  7.0,  8.0);
let v3 = Vec4::new( 9.0, 10.0, 11.0, 12.0);
let v4 = Vec4::new(13.0, 14.0, 15.0, 16.0);

m[0] = v1;
m[1] = v2;
m[2] = v3;
m[3] = v4;

assert_eq!(m[0].x, 1.0);
assert_eq!(m[0].y, 2.0);
assert_eq!(m[0].z, 3.0);
assert_eq!(m[0].w, 4.0);

assert_eq!(m[1][0], 5.0);
assert_eq!(m[1][1], 6.0);
assert_eq!(m[1][2], 7.0);
assert_eq!(m[1][3], 8.0);

assert_eq!(m[2].x,  9.0);
assert_eq!(m[2].y, 10.0);
assert_eq!(m[2].z, 11.0);
assert_eq!(m[2].w, 12.0);

assert_eq!(m[3][0], 13.0);
assert_eq!(m[3][1], 14.0);
assert_eq!(m[3][2], 15.0);
assert_eq!(m[3][3], 16.0);