AndroidでAR を使って壁の塗り絵ができるアプリのコード

AR Coreを使用して壁の塗り絵ができるAndroidアプリのコードは、以下のようになります。

まず、AR Coreの依存関係を追加するために、app-levelのbuild.gradleファイルに以下の行を追加します。

implementation 'com.google.ar:core:1.20.0'

次に、MainActivity.javaファイルを作成し、以下のコードを追加します。

import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;

import androidx.appcompat.app.AppCompatActivity;

import com.google.ar.core.Anchor;
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.core.Trackable;
import com.google.ar.core.Trackable.TrackingState;
import com.google.ar.core.TrackingFailureReason;
import com.google.ar.core.TrackingStateReason;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.rendering.Color;
import com.google.ar.sceneform.rendering.ModelRenderable;
import com.google.ar.sceneform.rendering.Renderable;
import com.google.ar.sceneform.rendering.Texture;
import com.google.ar.sceneform.ux.ArFragment;
import com.google.ar.sceneform.ux.TransformableNode;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    private static final double MIN_OPENGL_VERSION = 3.0;

    private ArFragment arFragment;
    private ModelRenderable renderable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (!checkIsSupportedDeviceOrFinish(this)) {
            return;
        }

        setContentView(R.layout.activity_main);

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

        Texture.builder()
                .setSource(this, R.drawable.texture)
                .build()
                .thenAccept(texture -> {
                    MaterialFactory.makeOpaqueWithTexture(this, texture)
                            .thenAccept(material -> {
                                renderable = ShapeFactory.makeCube(new Vector3(0.3f, 0.3f, 0.01f), new Vector3(0f, 0.15f, 0f), material);
                            });
                });

        arFragment.setOnTapArPlaneListener((hitResult, plane, motionEvent) -> {
            if (renderable == null) {
                return;
            }

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

            TransformableNode transformableNode = new TransformableNode(arFragment.getTransformationSystem());
            transformableNode.setParent(anchorNode);
            transformableNode.setRenderable(renderable);
            transformableNode.select();
        });
    }

    public static boolean checkIsSupportedDeviceOrFinish(final Activity activity) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            Log.e(TAG, "Sceneform requires Android N or later");
            Toast.makeText(activity, "Sceneform requires Android N or later", Toast.LENGTH_LONG).show();
            activity.finish();
            return false;
        }
        String openGlVersionString =
                ((ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE))
                        .getDeviceConfigurationInfo()
                        .getGlEsVersion();
        if (Double.parseDouble(openGlVersionString) < MIN_OPENGL_VERSION) {
            Log.e(TAG, "Sceneform requires OpenGL ES 3.0 later");
            Toast.makeText(activity, "Sceneform requires OpenGL ES 3.0 or later", Toast.LENGTH_LONG)
                    .show();
            activity.finish();
            return false;
        }
        return true;
    }
}

そして、activity_main.xmlファイルを作成し、以下のコードを追加します。

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

これで、壁の塗り絵ができるARアプリのコードが完成しました。このコードでは、AR Coreを使用して平面を検出し、ユーザーがタップすると選択した3Dオブジェクトが配置されます。また、テクスチャとして使用する画像も指定しています。

ただし、このコードは完全なアプリではなく、追加の実装やリソースファイルが必要です。また、AR Coreが正しく動作するためには、対応デバイスとOpenGL ES 3.0以上のバージョンが必要です。

このコードをベースにして、さらに機能やデザインを追加して、あなたのアプリを完成させてください。もし質問や問題があれば、お気軽にお知らせください。

タイトルとURLをコピーしました