opengl_sdk/src/models/model.rs

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;
}
}