Spędzać dzień Brendan Dawes. w Generować Londyn i odkryj, jak. Dane są Dawesome. . W tym tygodniu warsztat wyjaśni, jak podjąć dane, które otaczają nas każdego dnia i przekształcić ją w coś pięknego przy użyciu przetwarzania i p5.js. Rezerwuj teraz !
p5.js. jest biblioteką zaprojektowaną, aby przynieść moc Przetwarzanie do sieci. Ma na celu wprowadzenie artystów, projektantów i nauczycieli do świata programowania, a także oferuje wszechstronne narzędzia do przynoszenia devs i inżynierów w sztuce wizualnej.
Zanurzmy się i stwórzmy nasz pierwszy "szkic". Naszym celem jest zbudowanie narzędzia do rysowania, które przekształca prosty obraz w dziedzinę animowanych gwiazd. Po pierwsze, zdefiniujemy kilka zmiennych globalnych i napiszemy nasze Ustawiać() funkcjonować. P5 Ustawiać() Jest uruchomiony raz, gdy szkic jest załadowany, więc idealne miejsce do obsługi inicjalizacji.
Pobierz pliki potrzebne tutaj .
Var Hintimage, SkyImage, Stars = [];
Konfiguracja funkcji () {...}
Wewnątrz naszego Ustawiać Funkcja, stworzymy płótno i ukryjemy kursor myszy, abyśmy mogli czerpać własne. Domyślnie P5 dodaje kontur wokół kształtów - chcemy wyłączyć uderzenia w tym przypadku.
CreateCanvas (800.500);
NOCURSOR ();
Nostrok ();
Następnie załadujemy parę obrazów. Jeden będzie służyć jako tło - w tym przypadku, nocna scena nieba. Drugi będzie obraz "podpowiedzi" - czarno-biały projekt nasz końcowy projekt będzie oparty na. Pomysł jest umieszczenie większości gwiazd na czarnych pikselach w naszym obrazie podpowiedzi, aby odtworzyć projekt na naszej scenie tło. Łatwo byłoby stworzyć te obrazy z narzędziami tekstowymi i rysunkami P5, ale ze względu na zwięzłość użyjemy aktywa statycznych.
Hintimage = Loadimage ("// bit.ly/hintimage");
SkyImage = LoadImage ("// bit.ly/skyImage") ;
To dla Ustawiać() ! Kolejna funkcja jest remis() . Nazywa się w ciągłej pętli, która jest pomocna dla animacji i dodawania elementów w czasie.
Wyciąg funkcji () {...}
W funkcji Rysunek naszym pierwszym zadaniem jest wypełnienie płótna naszego obrazu tła. P5 nie usuwa automatycznie płótna między remis() Połączenia, więc musimy zrobić to każdą ramkę lub skończyć z kilkoma dziwnymi efektami akumulacji. Aby umieścić załadowany obraz na płótnie, użyj wizerunek() Funkcja i daj współrzędne X i Y do pozycjonowania.
Obraz (SkyImage, 0, 0);
Następnie weźmiemy bieżącą lokalizację myszy i przechowujemy go jako P5.Vector za pomocą CreateVector () . Ten obiekt zawiera poręczne funkcje, aby poradzić sobie z punktami w przestrzeni, ale jesteśmy głównie używając go jako kontenera.
Var Position = Cerrevector (Mousex, Muey);
Korzystając z naszej nowo zapisanej pozycji myszy, możemy narysować nasz kursor. Ustawimy kolor rysunku napełnić() Przekazując wartości RGB i użyć elipsa() Aby narysować koło w miejscu myszy.
Wypełnij (255, 192, 0);
Elipsa (pozycja.x, pozycja.y, 8, 8);
Chcemy tylko narysować nowe gwiazdy, gdy mysz jest naciśnięty, więc sprawdzimy p5 myszki przed kontynuowaniem. Jeśli mysz jest w dół, musimy obliczyć dobre miejsce na naszą kolejną gwiazdę, aby skończyć. Zrobimy to za pomocą niestandardowej funkcji fatpixel () , które zdefiniujemy później.
Po uzyskaniu celu, stworzymy nową instancję niestandardowego obiektu gwiazdkowego (więcej poniżej) i naciśnij go na końcu naszej tablicy. Jeśli skończymy z ponad 2000 gwiazdek, zaczniemy odrzucić najstarsze.
Jeśli (myszki) {
var cel = fatpixel ();
var star = Nowa gwiazda (pozycja, cel);
Stars.Push (Star);
Jeśli (Stars.Length & GT; 2000) Stars.Shift ();
}
Wreszcie, pętlimy przez naszą szereg gwiazd i zadzwonić aktualizacja() i remis() na każdym z nich. Nurkujemy do tych metod później.
Dla (Var I = 0; I & LT; Stars.Length; I ++) {
gwiazdy [i] .update ();
Gwiazdy [I] .Draw ();
}
Teraz Ustawiać() i remis() są na miejscu pracujemy na funkcjach i obiektach pomocniczych. Po pierwsze, zdefiniujemy funkcję, która znajduje pozycję spoczynkową dla każdej nowej gwiazdy. Wszystko, co musimy zrobić, to sprawdzić losowe piksele w naszym obrazie podpowiedzi, używając otrzymać() aby sprawdzić, czy są czarne lub białe.
Właściwie musimy tylko spojrzeć na ich wartość czerwoną, ponieważ w obu przypadkach pasuje do wartości RGB. Jeśli znajdziemy nie-biały piksel, wrócimy, bo uderzyliśmy nasz projekt. Jeśli nie, po prostu wrócimy ostatnie sprawdzane piksel i będzie służył jako losowa gwiazda.
Funkcja Findpixel () {
var x, y;
dla (Var I = 0; I & LT; 15; I ++) {
x = podłoga (losowa (hintimage.width));
y = podłoga (losowa (hintimage.height));
Jeśli (czerwony (hintimage.get (x, y)) i lt; 255);
}
Powrót CreatEvector (X, Y);
}
W końcu jest naszym niestandardowym obiektem gwiazd. Połóż proste, chcemy kontenera wielokrotnego użytku, który przechowuje informacje o każdej gwiazdce, a także zapewnia środki do aktualizacji i rysowania. JavaScript nie zapewnia sposobu tworzenia klas w tradycyjnym znaczeniu, ale możemy uzyskać ten sam wynik, definiując funkcję i rozszerzenie go dla naszych własnych potrzeb.
Każda gwiazda ma kilka właściwości (pozycja wyjściowa, ostatnia lokalizacja i losowo generowana średnica), którą zdefiniujemy w "funkcji konstruktora", który jest wywoływany dla każdej nowej gwiazdy utworzonej w naszej pętli remisowej.
Star funkcji (pozycja, cel) {
ta.pozycja = pozycja;
to.target = cel;
to.diameter = losowo (1, 5);
}
Następnie dodamy aktualizacja() Metoda gwiazdy, która będzie używać P5.Vector lerp () Aby obliczyć nową lokalizację między aktualnymi i docelowymi pozycjami gwiazdami. W tym przypadku przenosimy cztery procent pozostałej odległości dla każdego remisu, co skutecznie daje nam efekt łatwościowy.
Gdybyśmy chcielibyśmy zdobyć fantazję, możemy również symulować trochę fizyki, ale na razie będziemy to proste.
Star.Prototype.update = Funkcja () {
this.pozycja = p5.vector.lerp (
ta pozycja,
to.target,
0,04.
);
};
Wreszcie gwiazda remis() Metoda faktycznie rysuje gwiazdę na płótnie. Po raz kolejny używamy napełnić() i elipsa() , Chociaż tym razem dzwonisz napełnić() z wartością skali szarości i wartością alfa dla przezroczystości.
Dać gwiazdy błyskawiczne, wartość alfa jest określana za pomocą P5 hałas() funkcjonować. Zwraca to wartość hałasu perlin dla określonych współrzędnych, co oznacza, że otrzymujesz płynną, płynną sekwencję liczb losowych. W trzecim parametrze przechodzimy wartość opartą na czas, a nie wartość przestrzenną, dzięki czemu hałas będzie ożywiony z czasem.
Star.Prototype.draw = Funkcja () {
var alfa = hałas (
to.target.x,
to.target.y,
Millis () / 1000.0
);
wypełnić (255, alfa * 255);
elipsa(
to.position.x, this.position.y,
to.diameter, to.diameter.
);
};
To dla naszego pierwszego szkicu! Kliknij i przeciągnij, aby zobaczyć nowe gwiazdy pojawiać się i dostosować się do obrazu podpowiedzi.
Stąd można dodać kilka elementów HTML do zmiennych sterujących za pomocą dodatku P5.dom lub nawet dodać dźwięk do wizualizacji P5.Sound. .
Musiliśmy tylko porysowaliśmy powierzchnię tego, co jest możliwe dzięki P5.js i z nowymi funkcjami po drodze, jest jeszcze więcej, aby się doczekać. Baw się dobrze!
Dowiedz się więcej o twórczej stronie kodowania Generować Londyn ! Brendan Dawes. nauczy Cię, jak używać przetwarzania i p5.js, aby włączyć dane do rzeczy piękna W jego warsztacie. ;On będzie również mówił o radości współpracy papier, plastik i piksele . Zarezerwuj teraz bilet !
(Kredyt obrazu: Getty Images) Przechowywanie w chmurze zapewnia mnóstwo korzyści dla kreacji wszystkich typów, zw�..
(Kredyt obrazu: Jonathan Hastsy) Strona 1 z 2: Strona 1 Stron..
Strona 1 z 2: Krita Tutorial: Znajdź swoją drogę Krita Tutorial: Znajdź swoją drogę Krita Tutori..
Nie masz dostępu do tablicy fotogrametrii, aby przeprowadzić Skanowanie 3D. ? Nie ma problemu, te wskazówki i s..
Moja podróż do tworzenia 3d art. rozpoczął się kilka lat temu, kiedy mój brat kazał mi spróbować ..
Badorddin Blue Zoo Badrundin będzie w Vertex 13 marca omawiający, jak ukończyć Animacja w stylu kreskówki, zacznij wykończy..
W tym samouczku będziemy używać Vue xstream. stworzyć niebo pełne chmur. Chociaż mógłbyś wybrać odtworzy..
Mój jest dość impresjonistyczny styl akwareli Technika malarstwa , gdzie szczegół jest mniej ważny niż komp..