2017-12-18 9 views
1

Ich habe einen Testfall für das Problem eingerichtet, das ich unter this glitch habe.So zentrieren Sie untergeordnete Entität bei Instanziierung

Grundsätzlich versuche ich bei jedem Klick eine Kugel mit einem Textgeometrieunterknoten zu erzeugen, wobei der Text auf der Kugel zentriert ist, d. H. "X markiert den Punkt".

Was passiert, wenn ich das erste Mal klicke, wird der Text so ausgerichtet, dass die untere linke Seite mit der Kugel ausgerichtet ist.

Ich versuche und verwenden Sie geometry.center(), um dies zu beheben, aber es scheint keine Begrenzungsbox verfügbar.

Ich habe es eingerichtet, dies in einer Komponente zu tun, wenn geladen, und wenn object3dset, aber keiner von diesen funktioniert.

Wenn ich erneut klicke und getElementById() verwende, um die vorhandene Textgeometrie zu erhalten, dann rufe ich geometry.center() auf, das eigentlich zentriert ist.

Meine Ahnung ist, dass ich aus irgendeinem Grund nicht erkennen kann, die Bounding Box wird erst später erstellt, aber ich kann nicht herausfinden wann.

Jeder Einblick, wie ich dies mit nur einem Klick zentriert bekommen kann, wäre toll, danke.

EDIT: Ich sollte beachten, dass ich gefunden habe mit einem setTimeout (wie auskommentiert auf der Glitch) wird es funktionieren, so scheint es definitiv ein Problem sein, wenn Dinge passieren, aber das ist nicht wirklich eine großartige Lösung .

Antwort

0

Ich versuche und benutze geometry.center(), um dies zu beheben, aber es scheint keine Bounding Box zur Verfügung zu stehen.

Run geometry.computeBoundingBox()

+0

Sorry, ich hätte klarer sein sollen. Die Begrenzungsbox wird erstellt, aber die Größe in allen Dimensionen ist 0. Erst mit dem zweiten Klick (oder einer kleinen Verzögerung) ist die Box tatsächlich die Größe der Textgeometrie. Die – Ryan

0

Ich bin nicht ganz klar, wo genau Sie den Text platziert werden soll, wenn Sie auf der Kugel zentriert sagen, aber auf der Annahme, dass Sie den Radius der Kugel setzen Sie dann wissen genau dort, wo die Grenzen der Kugel unabhängig von der Bounding-Box-Berechnung sind, und die a-Text-Komponente zum Beispiel über Parameter verfügt, mit denen Sie den Text zentrieren und nach oben und unten ausrichten können; Sie können den Parameter zOffset verwenden, um beispielsweise zu verhindern, dass sich der Text innerhalb der Kugel befindet. Für beliebige Formen müssten Sie wahrscheinlich darauf warten, dass die Formgeometrie generiert wird und die Begrenzungsbox verfügbar ist.

+0

> Für willkürliche Formen müssen Sie wahrscheinlich warten, bis die Form Geometrie generiert und Bounding Box verfügbar sein. Ich bin mir ziemlich sicher, dass dies der Fall ist. Es verwendet nicht a-Text, sondern Text-Geometrie, die eine neue THREE.TextGeometry erzeugt. Ich denke jetzt, dass das nur einige Zeit braucht, da die implementierte Zeitüberschreitung ziemlich zuverlässig ist, obwohl es schief aussieht. Jetzt, da ich ein wenig mehr Tests gemacht habe, denke ich, es ist wirklich ein Problem, die mesh.getWorldPosition nicht gesetzt zu haben. Gibt es eine Möglichkeit, ein Ereignis anzuhören, wenn die gesamte Entität der Szene hinzugefügt wird? – Ryan

+0

Dies zeigt, was ich meine (mit Debug-Protokollierung auf der Konsole) https://wordvom.glitch.me/test2 Entkomme den SetTimeout-Block in Zeile 109 bewirkt, dass es auf den ersten Klick funktioniert. – Ryan

Verwandte Themen