Skip to content

Commit

Permalink
doc updates
Browse files Browse the repository at this point in the history
  • Loading branch information
alexdmiller committed Jan 6, 2025
1 parent e92645c commit 8f756b8
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 11 deletions.
64 changes: 54 additions & 10 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand All @@ -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)
- 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.
3 changes: 2 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down

0 comments on commit 8f756b8

Please sign in to comment.