gpt4 book ai didi

java - 如何强制对象捕捉到网格?

转载 作者:行者123 更新时间:2023-11-30 05:12:15 24 4
gpt4 key购买 nike

我正在使用 ARCore 和 Sceneform 构建棋盘游戏应用。我的 3D 模型需要捕捉到网格而不是放置在任何地方。想象一下棋盘。
我该怎么做?

我复制了类 TransformableNodeTranslationController 来修改它们。在 TranslationController 中,使用 Vector3 在变量 desiredLocalPosition 中设置坐标。
据我了解,我应该能够对坐标进行整数除法,以便我的对象只能跳跃特定距离。

this.desiredLocalPosition = new Vector3(pose.tx(), pose.ty(), pose.tz());

float X = (int) (pose.tx()/0.05f) * 0.05f;
float Y = pose.ty(); //i don't care about vertical
float Z = (int) (pose.tz()/0.05f) * 0.05f;

this.desiredLocalPosition.set(X,Y,Z);

遗憾的是,这仅在我正在拖动对象时有效,而在实际放置对象时会忽略它。

虽然我是一名学生,但我几乎是一个菜鸟程序员。有人有想法吗?

最佳答案

看起来您的问题是您修改了 TranslationController#onContinueTransformation() 方法而不是 TranslationController#onEndTransformation() 方法。

onEndTransformation() 方法负责根据在拖动手势结束时检测到的最后一个 HitResult 设置新 anchor 。您在 onContinueTransformation() 中设置的僵局位置正在被这个新 anchor 覆盖。

只需删除 onEndTransformation() 方法中的逻辑即可启用您正在寻找的行为。

sceneform-ux:1.5.1 相关的答案。

P.S:对于您尝试创建的棋盘游戏体验,一个更可行的解决方案可能是将棋盘创建为 Node 的网格,并将游戏 block 附加到最接近的合格 节点onEndTransformation() 中的lastArHitResult。这将使您能够灵活地定义您想要的任何板空间并重复使用相同的自定义 TransformationController,以及创建仅在拖动结束时发生的更好的“对齐空间”用户体验动议。

关于java - 如何强制对象捕捉到网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53525589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com