Introducción

La realidad aumentada (AR) es una tecnología que superpone información digital sobre el mundo real. ARCore es la plataforma de Google para crear experiencias de realidad aumentada en dispositivos Android. En este módulo, aprenderás a integrar ARCore en tu aplicación Android y a crear experiencias de AR básicas.

Requisitos previos

Antes de comenzar, asegúrate de tener:

  • Android Studio instalado y configurado.
  • Un dispositivo Android compatible con ARCore o un emulador configurado para AR.
  • Conocimientos básicos de desarrollo de Android.

Configuración del entorno

Paso 1: Agregar dependencias de ARCore

  1. Abre tu proyecto en Android Studio.
  2. Abre el archivo build.gradle de tu módulo (generalmente app/build.gradle).
  3. Agrega las siguientes dependencias:
dependencies {
    implementation 'com.google.ar:core:1.23.0'
    implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.17.1'
}
  1. Sincroniza tu proyecto con Gradle.

Paso 2: Configurar permisos y características

  1. Abre el archivo AndroidManifest.xml.
  2. Agrega los siguientes permisos y características:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"/>
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"/>

Creando una experiencia AR básica

Paso 1: Crear una actividad AR

  1. Crea una nueva actividad llamada ARActivity.
  2. En el archivo ARActivity.java, configura la actividad para usar ARCore y Sceneform:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.ar.core.ArCoreApk;
import com.google.ar.sceneform.ux.ArFragment;

public class ARActivity extends AppCompatActivity {
    private ArFragment arFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ar);

        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
    }
}

Paso 2: Configurar el diseño de la actividad

  1. Crea un nuevo archivo de diseño XML llamado activity_ar.xml.
  2. Agrega el siguiente contenido:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/ux_fragment"
        android:name="com.google.ar.sceneform.ux.ArFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

Paso 3: Agregar un objeto 3D

  1. Descarga un modelo 3D en formato .sfb y colócalo en la carpeta assets.
  2. En ARActivity.java, agrega el siguiente código para colocar el objeto 3D en la escena:
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.rendering.ModelRenderable;
import com.google.ar.sceneform.ux.TransformableNode;

public class ARActivity extends AppCompatActivity {
    private ArFragment arFragment;
    private ModelRenderable modelRenderable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ar);

        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);

        ModelRenderable.builder()
            .setSource(this, Uri.parse("model.sfb"))
            .build()
            .thenAccept(renderable -> modelRenderable = renderable)
            .exceptionally(
                throwable -> {
                    Toast.makeText(this, "Unable to load model", Toast.LENGTH_SHORT).show();
                    return null;
                });

        arFragment.setOnTapArPlaneListener(
            (HitResult hitResult, Plane plane, MotionEvent motionEvent) -> {
                if (modelRenderable == null) {
                    return;
                }

                Anchor anchor = hitResult.createAnchor();
                AnchorNode anchorNode = new AnchorNode(anchor);
                anchorNode.setParent(arFragment.getArSceneView().getScene());

                TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
                node.setParent(anchorNode);
                node.setRenderable(modelRenderable);
                node.select();
            });
    }
}

Ejercicio práctico

Ejercicio 1: Agregar interacción con el objeto 3D

Objetivo: Permitir que el usuario interactúe con el objeto 3D, por ejemplo, cambiando su color al tocarlo.

Instrucciones:

  1. Modifica el código en ARActivity.java para detectar toques en el objeto 3D.
  2. Cambia el color del objeto cuando el usuario lo toque.

Solución:

import com.google.ar.sceneform.Node;
import com.google.ar.sceneform.rendering.Color;
import com.google.ar.sceneform.rendering.MaterialFactory;

public class ARActivity extends AppCompatActivity {
    private ArFragment arFragment;
    private ModelRenderable modelRenderable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ar);

        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);

        ModelRenderable.builder()
            .setSource(this, Uri.parse("model.sfb"))
            .build()
            .thenAccept(renderable -> modelRenderable = renderable)
            .exceptionally(
                throwable -> {
                    Toast.makeText(this, "Unable to load model", Toast.LENGTH_SHORT).show();
                    return null;
                });

        arFragment.setOnTapArPlaneListener(
            (HitResult hitResult, Plane plane, MotionEvent motionEvent) -> {
                if (modelRenderable == null) {
                    return;
                }

                Anchor anchor = hitResult.createAnchor();
                AnchorNode anchorNode = new AnchorNode(anchor);
                anchorNode.setParent(arFragment.getArSceneView().getScene());

                TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
                node.setParent(anchorNode);
                node.setRenderable(modelRenderable);
                node.select();

                node.setOnTapListener((hitTestResult, motionEvent1) -> {
                    MaterialFactory.makeOpaqueWithColor(this, new Color(android.graphics.Color.RED))
                        .thenAccept(material -> modelRenderable.setMaterial(material));
                });
            });
    }
}

Conclusión

En este módulo, has aprendido a configurar ARCore en tu proyecto Android, crear una actividad AR, y agregar un objeto 3D interactivo. La realidad aumentada ofrece muchas posibilidades para crear aplicaciones innovadoras y atractivas. Continúa explorando las capacidades de ARCore para llevar tus aplicaciones al siguiente nivel.

En el próximo módulo, exploraremos cómo implementar compras dentro de la aplicación para monetizar tus aplicaciones de Android.

© Copyright 2024. Todos los derechos reservados