62 lines
1.3 KiB
Rust
62 lines
1.3 KiB
Rust
use crate::geometry::Mesh;
|
|
use crate::assets::mtl::Material;
|
|
use crate::handles::{ MeshHandle, MaterialHandle };
|
|
use crate::assets::types::ObjData;
|
|
use crate::math::Mat4;
|
|
|
|
pub struct ModelData {
|
|
pub name: String,
|
|
pub meshes: Vec<Mesh>,
|
|
pub materials: Vec<Material>,
|
|
pub transform: Mat4,
|
|
}
|
|
|
|
impl From<&ObjData> for ModelData {
|
|
fn from(obj: &ObjData) -> Self {
|
|
let meshes = obj.meshes.iter()
|
|
.map(|obj_mesh| Mesh::new(obj, obj_mesh))
|
|
.collect();
|
|
|
|
ModelData {
|
|
name: String::new(),
|
|
meshes,
|
|
materials: Vec::new(),
|
|
transform: Mat4::identity(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub struct Model {
|
|
pub name: String,
|
|
pub parts: Vec<(MeshHandle, MaterialHandle)>,
|
|
pub transform: Mat4,
|
|
}
|
|
|
|
impl Default for Model {
|
|
fn default() -> Self {
|
|
Self {
|
|
name: String::new(),
|
|
parts: Vec::new(),
|
|
transform: Mat4::identity(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Model {
|
|
/// Set position (translation)
|
|
pub fn set_position(&mut self, x: f32, y: f32, z: f32) {
|
|
self.transform = Mat4::translation(x, y, z);
|
|
}
|
|
|
|
/// Set scale
|
|
pub fn set_scale(&mut self, x: f32, y: f32, z: f32) {
|
|
self.transform = Mat4::scale(x, y, z);
|
|
}
|
|
|
|
/// Set full transform (for combining translation * rotation * scale)
|
|
pub fn set_transform(&mut self, transform: Mat4) {
|
|
self.transform = transform;
|
|
}
|
|
}
|