2011-04-06

Processing

               Kartais reikia labai greitai sukurti/išbandyti kokį algoritmą ar pateikti informaciją vaizdžiai ir aiškiai, todėl tenka ieškoti to, kas galėtų tokį darbą palengvinti. Naudoti įprastas programavimo kalbas ir jų galimybes galima, tačiau užtruksite gerokai ilgiau kol gausite reikiamus rezultatus. Išeitis kaip visada yra! Vienas iš tokių „darbo palengvintojų“ tai Processing IDE sistema. 

                Processing - tai Java kalba paremtas ypač greitos vizualizacijos(pabrėžiu: greitos!) įrankis, kuriuo labai paprasta naudotis. Jis skirtas duomenų atvaizdavimui ir pateikimui tiek 2D tiek ir 3D. Daugelis labiausiai reikalingų ir dažniausiai naudojamų funkcijų jau realizuota, kas iš ties paspartina procesą.


Galimybės

 Jums nereikės rūpintis kaip sukurti visą vaizdavimui reikalingą aplinką. Tuo už jus pasirūpins pati programa. Pagrindinis darbas – realizuoti keletą paprastų funkcijų.  Didelis pliusas dar tas, jog pati Processing biblioteka yra atviro kodo, o sukurti  darbai gali veikti visose populiariausiose operacinėse sistemose Windows, Unix, Mac OS dėka Java ir processing kūrėjų. Darbą galima išsaugoti ir Java Applet pavidalu, kas leidžia paleisti programą net naršyklėje!  Labai įdomių pavyzdžių sukurta ir galima pasižiūrėti: http://processing.org/exhibition/

Darbo pradžia

Pradėti labai paprasta. Atsisiųsti ir įdiegti Processing Development Environment iš processing.org. Paleidus redaktorių sukuriamas naujas tuščias projektas. Jame Java klaba visada reikia realizuoti keletą pagrindinių funkcijų – setup() ir draw(). Setup funkcija skirta darbo pradžiai ir joje atliekami programos kūrimo ir kiti pradiniai paruošimo darbai. Funkcija draw() yra kviečiama piešiant kiekvieną kadrą, todėl puikiai tinka animacijai realizuoti ar interaktyviam bendravimui su vartotoju.

Pagrindinės ir dažniausiai naudojamos funkcijos:

                size(w, h) – sukuria w x h dydžio langą, šis kvietimas turi būti pats primas setup() funkcijoje
                background(r, g, b) – nustato piešiamo lango fono spalvą(išvalo ekraną)
                smooth() – pašalina objektų kampuotumą – „aliasing“ efektus
                frameRate(fps) – nustato norimą animacijos greitį kadrais/s
                stroke(r, g, b) – linijos spalvos nustatymas
                strokeWeight(w) – linijos pločio nustatymas
                fill(r, g, b) – užpildymo spalvos nustatymas
                noStroke() – piešiama be linijų
                noFill() – piešiama be užpildo

Piešimui ekrane naudojamos funkcijos:

                point(x, y) – taško piešimui
                line(x0, y0, x1, y1) – linijos piešimas
                rect(x, y, w, h) – stačiakampio piešimas
                ellipse(x, y, width, height) – elipsių/apskirtimų peišimui

                day(), hour(), second(), minute(), millis() – datos ir laiko funkcijos
                println(text) – teksto išvedimas į konsolę


Rezervuoti žodžiai ir funkcijos:  

                mouseX, mouseY, width, height – pelės pozicija ir piešimo ekrano dydis
                mouseClicked(), mouseMoved(), mousePressed(), mouseReleased() – pelės įvykių
apdorojimas

                keyPressed(), keyReleased() – klaviatūros klavišų paspaudimo

Paprastas pavyzdys:

void setup() {   

    size(400, 300);
    smooth();
    background(219, 215, 175);   
    line(20, 30, 300, 100);
    ellipse(150, 200, 30, 30);    

}

Animacijos pavyzdys:
(ekrane ratu juda apskritimas – pirmu atveju ekranas nevalomas nuo praeito kadro, antru atveju – ekranas valomas prieš piešiant naują kadrą)
  
float R = 100;

void setup() {   

size(400, 300);
smooth();
background(219, 215, 175);   
 frameRate(30);

}

