Book Image

Mastering openFrameworks: Creative Coding Demystified

By : Denis Perevalov
Book Image

Mastering openFrameworks: Creative Coding Demystified

By: Denis Perevalov

Overview of this book

openFrameworks is a powerful programming toolkit and library designed to assist the creative process through simplicity and intuitiveness. It's a very handy software library written in C++ to reduce the software development process, helping you to kick-start creative coding. With the help of C++ and shaders support, openFrameworks allows for the processing of all kinds of media information with your custom-developed algorithms at the lowest possible level, with the fastest speed. "Mastering openFrameworks: Creative Coding Demystified" will introduce you to a world of creative coding projects, including interactive installations, audio-visual, and sound art projects. You will learn how to make your own projects using openFrameworks. This book focuses on low-level data processing, which allows you to create really unique and cutting-edge installations and projects. "Mastering openFrameworks: Creative Coding Demystified" provides a complete introduction to openFrameworks, including installation, core capabilities, and addons. Advanced topics like shaders, computer vision, and depth cameras are also covered. We start off by discussing the basic topics such as image and video loading, rendering and processing, playing sound samples, and synthesizing new sounds. We then move on to cover 3D graphics, computer vision, and depth cameras. You will also learn a number of advanced topics such as video mapping, interactive floors and walls, video morphing, networking, and using geometry shaders. You will learn everything you need to know in order to create your own projects; create projects of all levels, ranging from simple creative-code experiments, to big interactive systems consisting of a number of computers, depth cameras, and projectors.
Table of Contents (22 chapters)
Mastering openFrameworks: Creative Coding Demystified
Credits
Foreword
About the Author
Acknowledgement
About the Reviewers
www.PacktPub.com
Preface
Index

Perlin noise basics


Perlin noise is the algorithm used for computing values of a pseudo-random function, smoothly depending on its parameters. It was originally developed in 1982 by Ken Perlin and named after him. Today, it's called classical noise. In 2001, Ken Perlin developed a modification of the algorithm and called it simplex noise. Simplex noise works faster than classical noise, but the results differ a little.

Nowadays both noises are widely used. Often it is not very important which algorithm is used in a given case; that's why we will refer to both of them as just Perlin noise.

For a developer, the Perlin noise function ofNoise( t ) just takes values in the range [0, 1] and depends on the parameter t. The dependence is smooth; that is, a small change in the value of the input parameter t leads to a small change in the output result. But, unlike any other mathematical function such as sin( t ) or exp( t ), Perlin noise is not periodic and is not constantly increasing. It has complex and non-repetitive behavior, which is called pseudo-random behavior. That is, on one hand it is a function that seems random, and on the other hand it is fixed. No matter how many times you compute ofNoise( t ) for the given t, you will obtain exactly the same result.

The main advantage of Perlin noise compared to an ordinary pseudo-random number generator, ofRandom( a, b ), is the controllable smoothness. Indeed, if we will consider float values A0 = ofNoise( t ), A1 = ofNoise( t+0.01 ), and A2 = ofNoise( t+0.1 ) for different values of t, we will find that often A1 is closer to A0 than A2. Hence we can control the resultant smoothness of the graph of ofNoise( t ), built for discrete set of values t, by controlling the step of incrementing these values. Contradictorily, two calls of ofRandom( 0, 1 ) generate two uncorrelated numbers, and there is no way to control their proximity.

Now let's see how to use Perlin noise in openFrameworks projects.