canvas์™€ WebGL

[์›๋ณธ ๋งํฌ]

webgl์€ ๊ธฐ์กด canvas API์™€๋Š” ๋ณ„๋„๋กœ openGL ๊ทœ๊ฒฉ์„ ์ œ๊ณตํ•˜๋Š” ๋น„ํ‘œ์ค€ ํ™•์žฅ ๊ธฐ๋Šฅ์ด๋‹ค.
canvas๊ฐ€ 2004๋…„์— ๋‚˜์™”๊ณ , webgl์€ ๋ชจ์งˆ๋ผ์— ์˜ํ•ด 2011๋…„์— ๋‚˜์™”๋‹ค.

canvas์™€ ๋น„๊ตํ•˜๋ฉด, ๋น„ํ‘œ์ค€์ด๊ณ , ์„ฑ๋Šฅ์ด ๋” ์ข‹์œผ๋ฉฐ, 3D์— ์ตœ์ ํ™”๋˜์–ด์žˆ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค. 2D๋ผ๋„ webgl์ด ๋” ๋น ๋ฅด๊ณ , gpu ๊ฐ€์† ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๋‹ค๋งŒ ์ข€ ์–ด๋ ต๋‹ค.

๋น„ํ‘œ์ค€์ด๋ผ๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์ด์ € ๋ธŒ๋ผ์šฐ์ €๋“ค์€ ๋‹ค ์ง€์›ํ•˜๊ธด ํ•œ๋‹ค.

ํ•œ๋ฒˆ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ๋‹ค.

์•„๋ž˜๋Š” ์บ”๋ฒ„์Šค์— ๊ฒ€์€์ƒ‰๋งŒ์„ ์น ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋‹ค.
openGL์„ ์•ˆ๋‹ค๋ฉด ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <div class="">
            <canvas id="canvas" width="300" height="300"></canvas>
            <button onclick="onButtonClicked()">ํด๋ฆญ</button>
        </div>
    </body>

    <script>
      function onButtonClicked() {
        const canvas = document.getElementById("canvas");

        const webgl = canvas.getContext("webgl");
        if (!webgl) {
          alert("webgl ๋ฏธ์ง€์›!");
          return;
        }

        webgl.clearColor(0.0, 0.0, 0.0, 1.0); // #000000 ๊ฒ€์€์ƒ‰ ์„ค์ •
        webgl.clear(webgl.COLOR_BUFFER_BIT|webgl.DEPTH_BUFFER_BIT); // ์ƒ‰์ƒ๊ณผ depth buffer๋ฅผ ์„ค์ •
      }
    </script>
</html>


์šฐ์„  ๊ทธ๋ฆด ๋ฐ”ํƒ•์ด ๋  ์บ”๋ฒ„์Šค๋ฅผ ํ•˜๋‚˜ ๋งˆ๋ จํ•ด์•ผ ํ•œ๋‹ค.


๊ทธ๋ฆฌ๊ณ  webgl ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ง€์› ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.


์ปจํ…์ŠคํŠธ๊ฐ€ ์ž˜ ๊ฐ€์ ธ์™€์กŒ๋‹ค๋ฉด, rgb๊ฐ’ ์ฃผ๊ณ  clear๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ depth buffer๋ผ๋Š” ๊ฐœ๋…์ด ์ข€ ์ƒ์†Œํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๊ฑด 2D๊ฐ€ ์•„๋‹ˆ๋ผ 3D ๋ Œ๋”๋ง์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, ๊ฐ€๊นŒ์ด ์žˆ๋Š” ๋ฌผ์ฒด๊ฐ€ ๋” ๊ฐ€๊นŒ์ด ๊ทธ๋ ค์ง€๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹น์žฅ ์ด ์ฝ”๋“œ์—์„œ๋Š” 2D๋กœ๋งŒ ๊ทธ๋ฆฌ๊ณ  ์žˆ์œผ๋‹ˆ ์ƒ๊ด€์€ ์—†๋‹ค.


๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ๊ทธ๋ ค์งˆ ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://webglfundamentals.org/webgl/lessons/ko/webgl-fundamentals.html
https://developer.mozilla.org/ko/docs/Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL