์๋ํฐ์์ ๋ ๋๋ง ๋๋ ๋ชจ๋ ๋ ์ด์ด๋ค์ ๊ธฐ๋ณธ ์ขํ ์์คํ ์ ๊ฐ์ง๋๋ค.
css ์์ ์ ๊ณต๋๋ x, y, width, height ๋ก ๋ง์ถฐ์ง absolute ํํ์ ์ขํ ์์คํ ์ด ๊ธฐ๋ณธ์ ๋๋ค.
์คํฌ๋ฆฐ ์ขํ์ ๋ง ๊ทธ๋๋ก ๋์คํ๋ ์ด ํ๋ฉด์์ ๋ด๊ฐ ์ด๋ ์ง์ ์ ์๋์ง์ ๋ํ ๊ฒ์ ๊ฐ๋ฆฌํต๋๋ค. ์๋ ์ขํ๋ ๋ ๋๋ง ๋๋ ๋ ์ด์ด๊ฐ Canvas ์์์ ์ด๋์ ์๋์ง๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ๋ชจ๋ ํ๋ฉด์ ์คํฌ๋ฆฐ ์ขํ ๊ธฐ์ค์ด๊ธด ํ์ง๋ง ์ค์ ํ์๋ฅผ ์ํ ์ขํ๋ ์๋ ์ขํ ์ด๊ธฐ ๋๋ฌธ์ ๋๊ฐ์ง ์ขํ๋ฅผ ๊ณ์์ ์ผ๋ก ๋ณํ์ ํด์ ์์น๋ฅผ ๋ง์ถฐ์ผ ํฉ๋๋ค.
ํ๋ฉด์ ํด๋ฆญํ ํ๋์ ์ ์ ํด๋น ์บ๋ฒ์ค์ ์ค์ ์๋ ์ขํ๋ก ๋ณํํฉ๋๋ค.
์คํฌ๋ฆฐ ์ขํ๋ viewport ์์คํ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ง๊ณ ์ฌ ์ ์์ต๋๋ค.
// e ๋ ๋ฐ์ํ ๋ง์ฐ์ค ์ด๋ฒคํธ์
๋๋ค.
const pos = this.$viewport.getWorldPosition(e);์ด๋ ๊ฒ ํ๋ฉด ์คํฌ๋ฆฐ์ ํด๋ฆญํ๊ณ ์์ง๋ง ์ค์ ๋ก ์๋ ์ขํ๋ก ๋ณํํด์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ค์ ๋ ์ด์ด์ ์ด๋ค ์์น ์ด๋์ด ์ผ์ด๋ ์ดํ๋ก ํ๋ฉด์์ ๊ทธ๋ ค์ง๋ ๊ทธ ์์ญ์ ์์์ผ ํ ๋๊ฐ ์์ต๋๋ค.
Selection ํด์ ๋ง๋ ๋ค๋๊ฐ ClipPath ์๋ํ ๋๊ตฌ๋ฅผ ๋ง๋ ๋ค๋๊ฐ ํ๋ ์ผ๋ค์ด์ฃ .
์ด ๋ ํด๋น ๋ ์ด์ด์ ์์น๋ฅผ ๊ฐ์ง๊ณ viewport ๊ธฐ์ค์ ์คํฌ๋ฆฐ ์ขํ๋ก ์ฎ๊ฒจ์ ์์ ์ ํฉ๋๋ค.
const layer = this.$selection.current;
const verties = layer.verties;
const screenPos = this.$viewport.applyVerties(verties);ํ์ฌ ๋ชจ๋ ์ขํ ์์คํ ์ Matrix(ํ๋ ฌ) ์ ์ฌ์ฉํด์ ์ ์ฉ๋์ด ์์ต๋๋ค.
์ด๋ ๊ฒ ๋์ด ์๋ ์ด์ ๋ ์ฌ๋ฌ ์ค์ฒฉ๋ ์์น๋ฅผ ํ๋ฒ์ ๊ณ์ฐํ ๋ฐฉ๋ฒ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ก๋ gl-matrix ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.