Кажется, что компонент text-geometry
не имеет свойства offset
ish (источник здесь )
Я бы решил это так: как только текстовая сетка загружена- возьмите его и укажите смещение вручную.
1) Вы можете довольно просто захватить сетку:
let mesh = this.el.getObject3D('mesh');
2) Чтобы рассчитать смещение - получите ширину из ограничительной рамки.
let bbox = new THREE.Box3().setFromObject(this.el.object3D);
let offset = (bbox.min.x - bbox.max.x) / 2
mesh.position.set(offset, 0, 0)
Вы можете проверить это здесь .
Теперь у меня есть одна серьезная проблема - может быть, я чего-то не знаю - но нетсобытие отправляется после загрузки текстовой сетки.Я пробовал loaded
или window/document.onload
, но они, кажется, выполняются непосредственно перед тем, как текстовая сетка действительно загружается.Мне нужно, чтобы он загружался, иначе ограничивающий прямоугольник будет бесконечным, что сделает расчет смещения практически бесполезным.В моей скрипке я бросил код в setTimeout()
.
Редактировать
1) Рекомендуется подождать с анимацией, пока не будут установлены вышеприведенные вычисления.Вы можете определить startEvent
и выдать его после изменения положения сетки
...
mesh.position.set()
this.el.emit("go")
..
<a-entity animation="startEvents: go"></a-entity>
2), вам необходимо включить масштаб при расчете ширины.Это потому, что размер локального пространства теперь другой:
let xscale = this.el.getAttribute('scale').x
let offset = ((bbox.min.x - bbox.max.x) / xscale ) / 2
mesh.position.set(offset, 0, 0)
Проверьте это здесь .