[p5.js] 변수와 조건문
2023. 2. 23. 19:47
반응형
text() 함수는 화면에 텍스트를 나타낼 수 있도록 하는 함수
// 들어갈 text, x, y
text("내용", 200, 200)
// 캔버스의 크기가 바뀌더라도 항상 중간에 위치하도록 함
text("내용", width/2, height/2)
text() 함수를 적용하기 전에
//폰트사이즈
textSize(100);
//폰트컬러
fill("red");
//폰트테두리
stroke(0);
strokeWeight(5);
// 첫번째인자: CENTER, RIGHT, LEFT
// 두번째인자: TOP, CENTER, BOTTOM (기본값은 BASELINE)
textAlign(가로정렬, 세로정렬);
등의 함수를 이용해서 글꼴 속성을 정의해줄 수 있다.
클릭할 때마다 10씩 늘어나는 텍스트 예제
//전역변수
let value = 0;
function setup() {
createCanvas(400, 400);
}
function draw() {
background("#ececec");
fill("skyblue");
textSize(100);
textAlign(CENTER, CENTER);
text(value, width/2, height/2);
}
function mousePressed() {
value = value + 10;
}
클릭할 때마다 줄기가 자라나는 꽃 예제
let h = 0;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
//기존 원점(0,0)을 줄기가 자라나기 시작하는 지점으로 옮김
translate(200, 300);
strokeWeight(15);
//줄기가 위쪽으로 자라나야 하므로 h값은 마이너스
line(0,0,0,-h);
strokeWeight(5);
//꽃잎과 꽃 가운데
push();
translate(0, -h);
ellipse(0,-35,40,40);
ellipse(30,-10,40,40);
ellipse(-30,-10,40,40);
ellipse(20,20,40,40);
ellipse(-20,20,40,40);
ellipse(0,0,60,60);
pop();
// 줄기 높이 110 이상일 때부터 이파리 보이기 시작
if(h>=110) {
push();
translate(0, -h+70);
ellipse(-25,0,50,20);
ellipse(25,0,50,20);
pop();
}
}
function mousePressed() {
h = h+10
}
lerp() 함수는 변화에 중간과정을 넣어줄 때 사용한다.
변하는 비율이 1이면 한 번에 변하고, 작은 값이 들어갈수록 천천히 변하게 된다.
lerp(현재값, 목표값, 변하는 비율)
위에 있는 '자라나는 꽃' 예제에 lerp 함수를 적용하여 조금 더 자연스럽게 자라나도록 수정해본다.
let h = 0;
let targetH = 0;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
//자라는 애니메이션 자연스럽게
h = lerp(h, targetH, 0.1);
//기존 원점(0,0)을 줄기가 자라나기 시작하는 지점으로 옮김
translate(200, 300);
strokeWeight(15);
//줄기가 위쪽으로 자라나야 하므로 h값은 마이너스
line(0,0,0,-h);
strokeWeight(5);
//꽃잎과 꽃 가운데
push();
translate(0, -h);
ellipse(0,-35,40,40);
ellipse(30,-10,40,40);
ellipse(-30,-10,40,40);
ellipse(20,20,40,40);
ellipse(-20,20,40,40);
ellipse(0,0,60,60);
pop();
// 줄기 높이 110 이상일 때부터 이파리 보이기 시작
if(h>=110) {
push();
translate(0, -h+70);
ellipse(-25,0,50,20);
ellipse(25,0,50,20);
pop();
}
}
function mousePressed() {
targetH = targetH+30
}
마지막으로, 꽃을 구성하는 부분을 함수화하여 여러 송이의 꽃을 한 번에 그릴 수 있도록 수정해본다.
let h = 0;
let targetH = 0;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
//자라는 애니메이션 자연스럽게
h = lerp(h, targetH, 0.1);
flower(300, 300);
flower(100, 300);
}
function flower(x, y) {
push();
translate(x, y);
strokeWeight(15);
line(0,0,0,-h);
strokeWeight(5);
push();
translate(0, -h);
ellipse(0,-35,40,40);
ellipse(30,-10,40,40);
ellipse(-30,-10,40,40);
ellipse(20,20,40,40);
ellipse(-20,20,40,40);
ellipse(0,0,60,60);
pop();
if(h>=110) {
push();
translate(0, -h+70);
ellipse(-25,0,50,20);
ellipse(25,0,50,20);
pop();
}
pop();
}
function mousePressed() {
targetH = targetH+30
}
결과물 화면
반응형
'한 걸음 > Creative coding' 카테고리의 다른 글
[touchdesigner] 반복되는 움직임 만들기 (0) | 2023.02.25 |
---|---|
[touchdesigner] SOB 오퍼레이터 다루기 (0) | 2023.02.24 |
[p5.js] 인터랙티브 아트워크 제작 (0) | 2023.02.22 |
[p5.js] 함수 호출과 인터랙션 (0) | 2023.02.22 |
[touchdesigner] 결과물 저장하기 / 보여주기 (0) | 2023.02.22 |