AFRAME текстовая геометрия вращение компонента от центра? - PullRequest
0 голосов
/ 26 февраля 2019

Есть ли способ установить точку поворота, чтобы быть в центре?Я использую компонент text-geometry, и он вращается из угла.я хотел бы, чтобы текст вращался из центра.

<a-entity animation="property: rotation; dur: 5000;to: 0 360 0;loop:true;easing:linear" position="0 4 -3" scale="0.6 1.2 1" text-geometry="value: MultiMedia; font: #dawningFont; bevelEnabled: true; bevelSize: 0.1; bevelThickness: 0.1; curveSegments: 1; size: 1.5; height: 0.5;" material="color:yellow; metalness:0.9; roughness: 0.05; sphericalEnvMap: #chrome;"></a-entity>

Я попытался добавить родительскую сущность и добавить анимацию к родительской, но, похоже, это не исправляет ее, вместо этого он начинает вращаться вкруговой путь.

enter image description here

1 Ответ

0 голосов
/ 26 февраля 2019

Кажется, что компонент 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)

Проверьте это здесь .

...