謝作如



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