#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TileStyle {
Wrap,
Mirror,
Clamp,
None,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FilterMode {
Auto,
Linear,
Nearest,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Channel {
R,
G,
B,
A,
}
#[derive(Debug, Clone)]
pub struct Displacement2D {
pub id: usize,
pub path: String,
pub channel: Channel,
pub tilestyleu: TileStyle,
pub tilestylev: TileStyle,
pub filter: FilterMode,
}
impl Displacement2D {
pub fn new(id: usize, path: String) -> Self {
Self {
id,
path,
channel: Channel::G, tilestyleu: TileStyle::Wrap,
tilestylev: TileStyle::Wrap,
filter: FilterMode::Auto,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct NormVector {
pub x: f64,
pub y: f64,
pub z: f64,
}
impl NormVector {
pub fn new(x: f64, y: f64, z: f64) -> Self {
Self { x, y, z }
}
}
#[derive(Debug, Clone)]
pub struct NormVectorGroup {
pub id: usize,
pub vectors: Vec<NormVector>,
}
impl NormVectorGroup {
pub fn new(id: usize) -> Self {
Self {
id,
vectors: Vec::new(),
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct Disp2DCoords {
pub u: f64,
pub v: f64,
pub n: usize,
pub f: f64,
}
impl Disp2DCoords {
pub fn new(u: f64, v: f64, n: usize) -> Self {
Self { u, v, n, f: 1.0 }
}
}
#[derive(Debug, Clone)]
pub struct Disp2DGroup {
pub id: usize,
pub dispid: usize,
pub nid: usize,
pub height: f64,
pub offset: f64,
pub coords: Vec<Disp2DCoords>,
}
impl Disp2DGroup {
pub fn new(id: usize, dispid: usize, nid: usize, height: f64) -> Self {
Self {
id,
dispid,
nid,
height,
offset: 0.0,
coords: Vec::new(),
}
}
}