Skip to content
Snippets Groups Projects
Commit d6e9024a authored by Finn Bear's avatar Finn Bear
Browse files

Work on title slide.

parent 202830dd
No related branches found
No related tags found
No related merge requests found
......@@ -1168,8 +1168,7 @@ dependencies = [
[[package]]
name = "imageproc"
version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aee993351d466301a29655d628bfc6f5a35a0d062b6160ca0808f425805fd7"
source = "git+https://github.com/finnbear/imageproc?branch=draw_filled_polygon#14e99794aa608f35c0f3505a11c4b852d930dbda"
dependencies = [
"approx",
"conv",
......
......@@ -7,7 +7,7 @@ edition = "2021"
eframe = "0.17"
egui_demo_lib = {git = "https://github.com/finnbear/egui", branch = "code_theme_font_size_3"}
image = {version = "0.24", default-features = false, features=["png"]}
imageproc = "0.23"
imageproc = {git = "https://github.com/finnbear/imageproc", branch = "draw_filled_polygon"}
rand = "0.8"
rand_chacha = "0.3"
structopt = "0.3"
\ No newline at end of file
src/image/raymarching0.png

13.1 KiB | W: | H:

src/image/raymarching0.png

34.4 KiB | W: | H:

src/image/raymarching0.png
src/image/raymarching0.png
src/image/raymarching0.png
src/image/raymarching0.png
  • 2-up
  • Swipe
  • Onion skin
src/image/slime0.png

111 KiB | W: | H:

src/image/slime0.png

129 KiB | W: | H:

src/image/slime0.png
src/image/slime0.png
src/image/slime0.png
src/image/slime0.png
  • 2-up
  • Swipe
  • Onion skin
src/image/slime1.png

166 KiB

......@@ -39,21 +39,22 @@ impl Slide for Title {
if self.examples.is_empty() {
// For now, these images are somewhat like placeholders.
self.examples = vec![
ctx_img!(ui.ctx(), "abstract0.png"),
ctx_img!(ui.ctx(), "atom0.png"),
ctx_img!(ui.ctx(), "raymarching0.png"),
ctx_img!(ui.ctx(), "fluid0.png"),
ctx_img!(ui.ctx(), "raymarching1.png"),
ctx_img!(ui.ctx(), "atom2.png"),
ctx_img!(ui.ctx(), "raytracing0.png"),
ctx_img!(ui.ctx(), "slime0.png"),
ctx_img!(ui.ctx(), "abstract0.png"),
ctx_img!(ui.ctx(), "abstract1.png"),
ctx_img!(ui.ctx(), "fluid0.png"),
ctx_img!(ui.ctx(), "atom0.png"),
ctx_img!(ui.ctx(), "atom1.png"),
ctx_img!(ui.ctx(), "atom2.png"),
ctx_img!(ui.ctx(), "abstract1.png"),
ctx_img!(ui.ctx(), "slime1.png"),
];
}
for example in &self.examples {
Image::default().show(ui, example);
Image::default().height(ui.available_height() * 0.295).show(ui, example);
}
if let &TitleState::Title { fade_start } = &self.state {
......
......@@ -12,7 +12,7 @@ use eframe::egui::style::Margin;
use eframe::egui::{ColorImage, Frame, Pos2, Shape, Stroke};
use eframe::emath::Rot2;
use eframe::epaint::CircleShape;
use imageproc::drawing::draw_polygon_mut;
use imageproc::drawing::draw_filled_polygon_mut;
use rand::{thread_rng, Rng};
use std::collections::VecDeque;
......@@ -52,6 +52,8 @@ enum MosaicState {
Triangles {
/// When we started fading in and using the edge detector.
edges: Option<(f64, Grid)>,
/// If we started using vignette yet.
vignette: bool,
},
}
......@@ -120,12 +122,12 @@ impl Slide for Mosaic {
..Triangle::default()
};
let (points, color) = triangle.polygon(self.grid.size_cells as u32).unwrap();
draw_polygon_mut(&mut self.grid, &points, color);
draw_filled_polygon_mut(&mut self.grid, &points, color);
} else {
self.state = MosaicState::Triangles { edges: None };
self.state = MosaicState::Triangles { edges: None, vignette: false };
}
}
MosaicState::Triangles { edges } => {
MosaicState::Triangles { edges, vignette } => {
if edges.is_none() {
const EDGE_RESOLUTION: usize = 200;
......@@ -155,6 +157,8 @@ impl Slide for Mosaic {
}
*edges = Some((ctx.input().time, grid));
} else if !*vignette {
*vignette = true;
} else {
// Done with slide.
return true;
......@@ -212,7 +216,7 @@ impl Slide for Mosaic {
// De-queue triangles to CPU rasterize them.
let triangle = self.triangles.pop_front().unwrap();
if let Some((points, color)) = triangle.polygon(self.grid.size_cells as u32) {
draw_polygon_mut(&mut self.grid, &points, color);
draw_filled_polygon_mut(&mut self.grid, &points, color);
self.count += 1;
}
}
......@@ -276,7 +280,7 @@ impl Slide for Mosaic {
}));
}
}
MosaicState::Triangles { edges } => {
MosaicState::Triangles { edges, vignette } => {
for _ in 0..(self.count / 8 + 10).min(537) {
let x: f32 = rng.gen();
let y: f32 = rng.gen();
......@@ -316,6 +320,12 @@ impl Slide for Mosaic {
}
}
}
if *vignette {
let dist = center.distance(Pos2::new(0.5, 0.5));
for c in 0..3 {
fill[c] = fill[c].saturating_sub(((dist - 0.25).max(0.0) * 50.0) as u8)
}
}
let triangle = Triangle {
points: [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment