#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Vec2 {
pub x: f32,
pub y: f32,
}
impl Vec2 {
pub fn new(x: f32, y: f32) -> Self {
Self { x, y }
}
pub fn zero() -> Self {
Self { x: 0.0, y: 0.0 }
}
pub fn one() -> Self {
Self { x: 1.0, y: 1.0 }
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Vec3 {
pub x: f32,
pub y: f32,
pub z: f32,
}
impl Vec3 {
pub fn new(x: f32, y: f32, z: f32) -> Self {
Self { x, y, z }
}
pub fn zero() -> Self {
Self { x: 0.0, y: 0.0, z: 0.0 }
}
pub fn one() -> Self {
Self { x: 1.0, y: 1.0, z: 1.0 }
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Vec4 {
pub x: f32,
pub y: f32,
pub z: f32,
pub w: f32,
}
impl Vec4 {
pub fn new(x: f32, y: f32, z: f32, w: f32) -> Self {
Self { x, y, z, w }
}
pub fn zero() -> Self {
Self { x: 0.0, y: 0.0, z: 0.0, w: 0.0 }
}
pub fn one() -> Self {
Self { x: 1.0, y: 1.0, z: 1.0, w: 1.0 }
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Mat4 {
pub m: [f32; 16],
}
impl Mat4 {
pub fn new(m: [f32; 16]) -> Self {
Self { m }
}
pub fn identity() -> Self {
Self {
m: [
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0,
],
}
}
}