[p5.js] 인터랙티브 아트워크 제작
2023. 2. 22. 19:30
반응형
rotate() 함수는 도형을 회전시키는 역할을 하는데,
우리가 일반적으로 사용하는 각도법이 아닌 호도법에 기반하므로
rotate(45)를 입력하면 45도가 아닌 애매한(?) 각도로 돌아가게 된다.
각도법을 적용하기 위해선 angleMode(DEGREES) 를 써준다.
function setup() {
createCanvas(400, 400);
background("#ececec");
angleMode(DEGREES); // 각도법 적용
}
function draw(){
push();
translate(200, 200);
rotate(45);
rectMode(CENTER);
rect(0, 0, 100, 100);
pop();
}
arc는 부채꼴을 만들어주는 함수 (아래 예시는 90도 부채꼴)
arc(0, 0, 200, 200, 0, 90);
lerp는 원하는 타겟값에 점차 다가가도록 만드는 함수이다.
let x = 0;
let y = 0;
function setup() {
createCanvas(400, 400);
}
function draw() {
x = lerp(x, mouseX, 0.1); //mouseX를 향해 0.1의 속도로 다가간다
y = lerp(y, mouseY, 0.1);
background(220);
fill("tomato");
ellipse(x,y,100,100);
}
lerp 함수 응용 - 원 4개가 줄지어 마우스 커서를 따라오는 예제
let x1 = 0; let y1 = 0;
let x2 = 0; let y2 = 0;
let x3 = 0; let y3 = 0;
let x4 = 0; let y4 = 0;
function setup() {
createCanvas(400, 400);
}
function draw() {
x4 = lerp(x4, x3, 0.1);
y4 = lerp(y4, y3, 0.1);
x3 = lerp(x3, x2, 0.1);
y3 = lerp(y3, y2, 0.1);
x2 = lerp(x2, x1, 0.1);
y2 = lerp(y2, y1, 0.1);
x1 = lerp(x1, mouseX, 0.1);
y1 = lerp(y1, mouseY, 0.1);
noStroke();
background("#000");
fill("#333");
ellipse(x4,y4,100,100);
fill("#666");
ellipse(x3,y3,100,100);
fill("#aaa");
ellipse(x2,y2,100,100);
fill("#eee");
ellipse(x1,y1,100,100);
}
mouseIsPressed는 현재 상태가 마우스를 누른 상태인지 판별해주는 p5.js의 기본 제공 함수
pmouseX, pmouseY에는 이전프레임의 마우스 위치값이 들어있다.
function setup() {
createCanvas(400, 400);
}
function draw() {
if(mouseIsPressed) {
stroke("tomato");
strokeWeight(3);
line(mouseX, mouseY, pmouseX, pmouseY);
}
}
randomGaussian 함수는 random과 유사하지만,
랜덤가우시안은 우리가 설정한 특정한 값을 평균치로 해서, 그 뒤에오는 값만큼 커지도록 만들 수 있는 함수
(값이 누적되면 그냥 랜덤함수는 네모난 형태가 되지만, 랜덤가우시안은 동그란 형태가 된다)
randomGaussian을 활용하여 스프레이로 뿌린 듯한 느낌의 드로잉도구 만들기
// 색상팔레트를 미리 구성해놓는다
let colors = [];
function setup() {
createCanvas(400, 400);
colors.push("#111");
colors.push("#555");
colors.push("#999");
}
function draw() {
if(mouseIsPressed) {
//여러번 실행시키는 이유는 브러쉬를 빨리 칠해지도록 하기 위함
let count = 0;
while(count <= 10) {
brush();
count++;
}
}
}
function brush() {
let c = random(colors);
let x = randomGaussian(mouseX, 20);
let y = randomGaussian(mouseY, 20);
let s = random(1, 15);
noStroke();
fill(c);
ellipse(x, y, s, s);
}
결과물
반응형
'한 걸음 > Creative coding' 카테고리의 다른 글
[touchdesigner] SOB 오퍼레이터 다루기 (0) | 2023.02.24 |
---|---|
[p5.js] 변수와 조건문 (0) | 2023.02.23 |
[p5.js] 함수 호출과 인터랙션 (0) | 2023.02.22 |
[touchdesigner] 결과물 저장하기 / 보여주기 (0) | 2023.02.22 |
[p5.js] 기본 활용법 + 도형 만들어보기 (0) | 2023.02.21 |