【第一期】Processing中的绘制模式

本期知识点密度:★★★✩✩

Processing 一共有7种绘制模式,9种写法

  • 置空
  • JAVA2D(等价于置空)
  • P2D (是OPENGL的子集)
  • P3D
  • OPENGL(等价于P3D)
  • FX2D
  • PDF
  • SVG
  • DXF

我们接下来详细阐述每一种绘制模式:


JAVA2D(或置空)

1
2
3
4
5
6
void setup(){
size(500, 500, JAVA2D);
}
void setup(){
size(500, 500);
}

此模式调用Java中最原始的awt模块,使用CPU渲染,没有GPU开销。
优点:支持平台最广,bug最少,渲染效果一般;
缺点:不支持3D渲染,帧率不稳定;


P2D

1
2
3
void setup(){
size(500, 500, P2D);
}

此模式调用Java OpenGL进行绘制,有GPU开销;
优点:帧率相对稳定,可自由调节抗锯齿程度;
缺点:不支持3D渲染,在某些非主流显卡上无法正常运行;


P3D(或OPENGL)

1
2
3
4
5
6
void setup(){
size(500, 500, P3D);
}
void setup(){
size(500, 500, OPENGL);
}

此模式和P2D类似,调用Java OpenGL进行绘制,有GPU开销;
优点:支持3D渲染,性能最好,可定制性最高;
缺点:在某些非主流显卡上无法正常运行;


FX2D

1
2
3
void setup(){
size(500, 500, FX2D);
}

此模式使用JavaFX实现,可一定程度上调用操作系统的DirectX和OpenGL进行绘制,有GPU开销;
优点:效果细腻,支持平台广;
缺点:无法自由调节抗锯齿,逻辑帧率稳定,但显示帧率不太稳定,有一定的bug;


PDF

1
2
3
void setup(){
size(500, 500, PDF, "rect.pdf");
}

or

1
2
3
4
5
6
7
void setup(){
size(500, 500, Java2D/P2D/P3D/FX2D);

beginRecord(PDF, "rect.pdf");
...
endRecord();
}

此模式直接将绘制结果保存为PDF文件,文件内包含矢量图元;
优点:精准,细腻,适合高分辨率打印;
缺点:保存3D场景时会有摄像机裁剪的问题;


SVG

1
2
3
void setup(){
size(500, 500, SVG, "rect.svg");
}

or

1
2
3
4
5
6
7
void setup(){
size(500, 500, Java2D/P2D/P3D/FX2D);

beginRecord(SVG, "rect.svg");
...
endRecord();
}

此模式直接将绘图结果保存为SVG矢量图文件;
优点:同上,可以直接在网页中使用,对设计师友好;
缺点:同上;


DXF

1
2
3
4
5
6
7
8
9
10
11
void setup(){
size(500, 500, DXF, "rect.dxf");
}

void setup(){
size(500, 500, P2D/P3D/FX2D);

beginRaw(DXF, "rect.dxf");
...
endRaw();
}

此模式可以导出DXF格式的3D场景文件,提供给后续工作流;
优点:emmmm 真的非常强;
缺点:不支持动画;