用Sceneform SDK中的另一个可渲染节点替换可渲染的节点(相同的旋转,位置和比例)

时间:2018-10-30 07:01:40

标签: android augmented-reality arcore android-augmented-reality sceneform

我是Android的Sceneform SDK的新手。我添加了一个Transformable Node,然后我进行了一些旋转,缩放并更改了它的位置。现在,单击按钮时,我需要将第二个节点放置在相同的旋转,缩放和位置上。

为此,我所做的是:

 Node nodeTwo = new Node(); // second node
 nodeTwo.setLocalPosition(nodeOne);
 nodeTwo.setLocalRotation(nodeOne);
 nodeTwo.setLocalScale(nodeOne);
 nodeTwo.setRenderable(renderable); 

我也尝试过使用setWorldPosition() , setWorldRotation().。但是没有任何效果,第二个节点被放置在固定位置和旋转上。

我可以做点什么来解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

anchor = hitResult.createAnchor();
        anchorNode = new AnchorNode(anchor);
        anchorNode.setParent(arView.getArSceneView().getScene());
        transformableNode = new TransformableNode(arView.getTransformationSystem()); // As you said i have added one transformablenode which will allow transformation.
        transformableNode.setParent(anchorNode);
        transformableNode.setRenderable(modelRenderable);
        transformableNode.select();

然后我添加了另一个节点,该节点将用相同的变换替换第一个节点。

 Node node = new Node();
        Vector3 position = transformableNode.getLocalPosition();
        Quaternion rotation = transformableNode.getLocalRotation();
        TransformableNode andyNOde = new TransformableNode(arView.getTransformationSystem());
        andyNOde.setRenderable(andyRenderable);
        andyNOde.setLocalPosition(position);
        andyNOde.setLocalRotation(rotation);
        andyNOde.setParent(node);
        anchorNode.removeChild(transformableNode);
        anchorNode.addChild(node);

它正在使用此代码,可能是您做错了什么,请两次检查您的代码。希望对您有所帮助!

答案 1 :(得分:0)

尝试一下:

Node nodeTwo = new Node(); // second node
nodeTwo.setWorldPosition(nodeOne.getWorldPosition()); 
nodeTwo.setWorldRotation(nodeOne.getWorldRotation());
nodeTwo.setWorldScale(nodeOne.getWorldScale());
nodeTwo.setRenderable(renderable);