謝作如
● 什么是Processing
在很多人的眼里,編程是理工男的專利,是深不可測(cè)又枯燥無(wú)味的代碼輸入過(guò)程。但是,算法和程序設(shè)計(jì)技術(shù)的先驅(qū)——唐納德·克努特(1974年度的圖靈獎(jiǎng)獲得者)卻不這么認(rèn)為。他說(shuō),程序設(shè)計(jì)既是一門科學(xué),也是一門藝術(shù),二者可以彼此很好地互相補(bǔ)充。
Processing是一款專為設(shè)計(jì)師和藝術(shù)家使用的編程語(yǔ)言,由美國(guó)麻省理工學(xué)院媒體實(shí)驗(yàn)室美學(xué)與運(yùn)算小組(Aesthetics Computation Group )的Casey Reas與Ben Fry創(chuàng)立。Processing的出現(xiàn),被視為藝術(shù)設(shè)計(jì)創(chuàng)作的一場(chǎng)革命。利用Processing,藝術(shù)家可以將抽象的數(shù)據(jù)呈現(xiàn)為生動(dòng)的視覺(jué)形象。它不僅可以生成唯美的圖形,還能編寫出功能強(qiáng)大的互動(dòng)藝術(shù)作品。
Processing軟件的官方網(wǎng)站:http://www.processing.org/(如圖1)。最新的Processing為2.0版,軟件下載地址為:http://www.processing.org/download/。
圖1
● Processing的特色
1.用數(shù)字來(lái)設(shè)計(jì)
“用數(shù)字來(lái)設(shè)計(jì)”(Design By Numbers),是Processing獨(dú)創(chuàng)的程序設(shè)計(jì)方法。它的思想是簡(jiǎn)單地寫一行代碼,就會(huì)在屏幕上生成一個(gè)圖形,再增加一些代碼,圖形就能根據(jù)鼠標(biāo)的動(dòng)作發(fā)生變化。這些代碼稱之為草稿(Sketch)。Processing的設(shè)計(jì)者認(rèn)為,草稿化(Sketching)是一種思維方式,有趣而便捷,可以讓人在短時(shí)間內(nèi)探索出很多想法。“草稿”一詞的強(qiáng)調(diào),讓使用者體會(huì)在計(jì)算機(jī)屏幕上畫圖,就如同在圖形紙上作畫一樣,下頁(yè)圖2為草稿,下頁(yè)圖3為草稿對(duì)應(yīng)的圖畫。
利用Processing可以實(shí)現(xiàn)夢(mèng)幻般的視覺(jué)展示效果。http://www.openprocessing.org/和http://wiki.processing.org/均是Processing的資源網(wǎng)站,提供了大量美輪美奐的畫面。當(dāng)然,這些畫面都是用Processing畫出來(lái)的(如下頁(yè)圖4)。
2.代碼簡(jiǎn)潔但功能強(qiáng)大
Processing是Java語(yǔ)言的延伸,支持許多現(xiàn)有的Java語(yǔ)言架構(gòu),不過(guò)在語(yǔ)法上簡(jiǎn)易了許多,并具有許多貼心及人性化的設(shè)計(jì)。通過(guò)Processing,無(wú)需太高深的編程技術(shù),便可創(chuàng)作出漂亮的圖形以及媒體交互作品。如下頁(yè)圖3、下頁(yè)圖4所示,僅僅幾行代碼,就能制作出跟隨鼠標(biāo)畫圓的互動(dòng)作品來(lái)。
Processing支持3D圖形,它有P3D和OpenGL兩種渲染模式。Processing默認(rèn)以2D模式運(yùn)行,使用3D模式需要在size()函數(shù)中的第三個(gè)參數(shù)指定渲染模式,形如size(w, h, P3D)或size(w, h, OPENGL)。其中,P3D是Processing內(nèi)置的,而OpenGL則以庫(kù)的形式存在。
Processing采用“庫(kù)”的形式,實(shí)現(xiàn)功能方面的拓展。除了Processing自己的核心庫(kù)外,還有上百個(gè)非官方的庫(kù)在Processing網(wǎng)站上。這些庫(kù)拓展了Processing在音頻、視頻、網(wǎng)絡(luò)和串口等方面的功能,甚至進(jìn)入了計(jì)算機(jī)視覺(jué)處理、虛擬現(xiàn)實(shí)和電子裝配(Fabrication)等領(lǐng)域。利用這些庫(kù),Processing能夠任意讀寫很多種類的信息。
3.與物理世界的互動(dòng)
Arduino是一個(gè)風(fēng)靡世界的開(kāi)源電子原型平臺(tái)。它和Processing是姐妹項(xiàng)目,擁有共同的編程環(huán)境和類似的語(yǔ)法。Processing的范例中提供了一些和Arduino通訊的互動(dòng)作品。Processing可以讀取Arduino的傳感器數(shù)據(jù),然后把這些數(shù)據(jù)呈現(xiàn)在屏幕上。這種通信是相互的,也可以用Processing程序作為操作界面,控制電機(jī)、揚(yáng)聲器、燈光和相機(jī)等設(shè)備。當(dāng)然,其他支持串行通訊的設(shè)備也都可以和Processing互動(dòng)。
Processing還有更多的優(yōu)點(diǎn)。比如,其支持安卓系統(tǒng),同樣的代碼可以輸出不同格式的文件,在不同設(shè)備和環(huán)境中使用。并且,因?yàn)殚_(kāi)源而擁有大量資源,也是Processing最重要的優(yōu)勢(shì)之一。
● Processing典型范例
將不可見(jiàn)的數(shù)據(jù)可視化,是Processing的優(yōu)勢(shì)之一。下面一段代碼雖然很簡(jiǎn)潔,卻可以把一首MP3的聲音進(jìn)行可視化。
import ddf.minim.*;
AudioPlayer player;
Minim minim;
void setup() {
size(1024, 500);
smooth();
minim=new Minim(this);
player=minim.loadFile("../2002s.mp3", 1024);
player.play();
}
void draw() {
background(0);
stroke(255);
for (int i=0;i strokeWeight(abs(player.left.get(i)*10)); rect(i*20, 75+player.left.get(i)*10, 1, 75+player.left.get(i)*250); rect(i*20+10, 250+player.right.get(i)*10, 1, 75+player.right.get(i)*250); }
}
代碼呈現(xiàn)出來(lái)的效果如圖5,白色的線條隨著音樂(lè)的節(jié)奏律動(dòng),如霓虹燈,如豎琴,充滿變化。只要把其中一條語(yǔ)句:player=minim.loadFile("../2002s.mp3", 1024);修改為:player=minim.getLineIn(Minim.STEREO, 1024);就可以發(fā)現(xiàn),白色線條隨著說(shuō)話、唱歌的聲音而發(fā)生變化了,很神奇。
● Processing的適合對(duì)象
因?yàn)樯婕按a編寫,所以筆者不太建議在小學(xué)階段開(kāi)設(shè)Processing。其定位應(yīng)該是中學(xué)以上的學(xué)生學(xué)習(xí)。但是,少數(shù)已經(jīng)具備Scratch程序基礎(chǔ)的小學(xué)高年級(jí)學(xué)生,完全可以一試。因?yàn)?,僅僅二維繪畫方面,Processing比LOGO語(yǔ)言,不僅簡(jiǎn)單,而且更加形象、有趣。
在Processing的教學(xué)中,曾經(jīng)發(fā)生過(guò)這樣的趣事:一位藝術(shù)類院校教“互動(dòng)編程”的教師,總是埋怨自己的學(xué)生編程能力差,寫不出稍微復(fù)雜點(diǎn)的程序,而羨慕另一位在理工類院校教學(xué)的教師。但在理工類院校教學(xué)的教師也很苦惱,因?yàn)樗膶W(xué)生沒(méi)有藝術(shù)想象力,程序展現(xiàn)出來(lái)的畫面一點(diǎn)也沒(méi)有藝術(shù)感覺(jué)??梢?jiàn)Processing就是一門融技術(shù)和藝術(shù)為一體的編程語(yǔ)言,尤其適合在藝術(shù)和技術(shù)兩個(gè)領(lǐng)域都有濃厚興趣的愛(ài)好者使用。
● 如何開(kāi)發(fā)Processing課程
相對(duì)于Scratch和VB來(lái)說(shuō),Processing沒(méi)有圖形化的編程界面和所見(jiàn)即所得的程序設(shè)計(jì)功能。與傳統(tǒng)的程序設(shè)計(jì)教學(xué)不同,Processing的教學(xué)要從圖形和交互開(kāi)始,而不是從數(shù)據(jù)結(jié)構(gòu)和文本控制臺(tái)的輸出開(kāi)始。所以,傳統(tǒng)的編程類課程設(shè)計(jì)思路對(duì)Processing來(lái)說(shuō),并不是很適合。
開(kāi)發(fā)Processing要尤其注意以下三點(diǎn):①切忌使用信息學(xué)奧賽方面的趣味試題作為課程的編程范例。因?yàn)镻rocessing的設(shè)計(jì)理念是用代碼畫圖,而不是解答數(shù)學(xué)題或者實(shí)現(xiàn)某些經(jīng)典算法。②切忌使用語(yǔ)法教學(xué)形式,試圖逐一介紹Processing的功能。學(xué)習(xí)Processing應(yīng)該從交互圖形設(shè)計(jì)出發(fā),根據(jù)設(shè)計(jì)的需求,引入必要的功能。學(xué)習(xí)者沒(méi)有必要把所有的函數(shù)、庫(kù)的功能都研究一遍。③從模仿到創(chuàng)新是一條可行的學(xué)習(xí)技巧。模仿的對(duì)象除了一些經(jīng)典范例外,還可以是現(xiàn)實(shí)中的圖形,嘗試用多種方式去實(shí)現(xiàn),建立用代碼畫畫的思想。
合理使用Processing自身提供的范例,開(kāi)發(fā)Processing課程并不是很困難的一件事。Processing課程的設(shè)計(jì)思路可以參照這樣的線索(如圖6)。
由于文化和語(yǔ)言的差異,國(guó)內(nèi)研究Processing的人并不多。且不說(shuō)在中小學(xué),就是目前已經(jīng)開(kāi)設(shè)Processing課程的高校也寥寥無(wú)幾。但是,在創(chuàng)意產(chǎn)業(yè)和互動(dòng)媒體藝術(shù)迅速發(fā)展的中國(guó),開(kāi)展與Processing相關(guān)的課程,讓對(duì)藝術(shù)感興趣的文科生也能動(dòng)手用代碼描繪自己的創(chuàng)意,無(wú)疑是非常有意義的一件事。正如《愛(ài)上Processing》一書的翻譯者陳思明所說(shuō):Processing是一把激發(fā)藝術(shù)靈感的鑰匙,你可以輕易地在計(jì)算機(jī)屏幕中展現(xiàn)心中的藝術(shù)場(chǎng)景,感受更多靈感的涌現(xiàn),在顏色與線條的海洋中漫步。