Estoy tratando de hacer algo como esto: https://www.youtube.com/watch?v=sX1aOBlwGWc 
Puedo renderizar una imagen en AR. Pero siempre se colocaba con la orientación equivocada. Lo que realmente quiero lograr es que una imagen se superponga sobre el póster, la imagen o el banner actual.
Este es mi código:
Mi configuración:
config.focusMode = Config.FocusMode.AUTO config.updateMode = Config.UpdateMode.LATEST_CAMERA_IMAGE config.planeFindingMode = Config.PlaneFindingMode.VERTICALMi código después de que se reconoce una imagen.
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() }el archivo 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>Encontré algunos tutoriales sobre cómo necesitas implementarlo en Unity. Pero no es así como quiero hacerlo. ¿Puede alguien ayudarme a resolver esto?
Lo que obtuve en este punto:
Lo descubrí creando mi propio cubo (cubo plano) y agregando la imagen como textura.
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() }Debería poder cambiar la orientación de la imagen/vista/objeto representado usando setLocalRotation.
Por ejemplo, en mi proyecto, he usado el siguiente código, que hace que la imagen renderizada mire directamente hacia afuera desde la imagen detectada.
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);AnchorNode sigue la pose de AugmentedImage y, por lo tanto, no puede cambiar localRotation o localPosition en este nodo. De AnchorNode.setLocalRotation : "Establezca la rotación del espacio local de este nodo si no está anclado".
Puede cambiar la transformación local introduciendo un Nodo intermedio:
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