void draw() {   

background(219, 215, 175);  // užkomentuoti, kad nevalytų ekrano
 float time = millis()*0.001;
ellipse(width/2 + R*cos(time),
          height/2 + R*sin(time), 30, 30);
}




Reagavimas į pelės/klaviatūros paspaudimus:
(paspaudus pele ekrane padedamas kvadratas, paspaudus Enter – ekranas išvalomas)

void setup(){   
size(400, 300);
smooth();
background(219, 215, 175);
fill(255,128,0);
}
 void mousePressed(){   
println("paspausta!");
rect(mouseX-10, mouseY-10, 10, 10);
}
void keyPressed(){  
 if(key == ENTER){
          background(219, 215, 175);
 }
 }

 void draw() {
 }

Daugiau pavyzdžių galima rasti File->Examples bei processing.org svetainėje pradedantiesiems: http://processing.org/learning/gettingstarted/



Publikavimas

Sukurtą demonstraciją galima publikuoti sukuriant Java Applet‘ą per File->Export. Tuomet bus galima programą paleisti ir naršyklės lange. Visi reikalingi failai bus sukurti automatiškai, beliks tik jais pasinaudoti.
Kitas ne ką prastesnis būdas – sukurti programą veikiančią tam tikroje OS. File->Export application gali sukurti programas Windows, Unix ir Mac OS. Šioje vietoje pasireiškia Java universalumas.

Plečiamumas

Processing aplinkoje įdiegta ir realizuota nemažai darbui naudingų bibliotekų, tokių kaip Networking – leidžia realizuoti paprasto kliento/serverio modelį, Audio, Video, DXF Export, PDF kūrimo ir netgi Serial I/O interfeisas leidžiantis dirbti su COM portais ir pan. Galim sukurti ir savo klasę esant poreikiui.
Yra sukurta nemažai ir papildomų bibliotekų, kurias labai lengva įsidiegti ir naudoti savo projektuose. Vieni iš tokių pavyzdžių, tai controlP5 biblioteka(http://www.sojamo.de/libraries/controlP5/) supaprastinanti GUI kūrimą, bei Minim Audio(http://code.compartmental.net/tools/minim/) library – galinti įrašyti/analizuoti/groti audio failus(mp3, wav, ...). Parsisiuntus biblioteką tereikia failus išpakuoti Processing „libraries“ kataloge ir ją bus galima naudoti įtraukiant į projektą per Tools->Import Library.

Kitos funkcijos

Nesudėtinga taip pat sukurti ir didesnę programą(pvz.: 2D žaidimą), kadangi visos vaizdo, garso ir valdymo galimybės yra. Tam skirtos papildomos klasės:
PImage – klasė paveiksliukų(png, jpg, gif, svg) apdorojimui. Suteikia tiesioginį priejimą prie pikselių ir jų redagavimo pasinaudojant funkcijomis loadImage(filename), loadPixels(), updatePixels(). Ekrano pikselių redagavimas atliekamas tomis pačiomis funkcijomis.
PFont – klasė darbui su šriftais. Naujų šriftų kūrimas createFont(name, size), arba sugeneruotų per Tools->CreateFont užkrovimas
PVector – vektoriaus klasė geometriniams skaičiavimas ir vektorių algebrai. Nereikia papildomai kurti savo.

Reziumė

Išbandžius ar bent pakrapščius Processing ne vienas liks neabejingas šiam vizualizacijos įrankiui. Dabar palyginkite – kiek laiko jums reikėtų, kol parašytumėt paprastą lango sukūrimą, paruošimą piešimui ir patį piešimą? O ką kalbėti apie įvairiausius kodo vingrybių marazmus ir patį kodo dydį. Su Processing šį darbą N kartų padarysite greičiau, o rezultatai neabejoju bus geresni. Viskas supaprastinta iki pat pačių elementariausių dalykų – funkcijų pavadinimai aiškūs ir paprastas valdymas, aplinka neapkrauta, o visos Java kalbos galimybės išlieka ir gali būti naudojamos.
Tikrai palieka neblogą įspūdį net pradedančiajam. Taigi belieka tik griebti ir sukurti ką nors gražaus arba įdomaus, nes su Processing dabar juk tai taip paprasta!




Komentarų nėra:

Rašyti komentarą