Making of "camscape" - Overview & Preparation 概况与准备工作 - [Works]

开始分几个部分细致讲解一下"camscape" 的制作,希望能给初学P5的童鞋一些帮助。这算第一课吧,内容是把整段程式的拆成若干功能部分,并且讲一下之前需要做的准备工作。有任何不解的可以直接在楼下提问,如果俺哪里讲错了或者繁琐了也一定要提出阿。。。

"camscape" 程式在功能上涉及以下几块。

A. 摄像头捕捉(涉及外置库的导入)

B. 分析捕捉到画面的像素点色值(涉及到多维数组,像素点索引换算)

C. 根据色值来绘制地形图(涉及到三维空间,缓冲运动公式,多维数组,自定义节点图形绘制)

D. 地形图整体的位置变化(涉及原点的概念)

准备工作如下。

A. P5 (这他妈不是废话么)

__________________________________________________

B. 一个可用的电脑摄像头

__________________________________________________

C. 针对P5 的摄像头捕捉的相关库,推荐使用Myron WebCamXtra 。因为俺使用的是它,所以在制作教程里会主要围绕着它来讲。

这里要啰嗦一点,P5 内置有基于Quicktime 的视频捕捉类的库,但PC 用户需要预先安装Quicktime 及VDIG 。而且往往会出现很多问题,譬如在俺的vista 系统上捕捉到的画面是严重失真的。所以不建议PC 机用户使用P5 内置的Video (Capture),苹果机用户自便吧。但JMyron 库(即Myron WebCamXtra)与P5 内置的Video 库涉及到的脚本还是略有不同的。

__________________________________________________

D. 一些关于P5 脚本的最为基本的知识。稍有基础的童鞋可以略过了。

 

setup() 函数;你编写的P5 程序一旦开始执行,首先就会执行一遍这个函数且只执行一遍。你可以在其内部初始化环境的属性。场景大小,帧频等等。不过别把全局变量也搁在这儿。。。

 

draw() 函数;你编写的P5 程序一旦执行完setup() 函数,就会一遍又一遍由上至下循环执行draw() 函数。当然你也可以用noLoop() 函数或者exit() 函数之类的来停止循环。

 

如何声明一个变量。

变量类型  变量名 = 值

譬如声明一个名为sampleFloat 的浮点数:float sampleFloat = 5.827;

又譬如声明一个名为rave 的字符串:String rave = "too simple,sometimes naive";

当然也可以声明变量但不赋值拉。

 

如何声明一个数组。

数组类型 [] 数组名 = new 数组类型 [ 数组长度,即数组中元素的个数 ]

譬如声明一个有10个元素的名为integers 的整数数组:int [] integers = new int [10];

然后说一下如何给integers 这个数组里的每个元素赋值。

integers [ 数组索引 ] = 值

譬如 intergers [0] = 12;

由于之前的数组长度设为10,所以数组索引的范围是在0-9 之间的整数,注意不是1-10,而是0-9。

 

关于for 循环。for 循环往往能简化很多重复的工作。先说一下语法格式。

for (初始化变量;条件;执行内容){};

拿上面的integers 数组来说事儿。如果我要给其中的每个元素赋值,必须得这样。。。integers[0],integers[1],integers[2]。。。。。。直到integers[9]?当然不必,我们可以使用for 循环来使赋值的过程简化。如下。

for(int i =0;i<integers.length;i++){

  integers[i] = i;

}

俺来解释一下,整数i 的初始值为0,当它小于integers 数组的长度时,它就会执行循环内的内容,也就是integers[i] = i; 也就是intergers[0] =0; 然后会执行i++,也就是i = i+1,i由0变成了1,再次进行与integers 数组长度的大小判定,再次执行循环内的内容,再次+1,直到i=10才会退出这个循环。

 

关于if(){}else{}判定。格式如下。

if(条件){执行内容}else{执行内容}。很好理解吧。符合条件执行前面的内容,不符则执行后面的内容。举个例子。

float sampleFloat = random(0,10);

if(sampleFloat>5){

  background(255);

}else{

  background(0);

}

sampleFloat 取0-10之间的伪随机数,大于5则场景背景为白,小于等于5则场景背景为黑。

 

关于分号。大家可能也注意我上面举例的脚本后的分号,P5 的每句脚本的后面都需要有分号,而且需要手动添加。俺个人是搞Flash 起家的,熟悉Actionscript 的朋友一定都知道在Flash 中进行格式整理,软件会自动补足需要的分号。而在P5 里则不是这样,分号需要手动添加,可以使用Tools 菜单中的Auto Format 命令来作为检查,格式一旦出错的话通过这样可以报错,当然你也可以直接运行你编写的程序察看是否会报错。

__________________________________________________

以上这些可能是"camscape" 涉及到的一些P5 基础脚本及程序结构,当然还有很多其他的脚本,有兴趣的童鞋可以去P5 官网的参考板块 看到P5 内置的所有脚本。

下一节内容是"camscape"程式上的第一块,摄像头捕捉。

敬请期待。。。



Posted by at 13:49:00 | Trackback (0) | Edit |

Comments



Add Comment