ArCore Augmented Images будет располагаться горизонтально на стене - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь сделать что-то вроде этого: https://www.youtube.com/watch?v=sX1aOBlwGWc enter image description here

Я могу сделать изображение в AR.Но это всегда с неправильной ориентацией.Чего я на самом деле хочу добиться, так это чтобы изображение накладывалось на текущий плакат, картинку, баннер.

Это мой код:

Моя конфигурация:

config.focusMode = Config.FocusMode.AUTO
config.updateMode = Config.UpdateMode.LATEST_CAMERA_IMAGE
config.planeFindingMode = Config.PlaneFindingMode.VERTICAL            

Мой код после распознавания изображения.

ViewRenderable.builder()
     .setView(context, R.layout.ar_layout)
     .build()
     .thenAccept {
          addNodeToScene(arFragment, image, it)
     }

private fun addNodeToScene(fragment: ArFragment, image: AugmentedImage, renderable: ViewRenderable) {
    val node = Node()
    node.renderable = renderable
    val pose = image.centerPose
    val anchorNode = AnchorNode(image.createAnchor(pose))
    anchorNode.addChild(node)
    fragment.arSceneView.scene.addChild(anchorNode)
    Toast.makeText(fragment.context, "Added", Toast.LENGTH_SHORT).show()
}

файл ar_layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="50dp"
        android:layout_height="75dp"
        android:src="@drawable/poster" />
</LinearLayout>

Я нашел несколько учебных пособий о том, как вам нужно реализовать это в Unity.Но я не хочу этого делать.Может ли кто-нибудь помочь мне понять это?

Что я получил в этот момент:

enter image description here

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Вы должны иметь возможность изменять ориентацию визуализированного изображения / вида / объекта с помощью setLocalRotation.

Например, в моем проекте я использовал приведенный ниже код, который делает визуализированное изображение лицом прямо наружу от обнаруженного изображения.

Node cornerNode;
localPosition.set(-0.0f * image.getExtentX(), 0.1f, +0.5f * image.getExtentZ());
cornerNode = new Node();
cornerNode.setParent(this);
cornerNode.setLocalPosition(localPosition);
cornerNode.setLocalRotation(Quaternion.axisAngle(new Vector3(-1f, 0, 0), 90f));
cornerNode.setRenderable(testViewRenderable);
0 голосов
/ 04 марта 2019

AnchorNode следует позе AugmentedImage, и поэтому вы не можете изменить localRotation или localPosition на этом узле. From AnchorNode.setLocalRotation : "Установить локальное вращение этого узла , если он не привязан. "

Вы можете изменить локальное преобразование, введя промежуточный узел:

                    val base = AnchorNode()
                    base.anchor = augmentedImage.createAnchor(augmentedImage.centerPose)

                    val node = Node()
                    node.setParent(base)
                    node.localPosition = Vector3(0f, 0f, augmentedImage.extentZ/2)
                    node.localRotation = Quaternion.axisAngle(Vector3(1.0f, 0f, 0f), -90f)
                    node.localScale = Vector3(augmentedImage.extentX, augmentedImage.extentZ, 0f)

                    node.renderable = renderable
0 голосов
/ 22 января 2019

Я понял это, создав собственный куб (плоский куб) и добавив изображение в качестве текстуры.

fun renderImage(arFragment: ArFragment, anchor: Anchor) {
    Texture.builder().setSource(BitmapFactory.decodeResource(arFragment.resources, R.raw.sample_image))
            .build()
            .thenAccept {
                MaterialFactory.makeOpaqueWithTexture(arFragment.context, it)
                        .thenAccept { material ->
                            val modelRenderable = ShapeFactory.makeCube(
                                    Vector3(0.84f, 0.01f, 1.12f),
                                    Vector3(0.0f, 0.0f, 0.0f),
                                    material)
                            addNodeToScene(arFragment, anchor, modelRenderable)
                        }
            }
}

private fun addNodeToScene(fragment: ArFragment, anchor: Anchor, renderable: Renderable) {
    val node = Node()
    node.renderable = renderable
    val anchorNode = AnchorNode(anchor)
    anchorNode.addChild(node)

    fragment.arSceneView.scene.addChild(anchorNode)
    Toast.makeText(fragment.context, "Added", Toast.LENGTH_SHORT).show()
}
...