SVG ์ด๋ฏธ์ง๋ก pixi.js๋ฅผ ํ ์คํธํ๋๋ฐ ๋ ๋๋ง์ด ์ข์ง ์์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ฌ๊ธฐ์ ์ผ์ผ์ด์ค jsfiddle์ ๋ง๋ค์์ต๋๋ค.
http://jsfiddle.net/confile/w84y9k7c/
Pixi.js๋ก ๋ ๋์ SVG ๋ ๋๋ง์ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
SVG์ด๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. WebGL์ ํฌ๊ธฐ ์กฐ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋ฐฉ์ด๋ฉฐ ์บ๋ฒ์ค์์๋ ์ ํ์ ๋๋ค. ํ๋ฆฟํด์ง ๊ฒ์ด๋ผ๋ ์๋ฏธ์ ๋๋ค. ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ ์ ํ๊ฒ ์กฐ์ ํ ๋ค์ ๋ ๋๋งํด์ผ ํฉ๋๋ค.
Pixi.js๋ ๋ฒกํฐ ๋ ๋๋ฌ๊ฐ ์๋๋ผ ๋นํธ๋งต ๋ ๋๋ฌ์ ๋๋ค. ์ฆ, SVG๋ฅผ ๋ ๋๋งํด๋ png/jpg์ ๋นํด ์ด์ ์ด ์์ต๋๋ค.
์๋ค ์,
@englercj ๊ฐ ๋ง์ต๋๋ค. Pixi๋ SVG๋ฅผ ๋ก๋ํ ๋ ๋์คํฐํํฉ๋๋ค. ํ์ฌ๋ก์๋ svg๋ฅผ ์ค์ ๋ก ์ง์ํ์ง ์์ต๋๋ค. ์ด๋ ์์๊ฐ ์ถฉ๋ถํ๋ค๋ฉด ๋ ์์ธํ ์กฐ์ฌํ ๊ณํ์ ๋๋ค.
๊ฐ์ฌ ํด์!
์ฌ๋๋ค์ด ๋ถ๋ช ํ ์ํ์ง๋ง ์์ง ์ด์ ํ์ ์ฌ๋ฆฌ์ง ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ค์ ์ฝ๋๋ค.
๋๊ตฐ๊ฐ ์ด๋ฅผ ์ํ v3 ํ๋ฌ๊ทธ์ธ์ ์์ฑํ๊ณ ์ถ๋ค๋ฉด ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋จผ์ ๋ง๋ค ๋ค๋ฅธ ๋ฉ์ง ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ปค๋ฎค๋ํฐ๊ฐ ๊ทธ๊ฒ์ ํ๋๋ก ์น์ธํ์ง ์๋ ํ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค!
spriteSVG.scale.set(1);์์์ ๊ฐ์ด ์ค์ผ์ผ์ 1๋ก ๋ณ๊ฒฝํฉ๋๋ค. SVG ํ์ผ์ ์ฒซ ๋ฒ์งธ ํ๊ทธ๋ฅผ ํธ์งํฉ๋๋ค... ๋ค์๊ณผ ๊ฐ์ด ๋ทฐํฌํธ ํฌ๊ธฐ์ ๋ ๋ฐฐ์ ๋๋ค.
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 200 200">
๋ ๋๋ง์ด ๋ ์นด๋กญ์ต๋๋ค.๋๊ตฐ๊ฐ๊ฐ ์ด๋ฅผ ์ํํ๋ ๋ฃจํด์ ์์ฑํ ๋ค์ ๊ฒฐ๊ณผ์์ ํ ์ค์ฒ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์์ ๋ jsfiddle์ ๊ฒ์ํ์ง๋ง ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋๋ ์ง๋ ๋ช ์๊ฐ ๋์ SVG์์ PIXI.Graphics๋ก์ ๋ณํ ์์ ์ ํ์ผ๋ฉฐ ๊ฝค ์ ์๋ํฉ๋๋ค.
https://github.com/saschagehlich/pixi-svg-graphics
์ฌ๊ธฐ์์ ๋ฐ๋ชจ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
http://filshmedia.net/lab/pixi-svg/
(PIXI.Container๋ ์ต๋ 10๋ฐฐ๊น์ง ํ์ฅ๋ฉ๋๋ค(์๋ SVG๋ 80x80๊ณผ ๊ฐ์ต๋๋ค). ์ฌ์ ํ ๋ฐ์ญํฉ๋๋ค.)
์์ง ์์ ํ ๊ตฌํ๋์ง๋ ์์์ง๋ง ๋ช ๊ฐ์ SVG ํ์ผ๋ก ์๋ํ๋๋ฐ ์ข์ ์์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ถํํ๋ ๋ณต์กํ ์ง์ค๋ฉํธ๋ฆฌ๋ ์ง๊ธ์ ์๋ํ์ง ์์ง๋ง ์์ผ๋ก ๋ฉฐ์น ์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋๊ตฐ๊ฐ ๋๊ณ ์ถ๋ค๋ฉด - ๋ถ๋ด ์์ด ๊ธฐ์ฌํ์ญ์์ค. :)
+1
๊ฒ์์ ๋ง์ ์์ฐ์ด ์ค์ ๋ก ๋ง์ง ์์ผ๋ฉด ๋ชจ๋ ๊ฐ๋ ์ด ๋์คํฐ์ ๋๋ค.
๋ด PIXI-SVG-Graphics ํ๋ก์ ํธ๋ ์ด์ ๋ณต์กํ ๊ฒฝ๋ก๋ฅผ ์ง์ํ๋ฏ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ npm์ ๋ชจ๋๋ก ๊ฒ์ํ์ต๋๋ค. https://www.npmjs.com/package/pixi-svg-graphics
์๋ก์ด ๋ ๋ ์์ง์ ๊ตฌํํ๋ ๋์ ๋ธ๋ผ์ฐ์ SVG ๋ ๋ ์์ง์ ํ์ฉํ๋ ์๋ฃจ์ ์ ์ ํธํฉ๋๋ค.
๋ด ์์ด๋์ด๋ Sprite(๋ฐ/๋๋ BaseTexture) "SVGSprite"์ ํ์ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค. webGL ๋ ๋๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ svg๊ฐ ํ๋ฆฟํด์ง์ง ์๋๋ก ํ์๋ ํฌ๊ธฐ์ ํ ์ค์ฒ๋ก ๋ ๋๋ง๋์ด์ผ ํฉ๋๋ค.
์์ด๋์ด:
ํฌ๊ธฐ๋ SVGSprite๊ฐ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ ์ปจํ ์ด๋์ ํฌํจ๋ ๊ฒฝ์ฐ์๋ ํฌ๊ธฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ณ์ฐ๋๋๋ก ์ ์ญ ๋ณํ ํ๋ ฌ์ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. SVGSprite์๋ ๊ณ์ฐ ๋ฐ ์์ค ์บ๋ฒ์ค๊ฐ ๋ค์ ์คํ๋๋๋ก ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ด ์์ด์ผ ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ๋ชจ๋ SVG ๊ธฐ๋ฅ์ด pixi์์ ์๋ํ๊ณ ๊ฒฐ๊ณผ๊ฐ ํ๋ฆฟํ์ง ์์ต๋๋ค.
@FlorianLudwig ๊ทธ๋์ SVG์ ์์ฑ์ด mySVG.setAttribute("transform", "scale(50 50)");
์ฒ๋ผ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ด๋ฏธ์ง์ ์บ๋ฒ์ค ๋ฒ์ ์ ์
๋ฐ์ดํธํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ๊ณผ ํจ๊ป PIXI.Texture.fromCanvas
์ ํจ๊ป https://gist.github.com/biovisualize/8187844 ์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. mySVG.setAttribute("transform", "scale(50 50)");
?
@saschagehlich
๋ด PIXI-SVG-Graphics ํ๋ก์ ํธ๋ ์ด์ ๋ณต์กํ ๊ฒฝ๋ก๋ฅผ ์ง์ํ๋ฏ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค์ด ์์ง ๋ถ์กฑํ ๊ฒ ๊ฐ์ต๋๊น?
์ด๋ฐ ์ข ๋ฅ์ ์ฝ๋
var canvas = document.createElement ('canvas');
canvas.width = ...; canvas.height = ...;
canvas.getContext ('2d').drawImage (svgImage, 0, 0, canvas.width, canvas.height);
var sprite = new PIXI.Sprite (new PIXI.Texture (new PIXI.BaseTexture (canvas)));
svg๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํ์ํ ํด์๋๋ก ์คํ๋ผ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค(ํ์ฅํ๋ ค๋ ๊ฒฝ์ฐ ์ ์ธํ๊ณ svg ํ๊ทธ์ preserveAspectRatio="none"
๋ฅผ ์ถ๊ฐํด์ผ ํจ).
์ด ๋ฌธ์ ๋ฅผ "+1"ํ๋ ค๋ฉด GitHub ๋ฐ์์ ์ฌ์ฉํ์ฌ ์๋ณธ ๊ฒ์๋ฌผ์ +1ํ์ธ์. ์ด ์ค๋ ๋์์ "+1" ๋ฉ์์ง๋ ์์์ผ ๋ฟ์ด๋ฉฐ ์ฌ๊ธฐ์์ ๋ํ๋ฅผ ์ฝ์ ์ ์๋๋ก ํ๋ฏ๋ก ์ญ์ ํ๊ฒ ์ต๋๋ค.
์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด ํ ์ค์ฒ ์ฝ๋๋ฅผ ์์ ํ์ต๋๋ค. ๋ค ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ด svg์ ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
new PIXI.Texture.fromImage('bunny.svg', undefined, undefined, 2.0);
๋๋ bunnymark๋ฅผ ํฌํฌํ๊ณ ์ฌ๊ธฐ์์ JS์์ ๋ผ์ธ 66์ ๋ณ๊ฒฝํ์ฌ ์ค์ผ์ผ์ ๊ฐ์ง๊ณ ๋ ์ ์์ต๋๋ค.
http://codepen.io/anon/pen/pyXMzR.
@englercj , ๊ด์ฐฎ์ผ๋ฉด PR์ ์์ฑํ ์ ์์ต๋๋ค. https://github.com/RanzQ/pixi.js/commit/07522e6dddcdb4741e196ad5f20bb8e534fbb59e
์ด๋ฐ ์์ผ๋ก ์ฐฝ ํฌ๊ธฐ ์กฐ์ ์ ํ ์ค์ฒ๋ฅผ ์กฐ์ ํ๊ณ ๋ค์ ๋์คํฐํํ์ฌ ์ฅ๋ฉด์ด ์๋ตํ๊ณ pixi๊ฐ ์ ๊ณตํ๋ ๊ณ ์ฑ๋ฅ์ ๊ณ์ ์ ์งํ ์ ์์ต๋๋ค.
PR ๋ณํฉ, ๋ซ์ต๋๋ค!
Chrome ๋ฐ FF์์๋ ์ ์๋ํ์ง๋ง IE11์์๋ ์๋ํ์ง ์์ต๋๋ค. ์ด ์ฝ๋ ์ค์์ SecurityError๊ฐ ๋ฐ์ํ์ต๋๋ค.
let tiger = new Sprite(new PIXI.Texture.fromImage('images/tiger.svg', true, PIXI.SCALE_MODES.LINEAR, 8.0));
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์, ์ข์ OL' SecurityError. Edge์์๋ ์์ ๋์์ง๋ง IE11์์๋ ์์ ๋์ง ์์ IE11์ ๋ฒ๊ทธ์ ๋๋ค.
https://github.com/pixijs/pixi.js/issues/2928
SVG๋ฅผ PNG๋ก ๋ณํํ๋ ๊ฒ ์ธ์๋ ํ ์ ์๋ ์ผ์ด ์์ต๋๋ค.
์์ ๋๋ง ํ. ํํธ๋ฅผ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ค์ 14.12.2017 08:10 schrieb "Sascha Gehlich" [email protected] :
์, ์ข์ OL' SecurityError. IE11์์ ์์ ๋ ๋ฒ๊ทธ์ ๋๋ค.
Edge, ํ์ง๋ง IE11์๋ ์์:2928 https://github.com/pixijs/pixi.js/issues/2928
SVG๋ฅผ PNG๋ก ๋ณํํ๋ ๊ฒ ์ธ์๋ ํ ์ ์๋ ์ผ์ด ์์ต๋๋ค.
โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/pixijs/pixi.js/issues/936#issuecomment-351627238 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAu1ZuPEIl_MUskNn1grboYcBl6Vxdxlks5tAMnfgaJpZM4CaLFV
.
์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ SVG ์ด๋ฏธ์ง๋ฅผ ํ์ํ๊ธฐ ์ํด PIXI.Texture.fromImage๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ ์ค๋งํธํฐ์์๋ SVG๊ฐ ํ๋ฆฟํ๊ฒ ๋ณด์ ๋๋ค.
์ฌ๊ธฐ ์ํ ์ฝ๋ https://codepen.io/anon/pen/QaxqvP
๋ฐ์คํฌํ ๋ธ๋ผ์ฐ์ ์์๋ ๊ด์ฐฎ์ ๋ณด์ด์ง๋ง ์ค๋งํธํฐ์ด๋ ์๋๋ก์ด๋ ์๋ฎฌ๋ ์ดํฐ์์ ์ด๊ฒ์ ์๋ํ๋ฉด SVG๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ ๋๋ง๋ฉ๋๋ค.
https://imgur.com/VbXlypP (์ผ์ชฝ ์ด๋ฏธ์ง๋ PIXI-SVG, ์ค๋ฅธ์ชฝ์ html img ํ๊ทธ).
์๋ง๋ devicePixelRatio์ ๊ด๋ จ๋ ๊ฒ์ผ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๋ง๊ฒ "ํ๋"ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ์คํฌํ์์ ํ๋ํ๋ฉด ๋์ผํ ๋์์ ์๋ฎฌ๋ ์ดํธํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
ํฝ์
๋น์จ์ด 1๋ณด๋ค ํฐ ์ฅ์น์์ SVG๋ฅผ ํ์/ํฌ๊ธฐ ์กฐ์ ํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น?
ํ๋ฆฟํ๊ฒ ๋ณด์ด์ง ์์ต๋๋ค. ์คํฌ๋ฆฐ์ท์ iPhone X์์ ๊ฐ์ ธ์จ ๊ฒ์
๋๋ค.
์คํฌ๋ฆฐ์ท์ ํ๋ํ๋ฉด ๋ณผ ์ ์์ต๋๋ค. ๋น์ ์ ๋๋ณด๋ค ๋ ํ๋ฆฟํ์ง๋ง ํ๋ฆฟํฉ๋๋ค.
์์ ์๋ฅผ ์๋ํ๊ณ ์์ง๋ง ์ด๋ค ์ด์ ์์์ธ์ง,
let texture = new PIXI.Texture.fromImage('../assets/heart.svg', false, undefined, 2);
๋์ง๋ค
ERROR Error: The SVG image must have width and height defined (in pixels), canvas API needs them.
์ด๋ฏธ์ง๋ฅผ ๋จผ์ ๋ก๋ํ๋ฉด
PIXI.loader.add("../assets/heart.svg").load(...)
์ค๋ฅ๋ ๋ฐ์ํ์ง ์์ง๋ง new PIXI.Texture.fromImage
์ ํ
์ค์ฒ๋ฅผ ํฌํจํ๋ ๋ ๋๋ง๋ ์คํ๋ผ์ดํธ๊ฐ ๋ชจ๋ ํฝ์
ํ๋์ด SVG๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋์ง ์์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ sourceScale
๋ณ๊ฒฝํด๋ ํจ๊ณผ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง 1
๊ทธ๋์ sourceScale
๋ ํ
์ค์ฒ๊ฐ ๋ก๋๋ก ๋ก๋๋ ๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค(https://github.com/pixijs/pixi.js/issues/4543). ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์ด์ ์ ๋ํ ์ฐ๊ตฌ๋ฅผ ๊ณ์ํ๊ฒ ์ต๋๋ค.
ํธ์ง 2
๋ด svg์ ๋๋น์ ๋์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋์์ต๋๋ค. <svg width="38.148697mm" height="32.77169mm" ...>
. ์น์๊ฐ "mm"๋ก ์ง์ ๋๋ฉด PIXI์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. "mm"๋ฅผ ์ ๊ฑฐํ๊ณ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํฉ๋๋ค.
@maximedupre ๋ ๋ธ๋ผ์ฐ์ ์ ํ์ผ๋ก ์ธํด px ๊ฐ๋ง ์๋ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ svgs๋ฅผ ์์ ํด์ผ ํจ์ ์ ์ ์์ต๋๋ค.
์ด ์ค๋ ๋๋ ๋ซํ ํ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค. ๊ด๋ จ ๋ฒ๊ทธ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค.