[Canvas] Canvas

Chenยท2024๋…„ 5์›” 26์ผ
2

Canvas

๋ชฉ๋ก ๋ณด๊ธฐ
1/11
post-thumbnail

Canvas๋Š” ์ฃผ๋กœ 2D ๊ทธ๋ž˜ํ”ฝ์— ์ค‘์ ์„ ๋‘ 

WebGL ์‚ฌ์šฉ์‹œ 3D ๊ตฌํ˜„๋„ ๊ฐ€๋Šฅํ•˜๋‚˜, WebGL๋„ ๊ฒฐ๊ตญ canvas ๊ธฐ๋ฐ˜

ํ”ฝ์…€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์ผ๋ฐ˜ html css๋กœ ํ‘œํ˜„ ๋ถˆ๊ฐ€ํ•œ ๊ฒƒ๋“ค ๊ฐ€๋Šฅ

(ex) Apple ๊ณตํ™ˆ

๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฑฐ๋‹ค ๋ณธ svg์™€ ๋น„๊ต๊ฐ€ ๋งŽ์ด ๋จ

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ canvas๋Š” ๋น„ํŠธ๋งต์ด๊ณ , svg๋Š” ๋ฒกํ„ฐ

๋ฒกํ„ฐ = ์ ๊ณผ ์  ์‚ฌ์ด์˜ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ทธ๋ ค๋‚ด๋Š” ๊ฒƒ
(ex) ์ผ๋Ÿฌ์ŠคํŠธ
์žฅ์  : ์—ฐ์‚ฐ์œผ๋กœ ๊ทธ๋ฆผ => ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ๋„ ์šฉ๋Ÿ‰ ๋Š˜์–ด๋‚˜์ง€ ์•Š์Œ

๋ฐ˜๋ฉด, ์บ”๋ฒ„์Šค๋Š” ๋น„ํŠธ๋งต์ด๋ฏ€๋กœ ์  ๊ณ„์‚ฐํ•  ๊ฒŒ ๋งŽ์œผ๋ฉด ์—ฐ์‚ฐ up, ๋ Œ๋”๋ง ๋А๋ ค์ง


๋ธŒ๋ผ์šฐ์ € ์ง€์› ์—ฌ๋ถ€

๋ชจ๋”๋‚˜์ด์ €

<script>
     // Canvas ์ง€์› ์—ฌ๋ถ€ ํ™•์ธ
     if (Modernizr.canvas) {
       // console.log('Canvas๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €');
     }

     const canvas = document.querySelector('canvas');
     if (canvas.getContext) {
       console.log('์บ”๋ฒ„์Šค ์ง€์›');
     }
</script>

์บ”๋ฒ„์Šค default ์‚ฌ์ด์ฆˆ

500 x 300

CSS ๋†’/๋„“์ด vs ์บ”๋ฒ„์Šค ๋†’/๋„“์ด

๋‹น์—ฐํžˆ ์บ”๋ฒ„์Šค์—์„œ ๋†’/๋„“์ด ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๊ณ , CSS๋กœ๋„ ๋†’/๋„“์ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Œ
๊ทผ๋ฐ ๋งค์šฐ ํฐ ์ฐจ์ด์  ์กด์žฌ!

.canvas {
    width: 500px;
    height: 300px;
    background: #eee;
}
<canvas class="canvas" width="500" height="300"></canvas>
<canvas class="canvas canvas2" width="1000" height="600"></canvas>

<script>
      const canvas = document.querySelector('.canvas');
      const canvas2 = document.querySelector('.canvas2');
      const context = canvas.getContext('2d');
      const context2 = canvas2.getContext('2d');

      context.arc(100, 100, 50, 0, Math.PI*2, false);
      context2.arc(100, 100, 50, 0, Math.PI*2, false);
      context.fill();
      context2.fill();
</script>

CSS๋Š” ๊ฐ€์‹œ์ ์œผ๋กœ ๋ดค์„ ๋•Œ ์–ด๊ฑฐ์ง€๋กœ ๋ผ์›Œ๋งž์ถœ ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, canvas ์•ˆ์—์„œ ์š”์†Œ๋ฅผ ๊ทธ๋ ธ์„ ๋•Œ canvas๊ฐ€ ๋ถ€์—ฌํ•œ ๋†’/๋„“์ด ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ ค์ง

์œ„์ฒ˜๋Ÿผ ๋ ˆํ‹ฐ๋‚˜ ๋Œ€์‘์„ ์œ„ํ•ด CSS๋กœ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์ด ์ž์ฃผ ์“ฐ์ž„. Canvas ๊ฐ€ ํ’€์Šคํฌ๋ฆฐ์œผ๋กœ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ด๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ์ค„์ด๋‚˜?

=> JS๋กœ ์บ”๋ฒ„์Šค์˜ ๋†’/๋„“์ด๋ฅผ window ์Šคํฌ๋ฆฐ*2๋ฐฐ๋กœ ํ•œ ํ›„, CSS์—์„œ๋Š” 100%

=> BUT ๋งˆ๋ƒฅ ์ข‹์ง€๋Š” ์•Š์Œ. ํ”ฝ์…€ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ ธ์„œ ๋ Œ๋”๋ง ์†๋„ ์ €ํ•˜
=> SO ๋ฏธ์  vs ์„ฑ๋Šฅ ์ž˜ ๊ณ ๋ คํ•ด์„œ

(ex) Apple ๊ณตํ™ˆ๋„ 2๋ฐฐ ํ•ด์„œ CSS๋กœ 2๋ฐฐ ์ค„์ž„

profile
ํ˜„์‹ค์ ์ธ ๋ชฝ์ƒ๊ฐ€

0๊ฐœ์˜ ๋Œ“๊ธ€