mirror of
https://codeberg.org/icewind/vmdl.git
synced 2026-06-03 16:44:11 +02:00
skin selector
This commit is contained in:
parent
87be76c88a
commit
70a6adebdd
1 changed files with 13 additions and 6 deletions
|
|
@ -48,7 +48,7 @@ fn main() -> Result<(), Error> {
|
||||||
let mut args = args_os();
|
let mut args = args_os();
|
||||||
let _ = args.next();
|
let _ = args.next();
|
||||||
let path = PathBuf::from(args.next().expect("No demo file provided"));
|
let path = PathBuf::from(args.next().expect("No demo file provided"));
|
||||||
let model = load(&path).unwrap();
|
let source_model = load(&path).unwrap();
|
||||||
|
|
||||||
let window = Window::new(WindowSettings {
|
let window = Window::new(WindowSettings {
|
||||||
title: path.display().to_string(),
|
title: path.display().to_string(),
|
||||||
|
|
@ -73,8 +73,10 @@ fn main() -> Result<(), Error> {
|
||||||
let mut gui = three_d::GUI::new(&context);
|
let mut gui = three_d::GUI::new(&context);
|
||||||
|
|
||||||
let loader = Loader::new().expect("loader");
|
let loader = Loader::new().expect("loader");
|
||||||
|
let skin_count = source_model.skin_tables().count();
|
||||||
|
|
||||||
|
let cpu_models = (0..skin_count).map(|skin| model_to_model(&source_model, &loader, skin));
|
||||||
|
|
||||||
let cpu_model = model_to_model(&model, &loader);
|
|
||||||
let ph_material = PhysicalMaterial {
|
let ph_material = PhysicalMaterial {
|
||||||
albedo: Color {
|
albedo: Color {
|
||||||
r: 128,
|
r: 128,
|
||||||
|
|
@ -85,7 +87,9 @@ fn main() -> Result<(), Error> {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let model: three_d::Model<PhysicalMaterial> = three_d::Model::new(&context, &cpu_model)?;
|
let models: Vec<three_d::Model<PhysicalMaterial>> = cpu_models
|
||||||
|
.map(|cpu_model| three_d::Model::new(&context, &cpu_model).expect("failed to load model"))
|
||||||
|
.collect();
|
||||||
|
|
||||||
let mut directional = [
|
let mut directional = [
|
||||||
DirectionalLight::new(&context, 1.0, Color::WHITE, &vec3(1.0, -1.0, 0.0)),
|
DirectionalLight::new(&context, 1.0, Color::WHITE, &vec3(1.0, -1.0, 0.0)),
|
||||||
|
|
@ -103,8 +107,10 @@ fn main() -> Result<(), Error> {
|
||||||
let mut depth_max = 30.0;
|
let mut depth_max = 30.0;
|
||||||
let mut fov = 60.0;
|
let mut fov = 60.0;
|
||||||
let mut debug_type = DebugType::NONE;
|
let mut debug_type = DebugType::NONE;
|
||||||
|
let mut skin_index = 0;
|
||||||
|
|
||||||
window.render_loop(move |mut frame_input| {
|
window.render_loop(move |mut frame_input| {
|
||||||
|
let model = &models[skin_index];
|
||||||
let mut change = frame_input.first_frame;
|
let mut change = frame_input.first_frame;
|
||||||
let mut panel_width = frame_input.viewport.width;
|
let mut panel_width = frame_input.viewport.width;
|
||||||
change |= gui.update(
|
change |= gui.update(
|
||||||
|
|
@ -144,6 +150,7 @@ fn main() -> Result<(), Error> {
|
||||||
ui.radio_value(&mut debug_type, DebugType::UV, "UV");
|
ui.radio_value(&mut debug_type, DebugType::UV, "UV");
|
||||||
|
|
||||||
ui.label("View options");
|
ui.label("View options");
|
||||||
|
ui.add(Slider::new(&mut skin_index, 0..=(skin_count - 1)).text("Skin"));
|
||||||
ui.add(Slider::new(&mut depth_max, 1.0..=30.0).text("Depth max"));
|
ui.add(Slider::new(&mut depth_max, 1.0..=30.0).text("Depth max"));
|
||||||
ui.add(Slider::new(&mut fov, 45.0..=90.0).text("FOV"));
|
ui.add(Slider::new(&mut fov, 45.0..=90.0).text("FOV"));
|
||||||
|
|
||||||
|
|
@ -225,7 +232,7 @@ fn main() -> Result<(), Error> {
|
||||||
model.iter().map(|gm| &gm.geometry),
|
model.iter().map(|gm| &gm.geometry),
|
||||||
lights,
|
lights,
|
||||||
),
|
),
|
||||||
DebugType::NONE => target.render(&camera, &model, lights),
|
DebugType::NONE => target.render(&camera, model, lights),
|
||||||
}
|
}
|
||||||
.write(|| gui.render());
|
.write(|| gui.render());
|
||||||
}
|
}
|
||||||
|
|
@ -251,7 +258,7 @@ fn load(path: &Path) -> Result<Model, vmdl::ModelError> {
|
||||||
// 1 hammer unit is ~1.905cm
|
// 1 hammer unit is ~1.905cm
|
||||||
const UNIT_SCALE: f32 = 1.0 / (1.905 * 100.0);
|
const UNIT_SCALE: f32 = 1.0 / (1.905 * 100.0);
|
||||||
|
|
||||||
fn model_to_model(model: &Model, loader: &Loader) -> CpuModel {
|
fn model_to_model(model: &Model, loader: &Loader, skin: usize) -> CpuModel {
|
||||||
let offset = model
|
let offset = model
|
||||||
.vertices()
|
.vertices()
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -264,7 +271,7 @@ fn model_to_model(model: &Model, loader: &Loader) -> CpuModel {
|
||||||
z: 0.0,
|
z: 0.0,
|
||||||
};
|
};
|
||||||
|
|
||||||
let skin = model.skin_tables().next().unwrap();
|
let skin = model.skin_tables().nth(skin).unwrap();
|
||||||
|
|
||||||
let geometries = model
|
let geometries = model
|
||||||
.meshes()
|
.meshes()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue