【问题标题】:How to center child entity on instantiation如何在实例化上居中子实体
【发布时间】:2017-12-19 11:52:39
【问题描述】:

我已经为this glitch 遇到的问题设置了一个测试用例。

基本上,在每次点击时,我都会尝试创建一个球体,其中包含一个文本几何子对象,其中文本以球体为中心,即“X 标记点”。

发生的情况是我第一次单击时,文本的方向是左下角与球体对齐。

我尝试使用 geometry.center() 来解决此问题,但似乎没有可用的边界框。

我已将其设置为在组件中、加载时和 object3dset 时执行此操作,但这些都不起作用。

如果我再次单击并使用 getElementById() 获取现有的文本几何图形,则调用 geometry.center() 它实际上居中。

我的预感是由于某种原因我无法辨别,直到稍后才创建边界框,但我不知道什么时候。

任何关于如何只需单击一下就能将其居中的见解会很棒,谢谢。

编辑:我应该注意,我发现使用 setTimeout(如在故障上注释掉的那样)会导致它工作,所以这似乎是事情发生时间的问题,但这并不是一个很好的解决方案。

【问题讨论】:

    标签: three.js aframe


    【解决方案1】:

    我尝试使用 geometry.center() 来解决此问题,但似乎没有可用的边界框。

    运行geometry.computeBoundingBox()

    【讨论】:

    • 对不起,我应该更清楚。边界框已创建,但所有维度的大小均为 0。直到第二次单击(或稍有延迟),该框才真正成为文本几何的大小。
    【解决方案2】:

    当您说以球体为中心时,我并不完全清楚您希望将文本放置在哪里,但是假设您正在设置球体的半径,那么您就可以确切地知道球体的边界在哪里无论边界框计算如何,例如 a-text 组件具有允许您将文本居中并与顶部和底部对齐的参数;例如,您可以使用 zOffset 参数来防止文本位于球体内。对于任意形状,您可能需要等待形状几何图形生成和边界框可用。

    【讨论】:

    • > 对于任意形状,您可能需要等待形状几何图形生成和边界框可用。我很确定情况就是这样。它不使用文本,而是使用文本几何,它正在创建一个新的 THREE.TextGeometry。我现在认为这只是需要一些时间,因为实现的超时非常可靠,即使它看起来有问题。现在我已经做了更多的测试,我认为这确实是没有设置 mesh.getWorldPosition 的问题。有没有办法在将整个实体添加到场景时监听事件?
    • 这显示了我的意思(在控制台上使用调试日志记录)wordvom.glitch.me/test2 在第 109 行取消注释 setTimeout 块会使其在第一次单击时工作。
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2011-11-20
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多