找回密码
 立即注册

QQ登录

Processing:让编程成为一种艺术(谢作如)

来源: 教程 Sophie 2014-4-28 11:44 显示全部楼层 |阅读模式

1.什么是Processing

在很多人的眼里,编程是理工男的专利,是深不可测又枯燥无味的代码输入过程。但是,算法和程序设计技术的先驱——唐纳德•克努特(1974年度的图灵奖者)却不这么认为。他说,程序设计既是一门科学,也是一门艺术,二者可以彼此很好地互相补充。
Processing是一款专为设计师和艺术家使用的编程语言,由美国麻省理工学院媒体实验室美学与运算小组( Aesthetics Computation Group )的Casey Reas与Ben Fry创立的。Processing的出现,被视为艺术设计创作的一场革命。利用Processing,艺术家可以将抽象的数据呈现为生动的视觉形象。它不仅可以生成唯美的图形,还能编写出功能强大的互动艺术作品。
Processing软件的官方网站:http://www.processing.org/。最新的Processing为2.0版,软件下载地址为:http://www.processing.org/download/


图1 Processing网站


2.Processing的特色


1)用数字来设计。
“用数字来设计”(Design By Numbers),是Processing独创的程序设计方法。它的思想是简单地写一行代码,就会在屏幕上生成一个图形,再增加一些代码,图形就能根据鼠标的动作发生变化。这些代码称之为草稿(Sketch)。Processing的设计者认为,草稿化(Sketching)是一种思维方式,有趣而便捷,可以让人在短时间内探索出很多想法。“草稿”一词的强调,让使用者体会在计算机屏幕上画图,就如同在图形纸上作画一样,如图2所示。
   

图2 从草稿到图形


Processing可以画出实现梦幻般的视觉展示效果。Processing资源网站如http://www.openprocessing.org/http://wiki.processing.org/,提供了大量美轮美奂的画面。当然,这些画面都是用Processing画出来的,如图3所示。


图3 Processing艺术品
2)代码简洁但功能强大
Processing是Java语言的延伸,支持许多现有的Java语言架构,不过在语法上简易许多,并具有许多贴心及人性化的设计。通过Processing,无需太高深的编程技术,便可创作出漂亮的图形以及媒体交互作品。如图2所示,仅仅几行代码,就能制作出跟随鼠标画圆的互动作品来。
Processing支持3D图形,它有P3D和OpenGL两种渲染模式。Processing默认运行在2D模式,使用3D模式需要在size()函数中的第3个参数指定渲染模式,形如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最重要的优势之一。


3.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);
}
}




代码呈现出来的效果如下图,白色的线条随着音乐的节奏律动,如霓虹灯,如竖琴般,充满变化。只要把其中一条语句:
player=minim.loadFile("../2002s.mp3", 1024);
修改为:player=minim.getLineIn(Minim.STEREO, 1024);
你就可以发现,白色线条随着你说话、唱歌的声音而发生变化了,神奇吧?



图4 声音的视觉化


4.Processing的适合对象


因为涉及到代码编写,所以Processing不太建议在小学阶段开设。其定位应该是中学以上的学生学习。但是,少数已经具备Scratch程序基础的小学高年级学生,完全可以一试。因为,仅仅二维绘画方面,Processing比LOGO语言来说,不仅更加简单,而且更加形象、有趣。
在Processing的教学中,曾经发生过这样的趣事:一位艺术类院校教“互动编程”的老师,总是埋怨自己的学生编程能力差,写不出稍微复杂点的程序,而羡慕另一位在理工类院校教学的老师。但在理工类院校教学的老师却也很苦恼,因为他的学生没有艺术想象力,程序展现出来的画面一点也没有艺术感觉。可见Processing就是一门融技术和艺术为一体的编程语言,尤其适合在艺术和技术两个领域都有浓厚兴趣的爱好者使用。


5.如何开发Processing课程


相对于Scratch和VB来说,Processing没有图形化的编程界面和所见即所得的程序设计功能。与传统的程序设计教学不同,Processing的教学要从图形和交互开始,而不是从数据结构和文本控制台的输出开始。所以,传统的编程类课程设计思路对Processing来说,并不是很适合。开发Processing要尤其注意以下三点:
1)切忌使用信息学奥赛方面的趣味试题,作为课程的编程范例。因为Processing的设计理念是用代码画图,而不是解答数学题或者实现某些经典算法。
2)切忌使用语法教学形式,试图把Processing的功能逐一介绍。学习Processing应该从交互图形设计出发,根据设计的需求,引入必要的功能。学习者没有必要把所有的函数、库的功能都研究一遍。
3)从模仿到创新是一