๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/์—ฐ๊ตฌ๋ชฉ๋ก

[WebGL - regl] (์ „๋žต) WebGL ์ขŒํ‘œ๊ณ„๋ฅผ ํ”ฝ์…€ ์ขŒํ‘œ๊ณ„๋กœ ๋ณ€ํ™˜

by Rising Oneโ˜… 2024. 8. 8.
728x90
๋ฐ˜์‘ํ˜•
SMALL

WebGL์˜ ๊ธฐ๋ณธ ์ขŒํ‘œ๊ณ„

  • ์™ผ์ชฝ ์œ„: (-1, 1)
  • ์˜ค๋ฅธ์ชฝ ์•„๋ž˜: (1, -1)

SVG์˜ ๊ธฐ๋ณธ ์ขŒํ‘œ๊ณ„

SVG์˜ ๊ธฐ๋ณธ ์ขŒํ‘œ๊ณ„๋Š” ํ”ฝ์…€ ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • ์™ผ์ชฝ ์œ„: (0, 0)
  • ์˜ค๋ฅธ์ชฝ ์•„๋ž˜: (width, height)

1๋‹จ๊ณ„. WebGL ์ขŒํ‘œ๊ณ„ -> ํ”ฝ์…€ ์ขŒํ‘œ๊ณ„ ๋ณ€ํ™˜:

WebGL์˜ (-1, 1) -> SVG์˜ (0, 0)์œผ๋กœ ๋งคํ•‘๋˜๊ณ , (1, -1) -> SVG์˜ (width, height)์œผ๋กœ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

function webglToPixel(x, y, canvas) {
  const width = canvas.width;
  const height = canvas.height;
  return {
    x: (x + 1) * 0.5 * width,
    y: (1 - y) * 0.5 * height
  };
}

 

2๋‹จ๊ณ„. relative์™€ absolute ์ง€์ •

(1) ๊ฒน์น˜๋ ค๋Š” canvas์™€ svg๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” div ์˜์—ญ(๋ถ€๋ชจ, ex_container)์— relative๋ฅผ ์ฃผ๊ณ 

- relative :  ์š”์†Œ ์ž๊ธฐ ์ž์‹ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜

(2) canvas์™€ svg์—๋Š” absolute๋ฅผ ์ค€๋‹ค.

- absolute : ๋ถ€๋ชจ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜

 

  <style>
    #container {
      position: relative;
      width: 800px;
      height: 600px;
    }
    canvas, svg {
      position: absolute;
      top: 0;
      left: 0;
    }
  </style>
</head>

 

3๋‹จ๊ณ„. canvas์™€ svg์— ๊ฐ™์€ px์˜ width & height๋ฅผ ์ค€๋‹ค.

<body>
  <div id="container">
    <canvas id="webglCanvas" width="800" height="600"></canvas>
    <svg id="svgOverlay" width="800" height="600">
      <!-- D3.js ๊ทธ๋ž˜ํ”ฝ ์š”์†Œ -->
      <circle cx="400" cy="300" r="50" fill="blue"></circle>
    </svg>
  </div>
</body>

 

728x90
๋ฐ˜์‘ํ˜•
LIST

๋Œ“๊ธ€