如何将AR ViewRenderable完全适合目标图像?

时间:2018-09-18 05:05:05

标签: android augmented-reality arcore

我希望将AR ViewRenderable放置在真实目标图片上并完全适合其边界。 虽然ViewSizer用于更改AR对象的大小,但它是全局执行的(为每种情况设置dpPerMeter)。但是,我想按目标尺寸缩放它,

我认为可以通过setLocalScale方法以及getExtentX和getExtentZ来完成某些工作,但不确定如何为我的原因设置参数。

看看当前的代码片段:

    setAnchor(image.createAnchor(image.getCenterPose()));
    Node cornerNode = new Node();
    cornerNode.setParent(this);
    cornerNode.setLocalRotation(new Quaternion(new Vector3(1,0,0), -90));
    cornerNode.setLocalPosition(new Vector3(0.0f, 0.0f, 0f));
    cornerNode.setRenderable(targetImage.getNow(null));

1 个答案:

答案 0 :(得分:5)

默认情况下,250dp等于1米,但是您可以通过ViewRenderable.builder().setSizer(DpToMetersViewSizer(you_size))更改它

您必须通过图像尺寸和AR核心估算尺寸来计算比例,因此添加如下代码

// in this example, the image is 100 cm x 66 cm
val imageWidth = 1f //  = 1m
val imageHeight = 0.66 // = 66 cm

val scaledWidth = imageWidth / image.extentX
val scaledHeight = imageHeight / image.extentZ

// scale the Node
node.localScale = Vector3(scaledWidth, scaledHeight, scaledWidth)

// also, my view_wall.xml is 250dp x 166dp and the VerticalAlignment is center, like
val wall = ViewRenderable.builder().setView(this, R.layout.view_wall)
            .setVerticalAlignment(ViewRenderable.VerticalAlignment.CENTER)
            .build()

它对我有用,帮助它对你有用。

这是我的练习项目https://github.com/swarmnyc/arcore-augmented-image-swarm