2017-12-18 21 views
1

私はthis glitchにある問題のテストケースをセットアップしました。インスタンス化時に子エンティティを中央に配置する方法

本質的に、各クリックで、テキストが球の中央に配置されているテキストジオメトリの子を持つ球を作成しようとしています。つまり、「Xはスポットをマークします。

私が最初にクリックすると、テキストの向きが変わり、左下が球に揃うようになります。

これを修正するためにgeometry.center()を試してみましたが、利用できるバウンディングボックスがないようです。

私はコンポーネント内で、ロード時に、object3dset時にこれを行うように設定しましたが、これらは動作しません。

もう一度クリックしてgetElementById()を使用して既存のテキストジオメトリを取得し、geometry.center()を呼び出すと実際に中心になります。

何かの理由で私は分かりませんが、境界ボックスは後で作成されるのではなく、いつ見つけることができません。

これをどのようにして1クリックだけで中心化できるかについての洞察は素晴らしいことですが、ありがとうございます。

編集:setTimeout(グリッチにコメントアウトされている)を使用すると機能することに気がつくはずですので、事態が起こったときには間違いなく問題はあるようですが、それは本当に素晴らしい解決策ではありません。

答えて

0

これを修正するためにgeometry.center()を試してみましたが、利用できるバウンディングボックスがないようです。

実行geometry.computeBoundingBox()

+0

申し訳ありませんが、もっと明確にすべきです。バウンディングボックスは作成されますが、すべてのディメンションのサイズは0です。2番目のクリック(または小さな遅延)までは、ボックスが実際にテキストジオメトリのサイズではありません。 – Ryan

0

私はあなたが球の中心に言うときに正確にテキストを配置したい場所に完全に明確ではないですが、あなたは球の半径を設定している前提に、あなたが知っています球の境界がバウンディングボックスの計算に関係なく正確にどこにあるのか、そして例えばaテキストコンポーネントは、テキストを中央に配置して上下に揃えることができるパラメータを持っています。たとえば、zOffsetパラメータを使用して、テキストが球の内部に収まらないようにすることができます。任意の図形の場合は、図形のジオメトリが生成されるのを待つ必要があり、境界線を使用できるようにする必要があります。

+0

>任意の図形では、図形のジオメトリが生成されるのを待つ必要があり、境界線が使用できるようにする必要があります。 私はこれが本当であると確信しています。これはa-textではなく、新しいTHREE.TextGeometryを作成するテキストジオメトリを使用しています。私は今実装されたタイムアウトがきらめくように見えてもかなり信頼できるので、ちょうど時間を取っていると思っています。 もう少しテストを行ったので、実際にはmesh.getWorldPositionが設定されていないという問題があると思います。エンティティ全体がシーンに追加されたときにイベントを聴く方法はありますか? – Ryan

+0

これは、私が意味することを示しています(コンソールでのデバッグログ付き) https://wordvom.glitch.me/test2 109行目のsetTimeoutブロックのコメントを外して最初のクリックで機能します。 – Ryan

関連する問題