Expand description
This crate is designed to make it easy to build interactive computer art with just a pixel buffer. For inspiration, consider looking at https://shadertoy.com and http://www.iquilezles.org/www/index.htm, there are a lot of cool art pieces to see and explanations of fun techniques!
§Usage
To make a piece of art, you create and configure a Canvas
object, and
then you ask it to render
with your code. The canvas will do state
management and hand you an image to modify. Whatever modifications you make
to the image will be displayed on the screen.
§Example
use pixel_canvas::{Canvas, Color, input::MouseState};
fn main() {
// Configure the window that you want to draw in. You can add an event
// handler to build interactive art. Input handlers for common use are
// provided.
let canvas = Canvas::new(512, 512)
.title("Tile")
.state(MouseState::new())
.input(MouseState::handle_input);
// The canvas will render for you at up to 60fps.
canvas.render(|mouse, image| {
// Modify the `image` based on your state.
let width = image.width() as usize;
for (y, row) in image.chunks_mut(width).enumerate() {
for (x, pixel) in row.iter_mut().enumerate() {
let dx = x as i32 - mouse.x;
let dy = y as i32 - mouse.y;
let dist = dx * dx + dy * dy;
*pixel = Color {
r: if dist < 128 * 128 { dy as u8 } else { 0 },
g: if dist < 128 * 128 { dx as u8 } else { 0 },
b: (x * y) as u8,
}
}
}
});
}
Re-exports§
pub use crate::canvas::Canvas;
pub use crate::color::Blend;
pub use crate::color::Color;
pub use crate::image::Image;
pub use crate::image::RC;
pub use crate::image::XY;
pub use crate::math::Remap;
pub use crate::math::Restrict;
pub use crate::vector::Vec3;
Modules§
- canvas
- The
Canvas
is the main entry point of the library. It handles window creation and input, calls your render callback, and presents the image on the screen. - color
- Types and utilities to represent colors.
- image
- The
Image
is what you manipulate to produce your art. - input
- Pre-built canvas input event handlers.
- math
- Useful common math operations for doing art.
- prelude
- Re-exported types and traits, meant to be glob imported for convenience.
- vector
- Types and operations for vectors.