Я пытаюсь загрузить SVG, которые уже находятся в DOM, в ТРИ. js сцена
Это пример SVG, который у меня есть
А вот как это выглядит на сцене
Я пытаюсь использовать THREE.SVGLoader и THREE.MeshLine для отображения значков.
Вот HTML для этого SVG
<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" id="FiDownload" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
И вот как я это делаю
const loader = new THREE.SVGLoader()
const svg = loader.parse(el.outerHTML)
const material = new THREE.MeshLineMaterial({
color: new AFRAME.THREE.Color(this.data.color),
resolution: new AFRAME.THREE.Vector2 ( window.innerWidth, window.innerHeight ),
sizeAttenuation: 0,
lineWidth: 2,//this.data.lineWidth,
opacity: 1,//this.data.opacity,
transparent: true,
//near: 0.1,
//far: 1000
});
svg.paths.forEach((path, i) => {
const shapes = path.toShapes(true);
shapes.forEach((shape, j) => {
const geometry = new AFRAME.THREE.ShapeGeometry(shape);
const mesh = new AFRAME.THREE.Mesh(geometry, material);
this.el.object3D.add(mesh)
});
});
Я получаю ошибку:
THREE.DirectGeometry: Безликие геометрии не поддерживаются.
Кто-нибудь может предложить способ заставить иконки SVG правильно отображаться в THREE?