p5.js 애니메이션을 위한 변형(transform) 함수 1 - 객체 위치 이동 translate()
p5.js 애니메이션을 위한 변형(transform) 함수에는 translate(), scale(), rotate()가 있다.
이미 css를 다룰 줄 안다면 이들 함수가 어떤 역할을 하는지 대략 짐작이 갈 것이다.
x, y, z 축으로 객체의 위치를 이동시킬 수 있는 translate, 객체의 크기를 확대 및 축소시킬 수 있는 scale, 객체를 회전시키는 rotate 이 세 가지 변형 함수들에 대해서 알아보자.
translate() - 객체 위치 이동
translate 함수의 기본 문법은 translate(x, y, [z])이다.
X축 : 좌우 이동
Y축 : 상하 이동
Z축 : 앞뒤 이동 (WebGL 모드용)
* WebGL 이란?
WebGL은 웹 기반의 그래픽 라이브러리이다. 자바스크립트 프로그래밍 언어를 통해서 사용할 수 있으며 호환성이 있는 웹 브라우저에서 인터랙티브한 3D 그래픽을 사용할 수 있도록 제공된다. (출처: 위키 백과 ko.wikipedia.org/wiki/WebGL)
X, Y축은 2D에서 사용되는(지금까지 사용해온) 좌표이고 Z 축은 깊이감을 나타낼 수 있는 평면화면의 앞/뒤 이동을 위한 축으로 아래 그림을 보면 좀 더 이해가 잘 될 것 같다.
p5.js 레퍼런스 페이지를 보면 변형(transformation) 함수는 호출된 뒤 후속적으로 호출된 모든 변형 함수에 적용되어, 그 효과가 축적된다고 한다.
예를 들어 translate(100, 100)를 호출한 뒤 translate(100, 100)를 또 호출하면 결과적으로 translate(200, 200)와 동일한 효과를 갖는다.
위의 그림에서와 같이 translate(100,100)을 세 번 호출하면 좌표의 x, y 지점이 기존 좌표 위치에서 합산되어 이동하는 것을 알 수 있다.
그렇다면 좌표의 마지막 위치가 현재 (300,300)에 있는 상태에서 이어서 또 다른 도형을 그리려면 어떻게 해야 할까?
캔버스의 우측 상단에 원을 그리고 싶다고 가정하자.
우선 ellipse 함수는 rect 함수와 달리 중심이 되는 지점이 원의 가운데라는 것을 떠올려야 할 것이다.
위의 그림은 지난번 타원 그리기에 사용된 것으로, p5.js에서는 타원을 그릴 때 기준점이 원의 중앙인 CENTER로 기본 설정되어 있다.
좌표 계산의 편의성을 위해 기준점이 좌측 상단으로 변경되도록 ellipseMode(CORNER)로 설정해 주면 rect처럼 좌측 상단을 기준으로 기준점이 변경된다.
그 후 translate(0,-300) 함수를 추가로 호출해주면 캔버스의 우측 상단에 원을 그릴 수 있게 된다.
이제 사각형을 그렸던 것처럼 사선 방향으로 원을 추가로 더 그려보자.
translate(-100, 100) 함수를 3번 호출해주면 X좌표는 -100씩 / Y좌표는 +100씩 합산되면서 도형이 그려진다.
function setup(){
createCanvas(400,400);
background('#f0f0f0');
}
function draw(){
// 사각형 그리기
rect(0,0,100);
translate(100,100);
rect(0,0,100);
translate(100,100);
rect(0,0,100);
translate(100,100);
rect(0,0,100);
// 원 그리기
ellipseMode(CORNER); // 원 중심점 변경
translate(0,-300);
ellipse(0,0,100);
translate(-100,100);
ellipse(0,0,100);
translate(-100,100);
ellipse(0,0,100);
translate(-100,100);
ellipse(0,0,100);
}
translate 위치 이동 예제
examples | p5.js
< 돌아가기 example name placeholder example description placeholder toggle text output run reset copy
p5js.org
위의 링크로 들어가면 translate를 이용한 애니메이션 예제가 있고 코드는 아래와 같다.
2번과 3번 코드 부분을 보면 width와 height가 나오는데
이것은 createCanvas에서 설정한 캔버스의 너비와 높이값을 저장하는 시스템 변수로써, 아무것도 설정하지 않았을 때의 기본값은 100*100이다.
// 흰색 사각형
translate(x, height / 2 - dim / 2); // x=0.8, y=160 (200-40)
fill(255);
rect(-dim / 2, -dim / 2, dim, dim);
// 검은색 사각형
translate(x, dim); // x=1.6, y=80
fill(0);
rect(-dim / 2, -dim / 2, dim, dim);
변형 함수는 값을 축적(합산)한다고 했기 때문에 검은색 사각형의 X좌표는 흰색 사각형의 X좌표의 2배가 되어 2배 빠른 속도로 이동하게 된다.
* p5.js를 공부하면서 그 내용을 기록하는 글입니다. 잘못된 내용이 있다면 댓글로 알려주세요!
p5.js 기본 도형 그리기 - 타원 그리기
p5p5.js 기본 도형 그리기 - 타원 그리기 타원 그리기 타원 그리기의 기본이 되는 문법은 ellipse(x, y, w, [h])이다. 타원그리기 rect() 함수는 x, y 좌표가 좌측 상단의 기준점이 되지만..
wonder-future.tistory.com
p5.js 기본 도형 그리기 - 직사각형 그리기
p5.js 기본 도형 그리기 - 직사각형 그리기 직사각형 그리기 직사각형 그리기의 기본이 되는 문법은 rect(x, y, w, [h], [tl], [tr], [br], [bl])이다. function setup(){ createCanvas(400,400); backgro..
wonder-future.tistory.com
'지식 확장 > p5.js' 카테고리의 다른 글
p5.js 애니메이션을 위한 변형(transform) 함수 3 - 객체 회전 rotate() (0) | 2021.05.15 |
---|---|
p5.js 애니메이션을 위한 변형(transform) 함수 2 - 객체 크기 조정 scale() (0) | 2021.05.09 |
K-MOOC] 예술가와 디자이너를 위한 아트 코딩 4주 차 실습 과제 (0) | 2021.05.02 |
p5.js colorMode - RGB / HSB 알아보기 (feat. 색상 대비) (0) | 2021.05.02 |
KMOOC] 예술가와 디자이너를 위한 아트 코딩 2주 차 실습 예제 (0) | 2021.04.18 |