pass shape params

This commit is contained in:
numzero 2026-07-20 04:24:25 +03:00
parent db18de85ad
commit 14d9570478
4 changed files with 18 additions and 8 deletions

View File

@ -96,7 +96,7 @@ impl Core {
}
fn render(&self, output: &wgpu::Texture, args: &RedrawArgs) {
let mesh = mesh::generate();
let mesh = mesh::generate(&args.shape);
let mesh = faceted_mesh(&mesh);
let mesh = render::Mesh::new(&self.device, &mesh);

View File

@ -7,21 +7,22 @@ pub struct Mesh {
pub faces: Vec<[usize; 3]>,
}
pub fn generate() -> Mesh {
pub fn generate(shape: &crate::ShapeArgs) -> Mesh {
let mut vertices = Vec::<Vec3>::new();
let mut faces = Vec::<[usize; 3]>::new();
let sides: usize = 24;
let layers = 12;
let base_layer = 4;
let diameter = 36.0;
let sides = shape.sides as usize;
let layers = (shape.layers_up + shape.layers_down) as usize;
let base_layer = shape.layers_down;
let diameter = shape.base_diameter;
let radius = diameter / 2.;
let height = 120.;
let height = shape.height;
let bottom_angle = (PI / sides as f32) * -(base_layer as f32);
let top_angle = (PI / sides as f32) * (layers as f32 - base_layer as f32);
let bottom_y = radius * bottom_angle.tan();
let top_y = radius * top_angle.tan();
let incline = height / (top_y - bottom_y);
let elevation = -height / 2. - incline * bottom_y;
let base = vertices.len();
for side in 0..(sides - 2) {
@ -31,7 +32,7 @@ pub fn generate() -> Mesh {
let angle = (PI / sides as f32) * (layer as f32 - base_layer as f32);
let x = radius;
let y = angle.tan() * x;
let z = incline * y;
let z = elevation + incline * y;
for side in 0..sides {
let angle = (2. * PI / sides as f32) * side as f32;
let rot = Mat2::from_angle(angle);

View File

@ -12,6 +12,9 @@ Hyperboloid::Hyperboloid(QWidget* parent)
Hyperboloid::~Hyperboloid() = default;
void Hyperboloid::updateView() {
const int max_layers = (m_ui->sides->value() - 1) / 2;
m_ui->layersUp->setMaximum(max_layers);
m_ui->layersDown->setMaximum(max_layers);
const auto color = m_ui->inBackground->color();
const ShapeArgs shape {
.sides = (std::uint32_t)m_ui->sides->value(),

View File

@ -174,6 +174,9 @@
<property name="maximum">
<number>11</number>
</property>
<property name="value">
<number>8</number>
</property>
</widget>
</item>
<item>
@ -188,6 +191,9 @@
<property name="maximum">
<number>11</number>
</property>
<property name="value">
<number>4</number>
</property>
</widget>
</item>
</layout>