于是隔了十天来更新了。然后今天更新的是Processing的api,其实这算是我学习Processing途中的一种副产品;反正凑够数了,
我今天就拿出来看看。其实只是api文档的话,并没有什么存在的必要性。但如果只是讨论存在的必要性的话,我的博客本身也没有
存在的必要性。比较也没有记载什么高深或者特别有用的东西。我之前写博客的目的只是因为想写,而因为想写而写,自然就会导致
中断,毕竟人是会善变的动物。
那么,我接下来要做的事就是改变。
我打算写些真正有用的文章。
下一篇进入Processing实战,目标是打造一个我们自己的Processing框架——pepper。具体情况,会在后面的教程中写出来的。
接下来如果想继续阅读api的话,请便。
006
-------------------------------------------------------------------------------------------------------------
lerpColor()
-------------------------------------------------------------------------------------------------------------
案例
stroke(255);
background(51);
color from = color(204, 102, 0);
color to = color(0, 102, 153);
color interA = lerpColor(from, to, .33);
color interB = lerpColor(from, to, .66);
fill(from);
rect(10, 20, 20, 60);
fill(interA);
rect(30, 20, 20, 60);
fill(interB);
rect(50, 20, 20, 60);
fill(to);
rect(70, 20, 20, 60);
-------------------------------------------------------------------------------------------------------------
描述
这个函数很类似lerp()函数,也是输入两个范围,一个比值,从而得到两个之间的一个值的函数。
不同的是,lerpColor()函数所计算的是颜色。具体用法与lerp()基本完全一样,不再赘述。
唯一有一点不同的是,lerpColor()函数会把越位的数值截断——也就是说比如原来是20-230,你把
比值设到了1.1那么就还会是230,就算它的1.1倍并不超过255。而在lerp()中,越界是完全允许的。
这样设置的原因是——防止出现无法表现的颜色。(当然你要是最开始设置的颜色以及超过范围
还是没治)
-------------------------------------------------------------------------------------------------------------
语法
lerpColor(c1, c2, amt)
-------------------------------------------------------------------------------------------------------------
参数
c1 int: 起始颜色值
c2 int: 重点颜色值
amt float: 0.0到1.0之间的比例
-------------------------------------------------------------------------------------------------------------
返回值
int
这里的这个int其实有很多值得说的地方——因为,processing里的color类型其实就是int!!
对,你没有看错,color就是int。肯定你会觉得很奇怪——不然估计你也没必要看我的教程.....
那么来讲讲,为什么int类型可以兼管color。
首先,int类型占4字节,与平台无关。
而color类型,其实就是4组数字,RGB三原色以及alpha透明通道。
一般使用的颜色都是0-255的范围,即需要一字节的存储大小。4组数字正好是一个int的空间。
底层的东西就不多说了——不过感觉使用int来表示颜色还真是很有java特色——C++就做不到。
-------------------------------------------------------------------------------------------------------------
相关
color()
lerp()
-------------------------------------------------------------------------------------------------------------
007
-------------------------------------------------------------------------------------------------------------
nfp()
-------------------------------------------------------------------------------------------------------------
案例
int a=200, b=-40, c=90;
String sa = nfp(a, 10);
println(sa); // Prints "+0000000200"
String sb = nfp(b, 5);
println(sb); // Prints "-00040"
String sc = nfp(c, 3);
println(sc); // Prints "+090"
float d = -200.94, e = 40.2, f = -9.012;
String sd = nfp(d, 10, 4);
println(sd); // Prints "-0000000200.9400"
String se = nfp(e, 5, 3);
println(se); // Prints "+00040.200"
String sf = nfp(f, 3, 5);
println(sf); // Prints "-009.01200"
-------------------------------------------------------------------------------------------------------------
描述
用于把数字格式化为字符串。和nf函数用法相同,但是正数前面会出现"+",负数前面出现“-”。它有两种格式,一种是
确定小数点后位数;另一种是确定整数位和小数点位。而这些值应该是正整数。
-------------------------------------------------------------------------------------------------------------
语法
nfp(num, digits)
nfp(num, left, right)
-------------------------------------------------------------------------------------------------------------
参数
num float[], int[], or int: 要被格式化的数字
digits int: 小数点后数位
left int: 小数点前数位
right int: 小数点后数位
-------------------------------------------------------------------------------------------------------------
返回值
String or String[]
-------------------------------------------------------------------------------------------------------------
相关
nf()
nfs()
nfc()
-------------------------------------------------------------------------------------------------------------
008
-------------------------------------------------------------------------------------------------------------
box()
-------------------------------------------------------------------------------------------------------------
案例
size(100, 100, P3D);
translate(58, 48, 0);
rotateY(0.5);
noFill();
box(40);
-------------
size(100, 100, P3D);
translate(58, 48, 0);
rotateY(0.5);
noFill();
box(40, 20, 50);
-------------------------------------------------------------------------------------------------------------
描述
box就是由rectangle挤压生成的一种几何体。(就是一个长方体)
如果它的每条边长度都相等的话,它就是一个正方体
-------------------------------------------------------------------------------------------------------------
语法
box(size)
box(w, h, d)
-------------------------------------------------------------------------------------------------------------
参数
size float: 每条边的长度(正方体)
w float: x轴方向长度
h float: y轴方向长度
d float: z轴方向长度
-------------------------------------------------------------------------------------------------------------
返回值
void
-------------------------------------------------------------------------------------------------------------
相关
sphere()
-------------------------------------------------------------------------------------------------------------
009
-------------------------------------------------------------------------------------------------------------
sphere()
-------------------------------------------------------------------------------------------------------------
案例
size(100,100,P3D);
noStroke();
lights();
translate(58, 48, 0);
sphere(28);
-------------------------------------------------------------------------------------------------------------
描述
sphere是一种用三角面拼接而成的空心球体
-------------------------------------------------------------------------------------------------------------
语法
sphere(r)
-------------------------------------------------------------------------------------------------------------
参数
r float: 球体半径
-------------------------------------------------------------------------------------------------------------
返回值
void
-------------------------------------------------------------------------------------------------------------
相关
sphereDetail()
-------------------------------------------------------------------------------------------------------------
010
-------------------------------------------------------------------------------------------------------------
sphereDetail()
-------------------------------------------------------------------------------------------------------------
案例
void setup() {
size(100, 100, P3D);
}
void draw() {
background(200);
stroke(255, 50);
translate(50, 50, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 4);
sphere(40);
}
-------------------------------------------------------------------------------------------------------------
描述
通过控制构成球体网格的顶点的数量来控制球体的精细程度。默认的精度是30。
精度为30的情况下,每360度对应着30块三角面,也就是360/30等于12度,
看起来还是比较平滑的。如果你想每一帧都渲染很多的球体的话,
最好适当减少一下分形的精度。
只有调用sphereDetail()并赋予一个新的精度时才会真正改变设置,因此不要每个
球体都调用一次——除非你想让他们的精度不同——让小的物体、离镜头远的精度更低,
这样可以提高效率。
如果想要把水平方向和垂直方向上的精度分别改变的话,请调用两个参数的版本
-------------------------------------------------------------------------------------------------------------
语法
sphereDetail(res)
sphereDetail(ures, vres)
-------------------------------------------------------------------------------------------------------------
参数
res int: 分形精度()最小是3
ures int: 水平方向分形精度
vres int: 垂直方向分形精度
-------------------------------------------------------------------------------------------------------------
返回值
void
-------------------------------------------------------------------------------------------------------------
相关
sphere()
-------------------------------------------------------------------------------------------------------------