diff --git a/docs/index.md b/docs/index.md index bb924d9..6ea2c5b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,9 +2,39 @@ Shape Mapper is a [Processing](https://processing.org/) library for projection mapping. -![output](https://github.com/user-attachments/assets/af2e75f6-b4d0-4e52-bb8e-f2c5d644a5bc) +![shape-mapper-clip](https://github.com/user-attachments/assets/9a1c0ce3-ff4e-42ab-b20c-06ef966df57a) +![cardboard](https://github.com/user-attachments/assets/59ac0c9a-4bd5-48f1-9ce9-d2512b451caa) -## Use cases +> [!WARNING] +> Shape Mapper is currently in beta. The library has been used for production installations, but has not yet been tested by the wider community, and some changes may occur based on feedback. + +## 👩‍💻 Example code + +Here is a minimal example showing what the library interface looks like: + +``` java +import spacefiller.shapemapper.ShapeMapper; +import processing.core.PShape; + +ShapeMapper mapper; +PShape shape; + +void setup() { + fullScreen(P3D); + shape = createShape(BOX, 100, 200, 300); + mapper = new ShapeMapper(this, shape); +} + +void draw() { + background(0); + + mapper.beginMapping(); + shape(shape); + mapper.endMapping(); +} +``` + +## 💪 Use cases [Projection mapping](https://en.wikipedia.org/wiki/Projection_mapping) is the process of calibrating a digital projection to align with a three dimensional surface. The Shape Mapper library is useful if you have a 3D model of the object you want to projection map. Some example workflows: @@ -14,17 +44,31 @@ Shape Mapper is a [Processing](https://processing.org/) library for projection m If you do not have a 3D model of the object you are trying to projection map, or you are not able to create a model in code, this library will probably not be useful to you. It is still very much possible to projection map your object, though! Check out the [Keystone](https://github.com/davidbouchard/keystone) library for Processing, or software such as MadMapper, Resolume or TouchDesigner for alternative projection mapping solutions. -## Features +## ✨ Features -- Calibrate your projection by manually aligning at least 6 points; the mapping for the rest of the object will be automatically estimated. -- Supports mapping multiple shapes (i.e. if you have two or more separate objects). -- Supports multiple mappings per shape (i.e. if you have two or more projectors). -- Calibrations are saved to disk. -- Supports face masking, which allows you to avoid projecting twice onto the same face if using more than one projector. +- 🧮 Calibrate your projection by manually aligning at least 6 points; the mapping for the rest of the object will be automatically estimated. +- 🗺 Supports mapping multiple shapes at once (i.e. if you have two or more separate objects). +- 📽 Supports multiple mappings per shape (i.e. if you have two or more projectors). +- 💾 Calibrations are saved to disk. +- 🎭 Supports face masking, which allows you to avoid projecting twice onto the same face if using more than one projector. -## Non-features +## 🤷‍♂️ Non-features Shape Mapper does not (yet) support: - Blending between projectors -- Built in projection mapping effects (all effects must be drawn by the user with code) \ No newline at end of file +- Built in projection mapping effects (all effects must be drawn by the user with code) + +## 🙏 Credits & Acknowledgements + +Shape Mapper is by [Alex Miller](https://alexmiller.cv/) (x: [@spacefillerart](https://x.com/spacefillerart), ig: [@space.filler.art](https://www.instagram.com/space.filler.art/), bs: [@spacefiller](https://bsky.app/profile/spacefiller.bsky.social)). + +Shape Mapper is heavily inspired by and based on the [mapamok](https://github.com/YCAMInterlab/mapamok) library for [openFrameworks](https://openframeworks.cc/), originally developed by [Kyle McDonald](https://kylemcdonald.net/) as part of ProCamToolkit, co-developed by [YCAM Interlab](https://www.ycam.jp/en/aboutus/interlab/). It expands on the feature set of mapamok with multi-shape and multi-projection support. + +Thanks to Raphaël de Courville ([@SableRaf](https://github.com/SableRaf)) and Claudine Chen ([@mingness](https://github.com/mingness)) for their help & support with Processing library development. + +For camera control, Shape Mapper uses the [Peasycam library](https://mrfeinberg.com/peasycam/) by [Jonathan Feinberg](https://mrfeinberg.com). + +For estimating the projection mapping matrix, Shape Mapper uses [OpenCV](https://opencv.org/). + +This library was initially developed at [Gradient](https://www.gradientretreat.com/). Thanks to Avi for the week of focus. diff --git a/mkdocs.yml b/mkdocs.yml index 78181b9..94f76f4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,7 +13,8 @@ nav: - 'Mapping a paper-folded object': tutorial-paper-folding.md - 'Mapping multiple objects': how-to-multiple-objects.md - 'Using multiple projectors': how-to-multiple-projectors.md - - API Reference: /shape-mapper/javadoc/spacefiller/shapemapper/package-summary.html + - API reference: /shape-mapper/javadoc/spacefiller/shapemapper/package-summary.html + - Source code: https://github.com/alexdmiller/shape-mapper markdown_extensions: - pymdownx.highlight: