mess with gui

This commit is contained in:
2026-02-02 23:25:27 +00:00
parent 1c4fb0c130
commit a7c475b0a2
3 changed files with 92 additions and 71 deletions
+80 -68
View File
@@ -72,32 +72,36 @@ impl Default for GState {
}
fn draw_position(ui: &mut Ui, position: &mut Position) {
ui.heading("Position");
ui.add(egui::Slider::new(&mut position.pos.x, -100.0..=100.0).text("Position.x"));
ui.add(egui::Slider::new(&mut position.pos.y, -100.0..=100.0).text("Position.y"));
ui.add(egui::Slider::new(&mut position.pos.z, -100.0..=100.0).text("Position.z"));
ui.add(egui::Slider::new(&mut position.rot.x, 0.0..=360.0).text("Rotation.x"));
ui.add(egui::Slider::new(&mut position.rot.y, 0.0..=360.0).text("Rotation.y"));
ui.add(egui::Slider::new(&mut position.rot.z, 0.0..=360.0).text("Rotation.z"));
ui.add(egui::Slider::new(&mut position.scale.x, 0.0..=2.0).text("Scale.x"));
ui.add(egui::Slider::new(&mut position.scale.y, 0.0..=2.0).text("Scale.y"));
ui.add(egui::Slider::new(&mut position.scale.z, 0.0..=2.0).text("Scale.z"));
ui.collapsing("Position", |ui| {
ui.add(egui::Slider::new(&mut position.pos.x, -100.0..=100.0).text("Position.x"));
ui.add(egui::Slider::new(&mut position.pos.y, -100.0..=100.0).text("Position.y"));
ui.add(egui::Slider::new(&mut position.pos.z, -100.0..=100.0).text("Position.z"));
ui.add(egui::Slider::new(&mut position.rot.x, 0.0..=360.0).text("Rotation.x"));
ui.add(egui::Slider::new(&mut position.rot.y, 0.0..=360.0).text("Rotation.y"));
ui.add(egui::Slider::new(&mut position.rot.z, 0.0..=360.0).text("Rotation.z"));
ui.add(egui::Slider::new(&mut position.scale.x, 0.0..=2.0).text("Scale.x"));
ui.add(egui::Slider::new(&mut position.scale.y, 0.0..=2.0).text("Scale.y"));
ui.add(egui::Slider::new(&mut position.scale.z, 0.0..=2.0).text("Scale.z"));
});
}
fn draw_material(ui: &mut Ui, material: &mut Material) {
ui.heading("Material");
ui.add(egui::Slider::new(&mut material.colour.x, 0.0..=1.0).text("Colour.r"));
ui.add(egui::Slider::new(&mut material.colour.y, 0.0..=1.0).text("Colour.g"));
ui.add(egui::Slider::new(&mut material.colour.z, 0.0..=1.0).text("Colour.b"));
ui.add(egui::Slider::new(&mut material.roughness, 0.0..=1.0).text("Roughness"));
ui.add(egui::Slider::new(&mut material.metallic, 0.0..=1.0).text("Metallic"));
ui.add(egui::Slider::new(&mut material.subsurface, 0.0..=1.0).text("Subsurface"));
ui.add(egui::Slider::new(&mut material.specular, 0.0..=1.0).text("Specular"));
ui.add(egui::Slider::new(&mut material.specular_tint, 0.0..=1.0).text("Specular tint"));
ui.add(egui::Slider::new(&mut material.sheen, 0.0..=1.0).text("Sheen"));
ui.add(egui::Slider::new(&mut material.sheen_tint, 0.0..=1.0).text("Sheen tint"));
ui.add(egui::Slider::new(&mut material.clear_coat, 0.0..=1.0).text("Clear Coat"));
ui.add(egui::Slider::new(&mut material.clear_coat_gloss, 0.0..=1.0).text("Clear Coat Gloss"));
ui.collapsing("Material", |ui| {
ui.add(egui::Slider::new(&mut material.colour.x, 0.0..=1.0).text("Colour.r"));
ui.add(egui::Slider::new(&mut material.colour.y, 0.0..=1.0).text("Colour.g"));
ui.add(egui::Slider::new(&mut material.colour.z, 0.0..=1.0).text("Colour.b"));
ui.add(egui::Slider::new(&mut material.roughness, 0.0..=1.0).text("Roughness"));
ui.add(egui::Slider::new(&mut material.metallic, 0.0..=1.0).text("Metallic"));
ui.add(egui::Slider::new(&mut material.subsurface, 0.0..=1.0).text("Subsurface"));
ui.add(egui::Slider::new(&mut material.specular, 0.0..=1.0).text("Specular"));
ui.add(egui::Slider::new(&mut material.specular_tint, 0.0..=1.0).text("Specular tint"));
ui.add(egui::Slider::new(&mut material.sheen, 0.0..=1.0).text("Sheen"));
ui.add(egui::Slider::new(&mut material.sheen_tint, 0.0..=1.0).text("Sheen tint"));
ui.add(egui::Slider::new(&mut material.clear_coat, 0.0..=1.0).text("Clear Coat"));
ui.add(
egui::Slider::new(&mut material.clear_coat_gloss, 0.0..=1.0).text("Clear Coat Gloss"),
);
});
}
pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
@@ -127,12 +131,13 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
ui.heading(format!("Meshes ({})", meshes_len));
let mut meshdel = vec![];
for mesh in &mut state.meshes {
ui.label(mesh.name.clone());
if meshes_len > 1 || csg_len > 0 {
meshdel.push(ui.small_button("remove mesh").clicked());
}
draw_position(ui, &mut mesh.position);
draw_material(ui, &mut mesh.material);
ui.collapsing(mesh.name.clone(), |ui| {
if meshes_len > 1 || csg_len > 0 {
meshdel.push(ui.small_button("remove mesh").clicked());
}
draw_position(ui, &mut mesh.position);
draw_material(ui, &mut mesh.material);
});
}
for i in meshdel
.into_iter()
@@ -145,22 +150,25 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
let mut csgdel = vec![];
for csg in &mut state.csg {
let mut csg = csg.write().unwrap();
ui.label(csg.name.clone());
if meshes_len > 0 || csg_len > 1 {
csgdel.push(ui.small_button("remove csg").clicked());
}
draw_position(ui, &mut csg.position);
draw_material(ui, &mut csg.material);
ui.horizontal(|ui| {
ui.label("Subdivision");
for x in MINUMUM_SUBDIVISION.ilog2()..=MAXIMUM_SUBDIVISION.ilog2() {
let subdivision = 1 << x;
ui.selectable_value(
&mut csg.subdivision,
subdivision,
format!("{}", subdivision),
);
ui.collapsing(csg.name.clone(), |ui| {
if meshes_len > 0 || csg_len > 1 {
csgdel.push(ui.small_button("remove csg").clicked());
}
draw_position(ui, &mut csg.position);
draw_material(ui, &mut csg.material);
ui.horizontal(|ui| {
ui.label("Subdivision");
for x in
MINUMUM_SUBDIVISION.ilog2()..=MAXIMUM_SUBDIVISION.ilog2()
{
let subdivision = 1 << x;
ui.selectable_value(
&mut csg.subdivision,
subdivision,
format!("{}", subdivision),
);
}
});
});
}
for i in csgdel
@@ -178,30 +186,34 @@ pub(crate) fn gui_up(gui: &mut Gui, state: &mut GState) {
}
ui.heading(format!("Lights ({})", state.lights.len()));
let mut lightdel = vec![];
for light in &mut state.lights {
ui.label("Light");
lightdel.push(ui.small_button("remove light").clicked());
ui.add(
egui::Slider::new(&mut light.pos.x, -100.0..=100.0)
.text("Position.x"),
);
ui.add(
egui::Slider::new(&mut light.pos.y, -100.0..=100.0)
.text("Position.y"),
);
ui.add(
egui::Slider::new(&mut light.pos.z, -100.0..=100.0)
.text("Position.z"),
);
ui.add(
egui::Slider::new(&mut light.colour.x, 0.0..=1.0).text("Colour.r"),
);
ui.add(
egui::Slider::new(&mut light.colour.y, 0.0..=1.0).text("Colour.g"),
);
ui.add(
egui::Slider::new(&mut light.colour.z, 0.0..=1.0).text("Colour.b"),
);
for (i, light) in state.lights.iter_mut().enumerate() {
ui.collapsing(format!("Light {i}"), |ui| {
lightdel.push(ui.small_button("remove light").clicked());
ui.add(
egui::Slider::new(&mut light.pos.x, -100.0..=100.0)
.text("Position.x"),
);
ui.add(
egui::Slider::new(&mut light.pos.y, -100.0..=100.0)
.text("Position.y"),
);
ui.add(
egui::Slider::new(&mut light.pos.z, -100.0..=100.0)
.text("Position.z"),
);
ui.add(
egui::Slider::new(&mut light.colour.x, 0.0..=1.0)
.text("Colour.r"),
);
ui.add(
egui::Slider::new(&mut light.colour.y, 0.0..=1.0)
.text("Colour.g"),
);
ui.add(
egui::Slider::new(&mut light.colour.z, 0.0..=1.0)
.text("Colour.b"),
);
});
}
for i in lightdel
.into_iter()
+10 -1
View File
@@ -134,7 +134,16 @@ pub(crate) fn load_obj(
// index Uses the hash map to check that we're not duplicating unnecessarily
for g in &object.objects[0].groups {
for p in &g.polys {
for v in &p.0 {
if p.0.len() < 3 {
continue;
}
let mut verts = vec![];
for i in 2..p.0.len() {
verts.push(p.0[0]);
verts.push(p.0[i - 1]);
verts.push(p.0[i]);
}
for v in &verts {
//trace!("{:?}", v);
let mapping = ((v.0) as u32, (v.2.unwrap_or(0)) as u32);
if let Some(&exist) = temp_hash_map.get(&mapping) {
+2 -2
View File
@@ -7,7 +7,7 @@ use std::{
};
use foldhash::{HashMap, HashMapExt};
use glam::{EulerRot, Mat4, Vec3};
use glam::Vec3;
use log::info;
use rand::{Rng, SeedableRng, rngs::SmallRng};
use rspirv::{binary::Assemble, dr::Module};
@@ -139,7 +139,7 @@ pub fn thread_loop(recv: mpmc::Receiver<WorkItem>, send: mpsc::SyncSender<WorkCo
.collect();
let csg = Arc::new(RwLock::new(CSG {
name: "example".to_string(),
name: format!("example {}", rand::random::<u8>()),
_seed: seed,
parts,
position: Default::default(),