日更第13期-2015-4-9-processing教程-API篇-第二讲-lerpColor()、nfp()、

于是隔了十天来更新了。然后今天更新的是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()

-------------------------------------------------------------------------------------------------------------

posted @ 2015-04-09 20:29  李农伯  阅读(920)  评论(0编辑  收藏  举报