✹ 해당 포스팅은 Youtube에 업로드된 1분코딩님의 <HTML5 Canvas 캔버스 라이브 강좌>의 필기입니다.
이 곳을 클릭하시면 유튜브에서 직접 강좌를 들으실 수 있습니다.
대부분의 샘플 코드는 해당 강좌에서 제공되는 코드임을 밝힙니다.
캔버스에 그림을 그릴 때는 거의 Context를 이용해서 그린다!
const canvas = document.querySelector(".canvas");
const context = canvas.getContext("2d");
이 세팅을 거의 기본으로 생각해주면 된다.
Context는 getContext 메소드를 통해서 호출한다.
getContext를 통해서 context를 호출한 후에 이를 console에 찍어보면, 아래와 같이 수많은 메소드들이 있는 것을 확인해볼 수 있다.
직접 해보니, Console에 null이 출력되었다.
구글링을 해보니, 역시는 역시... stackoverflow에 이미 같은 질문을 한 사례들이 있었다.
답변을 살펴보니 const context = canvas.getContext("webgl");
을 사용하라고 한다!
캔버스 태그를 다룰 때는 진짜 캔버스에 "그림을 그린다"고 생각하는 것이 좋다!
context.fillRect(50, 50, 100, 100); // 1
context.fillStyle = "red"; // 2
context.fillRect(0, 0, 100, 100); // 3
context.clearRect(80, 80, 50, 50); // 4
context.strokeRect(150, 150, 100, 100); // 5
MDN을 참고하면 사각형 관련 메소드들을 찾아볼 수 있다.
위 예시 코드와 같이 캔버스 위에 그림을 그려주면 아래와 같은 결과가 출력된다.
1) 디폴트값인 검정색으로 사각형을 그린다.
2) 붓에 빨간색 물감을 묻힌다.
3) 다시 사각형을 하나 더 그려준다. (기존에 그려진 사각형 위에 겹쳐져 그려지는 것을 확인할 수 있다.)
4) 사각형 모양으로 지워준다.
5) 사각형 테두리를 그린다.
context.beginPath(); // 1
context.moveTo(100, 100); // 2
context.lineTo(300, 200); // 3
context.stroke(); // 4
context.closePath(); // 5
위 코드의 결과를 미리 살펴보면 아래와 같다!
MDN에 경로그리기와 관련해 메소드들을 소개하고 있다.
경로 그리기 역시 실제 캔버스에 그림을 그린다는 생각으로 접근해볼 수 있다.
1) beginPath: 선을 그릴 준비를 한다!
2) moveTo: 해당 위치로 붓을 가져간다.
3) lineTo: 스케치를 해준다. (아직 완전 그린 게 아니다!)
4) stroke: 리얼 붓으로 선을 긋는다.
5) closePath: 붓을 뗀다!
360도 짜리 호 = 원
원 그리기는 사실 circle과 같은 메소드가 있는 것이 아니라, arc, 호를 통해 그려준다.
context.beginPath();
context.arc(300, 200, 50, 0, 라디안(360), false); //라디안(각도) 함수는 '각도 * Math.PI / 180`를 리턴해주는 함수
context.stroke();
context.beginPath();
context.arc(500, 100, 20, 0, 라디안(360), false);
context.stroke();
MDN을 통해 동일하게 메소드를 살펴보면!
아래 그림과 같이 한 붓 그리기로 두 원이 그려지는 것을 확인할 수 있다.
캔버스 태그를 다룰 때는 정말 그림을 그린다고 생각하자는 걸 다시 한 번 되새기자!