processing学习

Processing学习笔记

1
2
3
4
5
6
7
8
line(x1,y1,x2,y2)#直线
size(width,height)#窗口大小
background(r,g,b)#背景颜色
stroke(255)#描边颜色
stroke(255, 128, 0)# 三原色版
stroke("#FF8000") # 十六进制版
stroke(255, 128, 0, 128)# 增加透明度,透明度取值范围0~255

填充和描边颜色会影响绘制到屏幕上的所有几何图形,直到下一个填充和描边函数为止。

交互式程序

1
2
3
4
5
6
7
8
9
10
def setup():
size(400, 400)
stroke(255)
background(192, 64, 0)

def draw():
line(150, 25, mouseX, mouseY)
saveFrame("output-####.png")
def mousePressed():
background(192, 64, 0)

setup()块执行一次,draw()重复运行,mousePressed()当鼠标按下时执行。

saveFrame( )将保存程序输出的 TIFF 格式图像的编号序列

渲染器

1
2
3
4
5
6
size(400, 400, P2D)
# P2D渲染器使用OpenGL来更快地渲染二维图形,同时使用Processing更简单的图形API和Processing开发环境的简单应用程序导出。
size(400, 400, P3D)
# P3D 渲染器还使用 OpenGL 来实现更快的渲染。它可以绘制空间中的三维物体和二维物体以及灯光、纹理和材质。
size(400, 400, PDF, "output.pdf")
# PDF渲染器将所有几何图形绘制到文件而不是屏幕上。要使用 PDF,除了更改 size() 函数之外,还必须选择“导入库”,然后从“草图”菜单中选择“PDF”。这是默认渲染器的近亲,但直接写入 PDF 文件。

基本绘图

1
2
3
4
5
line
point
rect(x,y,width,height)
rectMode(CENTER)#可选CENTER、CORNERS
ellipseMode(CORNERS)
1
2
3
4
5
stroke描边
fill填充
noStroke取消描边
noFill取消填充

自定义颜色范围

1
2
3
colorMode(RGB,100)
colorMode(RGB,100,500,10,255)
#颜色模式也可以设为HSB

交互式控制

1
2
3
def draw():
frameRate(12)
println(str(mouseX)+":"+str(mouseY))

屏幕宽度和高度分别为widthheight

pmouseXpmouseY存储前一帧的鼠标值

mousePressed检测鼠标按下状态

mouseButton检测鼠标按下按键

strokeWeight设置描边的粗细

key保存最近按下的按键,text输出文字消息,textSize设置文字大小。

1
2
3
4
5
if (key == CODED):
if (keyCode == ALT):
y = 20
elif (keyCode == DOWN):
y = 50

鼠标事件

鼠标事件函数有 mousePressed()、mouseReleased()、mouseMoved() 和 mouseDragged()

键盘事件

keyPressed()和keyReleased()

事件流程

draw()函数每秒显示60帧,noLoop()停止draw()循环,Loop()恢复操作,

redraw()运行draw()中的代码一次,停止执行。

光标图标

使用noCursor()隐藏鼠标光标,使用cursor()设置不同的图标

运行noCursor()隐藏鼠标光标,使用cursor()显示图标

cursor()参数选项:ARROW, CROSS, HAND, MOVE, TEXT, and WAIT

图像操作

1
img=loadImage("test.jpg")
1
createImage(200,200,RGB)
1
image(img,0,0,640,320)
1
2
3
tint(light,alpha)
tint(red,green,blue)
tint(red,green,blue,alpha)

像素操作

1
2
3
loadPixels()
pixels=...
updatePixels()
1
2
constrain(r,0,255)#将范围限制在0-255
dist(x,y,mouseX,mouseY)

字符串

1
2
3
4
createFont("Arial",20,True)
textFont(f)
textAlign(CENTER)
text(message,0,0)

2D变换

1
2
3
4
5
pushMatrix() #保存当前坐标参数
popMatrix() #恢复当前坐标参数
radians() # 将度数转为弧度数
degrees() #将弧度数转为度数
scale(3.0,0.5) #缩放x轴3倍,y轴0.5倍

每次执行draw()函数时,坐标系会恢复到原来的状态,原点位于窗口左上方,不旋转,不缩放。

对于三维,可使用translate,给三个参数,scale类似,三维的旋转可使用rotateX、rotateY和rotateZ

P3D

img

python版本对P3D支持的不好,使用Java版会好一些

灯光

默认灯光直接使用light,环境光使用ambientLight,定向光使用directiveLight,聚光SpotLight,点光pointLight

在命令行使用processing

安装Java8(实测更高版本的也能用),配置环境变量

1
java -jar processing-py.jar your-sketch.py

其他参数

-Xms 初始堆大小 -Xmx最大堆大小

1
java -Xms256m -Xmx1024m -jar processing-py.jar 

当导入文件时,先从data目录下查找,如果找不到,再从同目录下查找。

导入库

将库文件放到草图文件相同目录的“libraries”文件夹下,使用add_library("module")

杂记

processing.py基于Jython实现,Jython实现的是python2.7,有些功能和python3不兼容。