textview 对象在场景中一直保持摇晃

问题描述 投票:0回答:1

通过使用下面的代码,textView 始终面向相机。然而,textview 对象一直保持不稳定。是否可以使用下面的代码添加锚点以在旋转手机时保持文本视图对象稳定和静态?

我尝试在场景中渲染一个文本视图对象,并且始终面向相机。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.sceneform_arfragment);
    arFragment.getPlaneDiscoveryController().hide();
    arFragment.getPlaneDiscoveryController().setInstructionView(null);
    arFragment.getArSceneView().getPlaneRenderer().setEnabled(false);

    node = new Node();
    node.setParent(arFragment.getArSceneView().getScene());
    node.setLocalPosition(new Vector3(0f, 0f, -1f));

    ViewRenderable.builder()
            .setView(this, R.layout.card)
            .build()
            .thenAccept(renderable -> {
                node.setRenderable(renderable);
                TextView textView = (TextView) renderable.getView();
                textView.setText("Hello Sceneform");
            });
  arFragment.getArSceneView().getScene().addOnUpdateListener(this::onSceneUpdate);}

私有无效 onSceneUpdate(FrameTime 帧时间) {

arFragment.onUpdate(frameTime);
Vector3 cameraPosition = arFragment.getArSceneView().getScene().getCamera().getWorldPosition();
Vector3 cardPosition = node.getWorldPosition();
Vector3 direction = Vector3.subtract(cameraPosition, cardPosition);
Quaternion lookRotation = Quaternion.lookRotation(direction, Vector3.up());
node.setWorldRotation(lookRotation);

}

我的预期结果是textview对象面向相机而不晃动。

arcore sceneform
1个回答
0
投票

锚点在 ARCore 应用程序中的作用

ARCore 的 Anchor 是您希望设备跟踪的世界空间中的一个特殊点(具有变换 4x4 matrix)。将任何可渲染模型放置在场景中的唯一正确方法是将其附加到锚点。它是防止模型“晃动”和“滑动”的锚点。但请记住,锚点是 cpu 密集型对象,因此您应该谨慎使用它们。

这是代码:

val anchorNode = AnchorNode()
anchorNode.addChild(modelNode_01)
anchorNode.addChild(modelNode_05)
arFragment.arSceneView.scene.addChild(anchorNode)
© www.soinside.com 2019 - 2024. All rights reserved.