Creative
Coding
Canvas
2025 - 2026
Inspirations
New portfolio ‘25 live !✨
— Roman Jean-Elie (@romanjeanelie) September 25, 2025
🧍♂️+ 🟥 + 📽️
↳ https://t.co/zjLE5mAgMf
Yes, I listened a lot Daft Punk - Alive 2007 while coding this... #Threejs #R3F #WebGL #GSAP #Shaders #CreativeDev pic.twitter.com/Y0Z5ralKJY
— Leander Herzog (@lennyjpg) September 25, 2025
雲と飛行機と山を追加。#p5js pic.twitter.com/QJ9yloZONv
— ayat (@dn0t_) September 25, 2025
adjust width. Source code -> https://t.co/E4wV6MsTvQ #openframeworks #programming #creativecoding #プログラミング pic.twitter.com/bV1m2bde3N
— JunKiyoshi (@junkiyoshi) September 24, 2025
a=(d=mag(k=cos(i/48),e=cos(i/49))**4/5+3)=>
— ア (@yuruyurau) September 25, 2025
point((q=k*(9+e/3+5*sin(d*d+e-t))-sin(atan2(k,e)*9))+40*sin(c=d-t/9+i%5*2)+200,(q+90+d*9-e/d*19)*sin(c/2+6)+d*9+160)
t=0,draw=$=>{t||createCanvas(w=400,w);background(9).stroke(w,26);for(t+=PI/40,i=3e4;i--;)a()}//#つぶやきProcessing pic.twitter.com/KSjpYGZ4oe
An advantage to using particle systems is that you can control the spawning and behaviours for things like butterflies (and fish, birds...) easily. Vertex streams allow for properties to be read/used in the shader.
— Mirza Beig (@TheMirzaBeig) January 5, 2025
Example:
🦋 Random offsets for flapping wings, per-butterfly. https://t.co/m116huOAJf pic.twitter.com/5NW5btAPnv
— Pixel Symphony (@Pixel0Symphony) September 21, 2025
Well this is a neat effect 🏎️ pic.twitter.com/o4P0PaJhPW
— Ridd 🤿 (@ridd_design) September 24, 2025
Happy Thursday pic.twitter.com/VINRicUs68
— Ateliê 407 (@407Atelie) September 25, 2025
Consumed
— 1mposter (@_1mposter) September 25, 2025
We are what we feed on pic.twitter.com/YjnyJ2zHsd
discover more ✨ pic.twitter.com/Jt6YlHiCXB
— alex 👀 (@aliszu) September 24, 2025
Canvas 101
L'élément canvas permet de manipuler des pixels dans notre HTML.
Setup
Première chose à faire: définir notre canvas.
// Soit on récupère une balise canvas existante
const canvas = document.querySelector( ".myCanvas" );
// Soit on le crée
const body = document.querySelector( "body" );
const canvas = document.createElement( "canvas" );
body.append( canvas );
Les dimensions
Par défaut, un canvas a une largeur de 300px et une hauteur 150px. On utilise les propriétés width et height de notre canvas pour changer sa taille.
// On change la largeur et la hauteur.
// Inutile de préciser une unité,
// un canvas interprète les valeurs en pixels.
canvas.width = 500;
canvas.height = 500;
Le contexte
Pour pouvoir dessiner quelque chose dans notre canvas, il nous faut une dernière chose: le contexte. Ce dernier est une boîte à outils, qui contiendra nos méthodes, il en existe 2:
- 2d
- webgl2 (3d)
const canvas = document.querySelector( ".myCanvas" );
// Charge nos méthodes dans une
// constante "ctx", qui pourra être utilisé
// pour dessiner en 2d.
const ctx = canvas.getContext( "2d" );
Formes &
densité
Rectangles
// 👻 Crée un rectangle sans remplissage, sans contour
ctx.rect( x, y, width, height );
// Dessine et rempli
ctx.fillRect( x, y, width, height );
// Dessine et rajoute un contour
ctx.strokeRect( x, y, width, height );
- x: La position horizontale du coin supérieur gauche
- y: La position verticale du coin supérieur gauche
- width: La largeur du rectangle
- height: La hauteur du rectangle
Densité de pixel
Device Pixel Ratio (ou DPR)
Si votre écran à une densité de pixel plus grande que 1 ( mac, smartphones, ect.), ce que nous avons dessiné est flou, surtout sur les contours.
Il faut voir le canvas comme une balise image: elle est composée de pixels. Et comme une image, si on veut qu'elle soit nette, il faut que sa résolution reflète le nombre de pixel dessiné, multiplié par la densité de pixel de votre écran.
Ex: Sur un écran de DPR 2, un canvas de 200px doit avoir une résolution de 400px pour être net.Cercles…
// Dessine un cercle
ctx.arc( x, y, radius, startAngle, endAngle, counterclockwise = false );
- x: La position horizontale du centre
- y: La position verticale du centre
- radius: Le rayon du cercle
- startAngle: L'angle de début (en radian)
- endAngle: L'angle de fin (en radian)
- counterclockwise: La direction de l'arc de cercle (false par défaut)
Degré vs Radian
//-- Un tour de cercle
// deg = 360 ou rad = 2 * Math.PI
//-- Un quart de cercle
// deg = 90 ou rad = 0.5 * Math.PI
// Fonction pour convertir des radians en degrés
const radToDeg = ( rad ) => {
return rad * ( 180 / Math.PI );
}
// Fonction pour convertir des degrés en radians
const degToRad = ( deg ) => {
return deg * ( Math.PI / 180 );
}
Toolbox
Nombre aléatoire mk.II
const rand = ( max = 1, min = 0, { round = false } = {} ) => {
let n = Math.random() * ( max - min ) + min;
if( round ){
return Math.round( n );
}
return n;
};
- max est le nombre maximum que vous voulez obtenir ( par défaut 1 )
- min est le nombre minimum que vous voulez obtenir ( par défaut 0 )
- {...} = {} est objet contenant des options
- round est un boolean, s'il est true, alors le nombre sera arrondi (par défaut false)
Accéder à un élément aléatoire d'un tableau
const getRandomElement = ( array ) => {
const randomIndex = Math.floor( Math.random() * array.length );
return array[ randomIndex ];
};
Template Canvas
Exercices