10 - generative typography
práca s textom a písmom v p5.js
V tejto lekcii sa naučíte, ako pracovať s textom a typografiou v p5.js, a ako vytvoriť animované a generatívne efekty. Čaká vás aj niekoľko úloh na experimentovanie.
Prezentácia
Na úvod si stiahnite font:
Krok 1: Zobrazenie textu
Vytvorte jednoduchý sketch:
function setup() {
createCanvas(800, 400);
textSize(48);
textAlign(CENTER, CENTER);
text("Ahoj, svet!", width / 2, height / 2);
}
Vysvetlenie:
textSize()
nastavuje veľkosť textu.textAlign()
definuje zarovnanie textu (horizontálne a vertikálne).
Krok 2: Dynamický text
Použite myš pre dynamické ovládanie:
function setup() {
createCanvas(800, 400);
textSize(48);
textAlign(CENTER, CENTER);
}
function draw() {
background(30);
fill(lerpColor(color("red"), color("blue"), mouseX / width));
text("Ahoj svet", mouseX, mouseY);
}
Tipy:
lerpColor()
interpoluje medzi dvoma farbami.Myš kontroluje pozíciu a farbu textu.
Krok 3: Animovaný text
Naučiť sa, ako pracovať s jednotlivými znakmi textu a animovať ich nezávisle
let myFont;
function preload() {
myFont = loadFont('FiraCode-Regular.ttf');
}
function setup() {
createCanvas(windowWidth, windowHeight);
textFont(myFont);
textSize(64);
textAlign(CENTER, CENTER);
}
function draw() {
background(30);
fill(255);
let txt = "Ahoj svet!";
let baseX = width / 2 - textWidth(txt) / 2; // Začiatočná X súradnica textu
let baseY = height / 2;
for (let i = 0; i < txt.length; i++) {
let charWidth = textWidth(txt[i]);
let x = baseX + i * charWidth; // X pozícia znaku
let y = baseY + sin(frameCount * 0.1 + i * 0.5) * 20; // Animovaná Y pozícia
text(txt[i], x, y);
}
}
Krok 4: práca so samotnou typografiou:
Cieľom tohto kroku je ukázať, ako možno Perlin noise použiť na plynulé a organické animácie textu.
Krok za krokom:
Pridanie Perlin Noise do polohy jednotlivých znakov:
Použijeme funkciu
noise()
na modifikáciu pozícií znakov textu.Každý znak dostane unikátne hodnoty na základe jeho indexu a času.
let font; let points; let time = 0; function preload() { font = loadFont('Roboto-Regular.ttf'); } function setup() { createCanvas(800, 400); textFont(font); textSize(128); fill(255); noStroke(); points = font.textToPoints("Ahoj svet", 100, 200, 128, { sampleFactor: 0.2, }); } function draw() { background(0); for (let i = 0; i < points.length; i++) { let p = points[i]; // Použitie noise pre jemný pohyb let nX = noise(p.x * 0.01, p.y * 0.01, time) * 20; let nY = noise(p.y * 0.01, p.x * 0.01, time) * 20; let x = p.x + nX; let y = p.y + nY; ellipse(x, y, 5, 5); } // Posun v čase pre animáciu time += 0.01; }
Vysvetlenie kódu:
textToPoints
: Táto funkcia konvertuje text na body (vektory), ktoré môžeme upraviť.noise()
: Používame Perlin noise na plynulé animácie.time
: Časová premenná sa posúva každým frame-om, čím vzniká ilúzia pohybu.
Tipy:
Pridanie polopriesvitného pozadia
background(0, 20);
Použitie väčších bodov
Umožnite používateľovi zadať vlastný text
Last updated