EU:n koodausviikko: Kuvataidetta koodaten
-
EU:n koodausviikko Innokkaan sivuilla: https://www.innokas.fi/tapahtumat/eun-koodausviikko-2025/
-
EU Codeweek-sivusto: https://codeweek.eu/
Processing-ohjelman esittely
Processing-ohjelmointikielen kehittivät Casey Reas ja Benjamin Fry 2001 MIT:n medialaboratoriossa. Se on avoimeen lähdekoodin perustuva ohjelmointikieli, joka kehitettiin elektronisen taiteen luomiseen. Processing perustuu Java-ohjelmointikieleen.
Kuvataidetta koodaten -sivu
Lyhytlinkki tälle sivulle on https://bit.ly/kuvataidetta-koodaten (voit kirjoittaa selaimen osoiteriville pelkästään bit.ly/kuvataidetta-koodaten). Osoite pitkässä muodossaan on https://www.teromakotero.fi/kuvataidetta-koodaten/, Voit käyttää oheista sivua vapaasti opiskellaksesi tai opettaaksesi Processing-ohjelmointia ja kuvan tekemistä
Kurssin laajempi versio löytyy tästä samasta sivustosta osoitteessa https://www.teromakotero.fi/processing/. Tältä sivustolta löytyy myös muita ohjelmointikursseja, jotka kaikki ovat vapaita ja avoimia käytettäväksi sekä opiskeluun että ohjelmointiin. Koko sivuston osoite on https://www.teromakotero.fi/
Processing-ympäristön ohjevideoita englanniksi
https://processing.org/tutorials/
Esimerkkejä Processingilla luodusta taiteesta
Tästä linkistä pääset selaamaan tässä kuussa tehtyä taidetta samassa ympäristössä, jossa tänään harjoittelemme:
https://openprocessing.org/browse?time=thisMonth&type=hearts&q=&offset=0#
Kurssiympäristö
Kurssin voi suorittaa tältä sivulta suoraan sille upotetuista tehtäväpohjista. Niissä hyödynnetään OpenProcessing ympäristöä: https://openprocessing.org/. Tehtävät voi suorittaa kirjautumatta eikä mitään tarvitse tallentaa omaan laitteeseen. Processing-ohjelman voi ladata halutessaan sen omilta sivuilta osoitteesta: processing.org/download.
P5js ja Pjs
Tällä kurssilla sinun ei tarvitse huomioida ohjelmointikielen valintaa, sillä esimerkit ja haasteet ovat jo valmiita ohjelmointikielen osalta. Halusin sen kuitenkin liittää mukaan, jotta pääset sujuvasti luomaan omia projektejasi alustalla.
Tärkeä huomio: kun menet OpenProcessing ympäristöön ja lähdet tekemään omaa projektiasi oletusvalinta ohjelmointikieleksi on P5js. Se perustuu JavaScriptiin, jonka komennot ovat erilaisia kuin tässä kurssissa käytetyt Java-kieleen perustuvat komennot. Siksi valitse oikeasta reunasta kieleksi Pjs, niin voit ohjelmoida tämän kurssin ohjeiden mukaisesti. Koska web-selain toimii JavaScriptillä, kääntää editori myös Java-kielen JavaScriptiksi.
Alla kuva koodieditorista tämän sivun upotuksina. Sen alla on kuva OpenProcessing sivun näkymästä koodieditoriin ja kuinka valitset käytettävän ohjelmointikielen Javaksi (oletus on siis P5js).
Koodieditori
Forkkauksesta lisää täällä: https://fi.wikipedia.org/wiki/Forkkaus. Forkkaamalla pääset tekemään oman versiosi tämän sivun projekteista. Haasteet pääset tekemään myös forkkaamalla.
Perusmuodot ja niiden komennot
Koordinaatit
X- ja y-koordinaatit lähtevät nollasta oikeasta yläkulmasta ja suurenevat vasemmalta oikealle (x) ja ylhäältä alas (y).
Piste
Koodissa vinoviiva / ja asteriski * aloittavat kommentin (tietokone jättää sen huomioimatta koodia ajettaessa) ja vastaavasti asteriski * ja vinoviiva / lopettavat kommentin. Tällainen kommentti voi olla usean rivin mittainen.
Kaksi vinoviivaa // aloittavat yhden rivin kommentin. Alla koodi pisteen piirtämistä varten.
/* @teromakotero Tero Toivanen piste tehdään komennolla point(x, y). X ja y edustavat vastaavia koordinaatteja */ point(width/2, height/2); // Leveyttä ja korkeutta ei määritetty-> 100px x 100px
Viiva
/* @teromakotero Tero Toivanen Viiva tehdään komennolla line(x1, y1, x2, y2). x1 ja y1 edustavat viivan lähtöpisteen koordinaatteja, ja x2 ja y2 edustavat viivan päätepisteen koordinaatteja */ line(10, 10, 90, 90); // lähtöpiste(10,10) ja päätepiste(90,90)
Vihreä kolmio
/* @teromakotero Tero Toivanen Kolmio tehdään komennolla triangle(x1, y1, x2, y2, x3, y3). x1 ja y1 edustavat kolmion lähtöpisteen koordinaatteja, x2 ja y2 edustavat kolmion seuraavan pisteen koordinaatteja ja x3 ja y3 edustavat kolmion viimeisen pisteen koordinaatteja. Se täytetään värillä komennolla fill(r, g, b), jossa kirjain r edustaa punaista valoa, g vihreää ja b sinistä Niille annetaan arvot välillä 0-255, 255 on maksimi ja 0 minimi Näitä kolmea yhdistämällä saadaan kaikki värit aikaiseksi Jos arvoja on vain yksi, annetaan eri harmaan sävyjen arvoja */ fill(0, 255, 0); // Väri annetaan ennen kolmion piirtämistä // Tässä tapauksessa piste on vihreä, koska // g:n arvo 255 ja muiden 0 noStroke(); // Komennolla noStroke(), ääriviivat poistuvat triangle(10, 10, 90, 90, 50, 90); // lähtöpiste(10, 10), seuraava piste(90, 90) // ja (50, 90) viimeinen piste
Vihreä neliö
/* @teromakotero Tero Toivanen Suorakulmio tehdään komennolla rect(x1, y1, w, h). x1 ja y1 edustavat neliön lähtöpisteen koordinaatteja, w edustaa suorakulmion leveyttä h edustaa suorakulmion korkeutta Oletuksena (default) kaksi ensimmäistä numeroa edustava suorakulmion vasenta yläkulmaa ja kaksi seuraavaa suorakulmion leveyttä ja korkeutta. Se täyteään värillä komennolla fill(r, g, b), jossa kirjain r edustaa punaista valoa, g vihreää ja b sinistä Niille annetaan arvot välillä 0-255, 255 on maksimi ja 0 minimi Näitä kolmea yhdistämällä saadaan kaikki värit aikaiseksi Jos arvoja on vain yksi, annetaan eri harmaan sävyjen arvoja */ fill(0, 255, 0); // Väri annetaan ennen suorakulmion // piirtämistä // Tässä tapauksessa suorakulmio on vihreä, // koska // g:n arvo 255 ja muiden 0 noStroke(); // Komennolla noStroke(), ääriviivat poistuvat rect(10, 10, 80, 80); // vasen yläkulma(10, 10), leveys 80px ja korkeus 80px
Sininen ympyrä
/* @teromakotero Tero Toivanen Ellipsi tehdään komennolla ellipse(x1, y1, w, h). x1 ja y1 edustavat ellipsin keskipisteen koordinaatteja, w edustaa ellipsin leveyttä h edustaa ellipsin korkeutta Ellipsi, jonka leveys ja korkeus ovat samat, on ympyrä. Oletuksena (default) kaksi ensimmäistä numeroa antavat ellipsin sijainnin, ja kaksi seuraavaa ellipsin leveyden ja korkeuden. Se täytetään värillä komennolla fill(r, g, b), jossa kirjain r edustaa punaista valoa, g vihreää ja b sinistä Niille annetaan arvot välillä 0-255, 255 on maksimi ja 0 minimi Näitä kolmea yhdistämällä saadaan kaikki värit aikaiseksi Jos arvoja on vain yksi, annetaan eri harmaan sävyjen arvoja */ fill(0, 0, 255); // Väri annetaan ennen ympyrän // piirtämistä // Tässä tapauksessa ympyrä on sininen, // koska // b:n arvo 255 ja muiden 0 noStroke(); // Komennolla noStroke(), ääriviivat poistuvat ellipse(width/2, height/2, 80, 80); // ellipsin(ympyrän) keskipiste (10, 10), // leveys 80px ja korkeus 80px
Taustalle väri ja koko
/* @teromakotero Tero Toivanen Taustan koko määritellään komennolla size(w, h), jossa w edustaa leveyttä ja h korkeutta. Taustan väri annetaan komennolla background(r, g, b) Jos on vain yksi numero, niin se edustaa harmaan eri sävyjä. */ background(0); // Taustan väriksi asetetaan musta size(200, 200); // Taustan kooksi asetetaan 200px x 200px fill(0, 0, 255); // Väri annetaan ennen ympyrän // piirtämistä // Tässä tapauksessa ympyrä on sininen, // koska // b:n arvo 255 ja muiden 0 noStroke(); // Komennolla noStroke(), ääriviivat poistuvat ellipse(width/2, height/2, 80, 80); // ellipsin(ympyrän) keskipiste (width/2, height/2), // leveys 80px ja korkeus 80px
Haaste 1
Aurinko on tipahtanut outoon paikkaan. Valitse ”Fork” ja koodaa aurinko taivaalle paistamaan. Valitsemalla </> -pääset koodaamaan ja sen vasemmalla puolella olevasta ikonista ► pääset kokeilemaan koodin toimintaa. Sinun ei tarvitse kirjautua ja jos haluat, voit kopioida koodin itsellesi talteen johonkin muuhun ympäristöön.
Muodot liikkumaan koodaten
/* @teromakotero Tero Toivanen Aluksi luodaan kokonaislukumuuttuja x, ja asetetaan sen arvoksi 0(int x = 0, muuttujasta on siis oma lukunsa. Seuraavaksi luodaan funktio setup(), jonka tyyppi on void. void tarkoittaa, ettei funktio palauta mitään arvoa (tästä puhutaan lisää funktiota käsiteltäessä). setup()-funktiossa asetetaan taustan kooksi 500px x 500px. Seuraavaksi luodaan draw()-funktio. Se on myös tyyppiä void. draw-funktion sisällä värjätään tausta mustaksi (background(0)), asetetaan ellipsin täyttöväriksi punainen (fill(255, 0, 0) ja piirretään lopuksi ellipsi (50px x 50px kokoinen punainen ympyrä). ympyrän sijainnin x-koordinaatti päivittyy jokaisella toistokerralla yhden pikselin verran (x = x + 1). Näin saadaan aikaiseksi animaatio, jossa punainen ympyrä siirtyy vasemmalta oikealle. */ int x = 0; // asetetaan muuttujan i:n arvoksi 0 void setup() { // aloitetaan setup()-funktio size(500, 500); // asetetaan taustan kooksi 500px x 500px } // funktion koodi alkaa ja loppuu kaarisululla void draw() { // aloitetaan draw()-funktio background(0); // värjätään tausta mustaksi fill(255, 0, 0); // asetetaan ellipsin väriksi punainen (255, 0, 0) ellipse(x, height/2, 50, 50); // piirretään ellipsi(ympyrä) x = x + 1; // päivitetään x-koordinaatin arvo }
Ehtolauseella pallo takaisin näkyviin
/* "Muodot liikkumaan" -koodissa animoitiin silmukan avulla ympyrä, joka liikkui vasemmalta oikealle. Kun se saavutti taustan oikean reunan, se hävisi näky- vistä. if-ehtolauseen avulla saamme sen tulemaan uudestaan esille vasemmasta reunasta muuttamalla ympyrän x-koordinaatin arvoa, kun se saavuttaa haluamamme kohdan. */ int x = 0; // asetetaan muuttujan x arvoksi 0 void setup() { // aloitetaan setup()-funktio size(500, 500); // asetetaan taustan kooksi 500px x 500px } // funktion koodi alkaa ja loppuu kaarisululla void draw() { // aloitetaan draw()-funktio background(0); // värjätään tausta mustaksi fill(255, 0, 0); // asetetaan ellipsin väriksi punainen (255, 0, 0) ellipse(x, height/2, 50, 50); // piirretään ellipsi(ympyrä) x = x + 1; // päivitetään x-koordinaatin arvo if (x >= (500 + 50)) { // jos x:n arvo on suurempi tai yhtäsuuri kuin // 500 (taustan oikea reuna) + 50 (ympyrän koko), niin x = (0 - 50); // x:n arvoksi asetetaan 0 (taustan vasen reuna) - // 50 (ympyrän koko). } }
Haaste 2
Animoi muotoja liikkumaan. Voit muokata muotojen väriä, ääriviivoja ja paikkaa. Aloita haluamastasi muodosta ja laita se liikkumaan. Jos ehdit, pistä kaikki liikkeelle.
Random() -funktio – satunnaislukugeneraattori
-
Processing-ohjelmassa on random() -funktio, joka generoi satunnaislukuja
-
Kyseessä on näennäissatunnaisluvut (ns. pseudo-satunnaisluvut), jolloin satunnaislukuja tuotetaan siemenluvusta ennakkoon määritellyn algoritmin mukaan
-
Random() -funktiota voi käyttää esimerkiksi satunnaisten värien tai paikan ohjelmoimiseen
Esimerkkejä:
random(5); palauttaa satunnaisia desimaalilukuja nollan ja viiden väliltä
random(10,100); palauttaa satunnaisia desimaalilukuja kymmenen ja sadan väliltä
int(random(5)); palauttaa kokonaislukuja nollan ja viiden väliltä
fill(random(255),random(255),random(255)); täyttää muodon satunnaisella värillä (valitsee arvot 0 ja 255 väliltä)
stroke(random(255),random(255),random(255)); muodon ääriviiva muodostuu satunnaisella värillä
Ahaa – idea kuvataiteesta ohjelmoiden
/* Tässä idea kuvataiteen tekemisestä Processingilla. Näyttö täyttyy sattumanvaraisesti erivärisistä läpikuultavista palloista. Pallojen määrän kasvaessa värit kirkastuvat pikkuhiljaa. */ void setup() { // aloitetaan setup()-funktio background(0); // värjätään tausta mustaksi //fullScreen(); // asetetaan taustan kooksi laitteen näytön koko size(640,480); // asetetaan taustan kooksi 640x480 px } void draw() { // aloitetaan draw()-funktio int alfa = 50; // asetetaan läpinäkyvyys arvoon 50 (arvot 0-255 käytössä) float red = random(255); // punaisen värin arvoksi sattumanvaraisesti (0-255) float green = random(255); // sama kuin edellinen vihreän värin osalta float blue = random(255); // sama punaisen osalta fill(red, green, blue, alfa); // määritetään täyttöväri edellisillä muuttujilla stroke(red, green, blue, alfa); // määritetään ääriviivan väri samaksi kuin täyttöväri float koko = random(10,100); // asetetaan kooksi sattumanvaraisesti (10-100 pikseliä) ellipse(random(width),random(height),koko,koko); // piirretään ympyrä sattumanvaraiseen kohtaan }
Haaste 3
Tee oma taideteoksesi ohjelmoiden
Päästä luovuutesi irti ja pidä hauskaa! 😄
Kuvataidetta koodaten © 2025 by Tero Toivanen is licensed under CC BY-SA 4.0

