我想创建一些按钮,以允许用户选择他的手势可以在哪个平面(X,Y,Z)上移动我的可渲染对象。
下面是我尝试过的。它实际上确实更改了“ AllowedPlaneTypes”,但是可渲染对象无法移动。你知道为什么吗? 如果我直接在setImage()中设置所有平面,那么transformableNode将在每个平面上正常工作。
public class AugmentedImageNode extends AnchorNode {
private AugmentedImage image;
private BaseArFragment arFragment;
private TransformableNode node;
public void setImage(AugmentedImage image) {
Pose translation = image.getCenterPose().makeTranslation(0.0f, 0.0f, 0.0f);
setAnchor(image.createAnchor(image.getCenterPose().compose(translation)));
this.node = new TransformableNode(arFragment.getTransformationSystem());
node.getScaleController().setEnabled(false);
node.getTranslationController().setAllowedPlaneTypes(EnumSet.noneOf(Plane.Type.class));
node.getRotationController().setEnabled(false);
//Node node = new Node();
node.setWorldScale(new Vector3(1,1,1));
node.setParent(this);
node.setLocalRotation(Quaternion.axisAngle(new Vector3(1f, 0, 0), 90f));
node.setRenderable(x.getNow(null));
}
public void setTransformablePlaneTypes(String buttonId){
EnumSet<Plane.Type> allowedPlaneTypes = EnumSet.allOf(Plane.Type.class);
switch (buttonId){
case "X" :
allowedPlaneTypes = EnumSet.of(Plane.Type.HORIZONTAL_DOWNWARD_FACING);
this.node.getTranslationController().setAllowedPlaneTypes(allowedPlaneTypes);
break;
case "Y" :
allowedPlaneTypes = EnumSet.of(Plane.Type.HORIZONTAL_UPWARD_FACING);
this.node.getTranslationController().setAllowedPlaneTypes(allowedPlaneTypes);
break;
case "Z" :
allowedPlaneTypes = EnumSet.of(Plane.Type.VERTICAL);
this.node.getTranslationController().setAllowedPlaneTypes(allowedPlaneTypes);
break;
}
}
}
非常感谢您的帮助。