`
+ ${begin('header')}
+
+ ${end('header')}
+ ${begin('setup')}
+ let layer;
+ function setup() {
+ createCanvas(windowWidth, windowHeight, WEBGL);
+ layer = createFramebuffer();
+ }
+ function draw() {
+ ${end('setup')}
+ ${begin('begin')}
+ // 프레임버퍼에 그리기 시작합니다
+ layer.begin();
+ ${end('begin')}
+ ${begin('draw')}
+ clear();
+
+ lights();
+ noStroke();
+ rotateX(millis() * 0.001);
+ rotateY(millis() * 0.001);
+ box(min(width/2, height/2));
+ ${end('draw')}
+ ${begin('stop')}
+ // 프레임버퍼에 그리기를 멈춥니다
+ layer.end();
+ ${end('stop')}
+ ${begin('grid')}
+ // 레이어를 메인 캔버스에 그립니다
+ clear();
+ translate(-width/2, -height/2);
+ for (let x = 0; x < 4; x += 1) {
+ for (let y = 0; y < 4; y += 1) {
+ image(
+ layer,
+ x*width/4, y*height/4,
+ width/4, height/4
+ );
+ }
+ }
+ }
+ ${end('grid')}
+`}>
+
+ |
+ |
+
+ 메인 캔버스
+ |
+
+ `layer`
+ |
+
+
+
+ 처음에는 무엇을 그리든 모두 메인 캔버스로 갑니다. 오른쪽에는 현재 그리고 있는 표면을 빨간 테두리로 표시했습니다.
+ |
+
+
+ |
+
+
+ |
+
+
+
+ `p5.Framebuffer`에서 `begin()`을 호출하면, 그 이후에 그려지는 모든 것은 메인 캔버스 대신 해당 레이어로 갑니다.
+ |
+
+
+ |
+
+
+ |
+
+
+
+ 여기서는 `p5.Framebuffer`의 내용을 지우고 큐브를 그립니다. 이 단계가 끝나면 메인 캔버스는 여전히 비어 있지만, `p5.Framebuffer` 안에는 큐브가 그려져 있습니다.
+ |
+
+
+ |
+
+
+ |
+
+
+
+ `p5.Framebuffer`에서 `end()`를 호출하면, 그 이후에 그려지는 모든 것은 다시 메인 캔버스로 갑니다.
+ |
+
+
+ |
+
+
+ |
+
+
+
+ 여기서는 메인 캔버스에 4x4 격자를 그리고, 각 칸마다 `layer` `p5.Framebuffer`의 복사본을 하나씩 그립니다.
+ |
+
+
+ |
+
+
+ |
+
+
+
+