Дослідіть креативний код з p5.js

Sep 13, 2025
Як

Провести день Brendan dawes на Генерувати Лондон і дізнатись, як Дані - Dawesome . У цьому повсякденному семінарі він пояснить, як взяти дані, які кожен день оточує нас і перетворює його на щось красиве, використовуючи обробку та p5.js. Резервувати зараз !

p5.js це бібліотека, призначена для приведення сили Обробка до Інтернету. Він спрямований на введення художників, дизайнерів та педагогів до світу програмування, а також пропонуючи універсальні інструменти, щоб призвести до дерів та інженерів у візуальні мистецтва.

Давайте зануримося і створюємо наш перший "ескіз". Наша мета - побудувати інструмент креслення, який перетворює просте зображення в поле анімованих зірок. По-перше, ми визначимо кілька глобальних змінних і напишіть нашу Налаштування () функція. P5's Налаштування () працює один раз, коли начерк завантажено, так що це ідеальне місце для обробки ініціалізації.

Завантажте файли, які вам потрібно тут .

 var hintibage, skyimage, зірки = [];
Налаштування функції () () [... 

Всередині нашого налаштування Функція, ми створимо полотно і сховаємо курсор миші, щоб ми могли намалювати наші власні. За замовчуванням P5 додає контур навколо фігур - ми хочемо відключити штрихи в цьому випадку.

 Createcanvas (800500);
nocursor ();
Nottroke (); 

The background image – this night sky scene provides the setting for our animation

На фоновому режимі - це сцена цієї нічного неба забезпечує налаштування для нашої анімації

Далі ми завантажимо пару зображень. Один буде служити фон - у цьому випадку сцена нічного неба. Інша буде зображення "підказка" - чорно-білий дизайн наш остаточний дизайн буде заснований. Ідея полягає в тому, щоб покласти більшість зірок над чорними пікселями у нашому підказці, щоб відтворити дизайн на нашому фоновому режимі. Було б легко створити ці образи за допомогою інструментів P5 текстових та малювання інструментів, але заради стислості ми будемо використовувати статичні активи.

 hintibage = loadimage ("// bit.ly/hintimage");
skyimage = loadimage ("// bit.ly/skyimageque"); 
  

The hint image, which dictates the positioning of our stars

Наказ, який диктує позиціонування наших зірок

Функція малювання

Це Налаштування () ! Інша функція ключа є малювати () . Він називається безперервною петлею, що корисно для анімації та додавання елементів з часом.

 Функція малювання () {...} 

У рамках функції, наше перше завдання полягає в тому, щоб заповнити полотно з нашим фоновим зображенням. P5 не автоматично очищує полотно між ними малювати () Дзвінки, тому нам потрібно зробити це кожним кадром, або ми закінчимо деякі дивні ефекти накопичення. Щоб розмістити завантажене зображення на полотні, використовуйте зображення () функція і дайте x і y координати для позиціонування.

 зображення (skyimage, 0, 0); 

Далі ми захопимо поточне розташування миші та зберігати його як P5.Vector, використовуючи Креття () . Цей об'єкт поставляється з зручними функціями, щоб мати справу з точками в просторі, але ми в основному просто використовуємо його як контейнер.

 VAR позиція = творчість (Mousex, Mousey); 

Використовуючи нашу новоутворену позицію миші, ми можемо намалювати курсор. Ми встановимо колір креслення заповнити () шляхом проходження значення RGB та використання Еліпс () щоб намалювати коло на місці миші.

 Заповніть (255, 192, 0);
ellipse (position.x, position.y, 8, 8); 

Ми хочемо лише малювати нові зірки, поки миша натиснута, тому ми перевіримо P5's мишаний перед тим, як продовжити. Якщо миша вниз, ми повинні розрахувати гарне місце для нашої наступної зірки, щоб закінчитися. Ми будемо робити це за допомогою спеціальної функції findpixel () , який ми визначимо пізніше.

Discover the creative side of code with Brendan Dawes at Generate London

Відкрийте для себе творчу сторону коду з Бренданом Деутс у створенні Лондона

Одного разу ми маємо ціль, ми створимо новий екземпляр об'єкта зірка (більш нижче) і натиснути його на кінець нашого масиву зірки. Якщо ми закінчимо більше 2000 зірок, ми почнемо відкинути найстаріші.

 IF (мишаний) {
var target = findpixel ();
var star = нова зірка (положення, ціль);
stars.push (зірка);
якщо (зірки.Ленчення & gt; 2000) stars.Shift ();
} 

Нарешті, ми будемо цикл через наш масив зірок і зателефонуючи оновлення () і малювати () на кожному з них. Пізніше ми занурюємо ці методи.

 для (var i = 0; i & lt; stars.length; i ++) {
зірки [i] .update ();
зірки [i] .draw ();
} 

Допоміжні функції

Зараз Налаштування () і малювати () На місці ми будемо працювати над допоміжними функціями та об'єктами. По-перше, ми визначимо функцію, яка знаходить позицію для відпочинку для кожної нової зірки. Все, що нам потрібно зробити, це перевірити деякі випадкові пікселі в нашому підказці, використовуючи отримати () щоб побачити, чи вони чорні або білі.

Насправді ми повинні лише подивитися на їхнє червоне значення, тому що в обох випадках значення RGB відповідає. Якщо ми знайдемо не-білий піксель, ми повернемося, тому що ми потрапили на наш дизайн. Якщо ні, ми просто повернемо останній піксель, і він буде служити випадковою зіркою.

 Функція Findpixel () {
var x, y;
для (var i = 0; i & lt; 15; i ++) {
x = поверх (випадковий (hintibage.width));
y = поверх (випадковий (hintibage.height));

якщо (червоний (hintimage.get (x, y)) & lt; 255) перерва;
}
Повернення творчості (x, y);
} 

Останній - це наш користувацький об'єкт зірки. Просто ми хочемо багаторазового контейнера, який зберігає інформацію про кожну зірку, а також надає засоби для оновлення та нанесення їх. JavaScript не забезпечує способу створення класів у традиційному сенсі, але ми можемо отримати той самий результат, визначивши функцію та розширюючи його для власних потреб.

Кожна зірка має декілька властивостей (вихідна позиція, остаточне місце розташування та випадково генерований діаметр), який ми визначимо в "функції конструктора", яка називається для кожної нової зірки, створеної в нашій петлі.

 Функція зірка (положення, ціль) {
це. Позиція = положення;
this.target = target;
це.Diameter = випадковий (1, 5);
} 

Далі ми додамо оновлення () Метод зірка, який буде використовувати P5.Vector Лерп () Для розрахунку нового розташування між поточними та цільовими позиціями зірки. У цьому випадку ми рухаємо чотири відсотки від залишкової відстані для кожної розіграшу, що ефективно дає нам полегшення ефекту.

Якщо ми хотіли б отримати фантазії, ми також можемо також моделювати деяку фізику, але тепер ми збережемо це просто.

 Star.Prototype.update = Функція () {
це.position = p5.vector.lerp (
це.position,
цей.Target,
0,04
);
}; 

Малювання зірки

Нарешті, зірки малювати () Метод фактично малює зірку до полотна. Ще раз, ми використовуємо заповнити () і Еліпс () , хоча на цей раз ми називаємо заповнити () з значенням сірого та значенням альфа для прозорості.

Each frame, linear interpolation gives us a new point along the path between the current star position and its destination

Кожна кадр, лінійна інтерполяція дає нам нову точку по шляху між поточною позицією зірки та його призначенням

Щоб дати зірки блиск, альфа-значення визначається за допомогою P5's шум () функція. Це повертає значення шуму за допомогою заданих координат, що означає, що ви отримуєте гладку, рідну послідовність випадкових чисел. Для третього параметра ми пропускаємо значення часу, а не просторову цінність, так що шум буде змінювати з часом.

 Star.Prototype.Draw = функція () {
var alpha = шум (
це.target.x,
це.target.y,
Мілліс () / 1000.0
);

Заповніть (255, альфа * 255);

еліпс (
це.position.x, це.position.y,
це.Diameter, цей.Diameter
);
}; 

Це для нашого першого ескізу! Натисніть і перетягніть, щоб побачити нові зірки з'являються і відповідають зображенням підказки.

Що далі?

Звідси ви можете додати деякі HTML-елементи для керування змінними, використовуючи додаток P5.DOM або навіть додавати звук до візуальних даних p5.sound .

Ми тільки подряпали поверхню того, що можливо з p5.js, і з новими функціями на шляху, є ще більше, щоб з нетерпінням чекати. Весело!

Дізнайтеся більше про творчу сторону кодування Генерувати Лондон ! Brendan dawes навчить вас використовувати обробку та p5.js, щоб перетворити дані в речі краси У своїй майстерні ;Він також буде говорити про радість роботи з Папір, пластик та пікселя . Забронювати квиток зараз !


Як - Найпопулярніші статті

Як уникнути Amazon Prime Day 2020 FAIL

Як Sep 13, 2025

(Зображення кредиту: Amazon) Хоча ми ще не знаємо точної дати Amaz..


Відновити мангу класику

Як Sep 13, 2025

Я був величезним шанувальником манга з дитинства, і це неможливо прихо..


Створіть примарні текстури з методами змішаного медіа

Як Sep 13, 2025

Коли я вперше перейшов з традиційного до цифрової ілюстрації робочого..


Як розплавити 3D-об'єкт з трьома.JS

Як Sep 13, 2025

Інтернет, як ми це знаємо, постійно змінюються та розвиваються. Те, що м..


Створити інтерактивні 3D-візуальні матеріали з трьома.JS

Як Sep 13, 2025

Цей підручник WebGL демонструє, як створити 3D-симуляцію навколишнього се..


Створіть користувацький інтерфейс Maya

Як Sep 13, 2025

Сучасне програмне забезпечення може бути надзвичайно потужним і всеосяжним. Майя не відрізняється, про�..


Як зробити фотореалістичне небо

Як Sep 13, 2025

Для цього підручника ми будемо використовувати Vue xstream створит..


Як спроектувати анімований герой

Як Sep 13, 2025

Наступні поради розбивають мій процес для анімаційного Bink для майбутніх веб-серій Eric Miller Miller Miller. Bink - це ..


Категорії