More selected projects

Three Projections of a Curve

This work visualizes a single animated curve or path in three different ways using 2D primitives but creating depth through color shading.

produced by: Jonas Grünwald


The work consists of a number of points connected to form a curve. The points move around from time to time across the scree, creating a continously shifting object.

The curve is visualized in three diffrent modes, that change as time passes:

1. Using a circular, two-dimensional shape, drawn to gradually increase in color in its vertical dimensions (essentially a linear gradient but in circular form), a snake-like shape is extruded from the curve, creating an illusion of depth through the gradient shading.

2. Drawing the the curve in the form of vertical lines reaching towards the bottom of the screen, and shading those lines based on the angle of the curve at the respective position, again an illusion of depth is created, hover in a different dimension and perspective, with the curve now resembling a a roll of paper.

3. Drawing  the curve replicated across vertical space, but with gaps in-between, and shading it based on the vertical position, another perspective of the curve as a mesh-like entity is exposed.

Two main colors are used consistently through every phase, but shifted over time through all hues. The two colors always remain their respective complementary color, so that a consistent level of contrast is kept.

Concept and background research

The concept is largely just based on independently exploring the visual qualities of the curved path shape, and how those can be mapped to entities with perceptible depth and character.

For reference, I have included here an image of a Mexican mole lizard (Bipes biporus), which looks like a snake, but it has two little arms.



The work was implemented in C++ using OpenFrameworks and the addon "ofXPiMapper".

The main curve shape is a Catmull-Rom spline created using an OpenFrameworks ofPolyline object, which is recreated on every update call with a new set of points to create the curve animation

For performance reasons, the mentioned circular gradient is drawn to a separate frame buffer object, which is then in turn drawn in a loop across the curve body every frame.

For the purpose of projection mapping, the one fbo source driving the whole project exposes a function to make it externally adjustable, so for projection across a larger vertical area, more segments are used in the curve, and the canvas is sized accordingly to provide a 2:1 aspect ratio, whereas for projection on a single disconnected square, an 1:1 aspect ratio is set, and the curve start and end points are adjusted to always be placed on edges outside of the projection area, to create more consistent visual output.