ArcoreとSceneformを使用してAndroid StudioであなたのHelloarアプリを開発する
14305 ワード
ARは、毎日メタバース傾向の増加している関心でアクセスできるようになります.伝統的な相互作用をよりデジタル化しつつある.
拡張現実感は、“現実世界のユーザーのビューにコンピュータ生成されたイメージを重ねる技術”です.本質的に、ARは私たちがコンピュータ生成された3 Dモデルを現実の世界にレンダリングするのを可能にするテクノロジーです、そして、それはその周囲と対話します.
ArcoreはAndroidのAR体験を構築するためのプラットフォームです.それはあなたの携帯電話は、その環境を感知し、世界を理解し、情報と対話することができます.
Arcoreは3つの原則に従います.
モーショントラッキング:それは携帯電話は、現在の位置を現実の世界に相対的に理解することができます.
環境理解:それは、電話を垂直方向と水平方向のすべてのタイプのサイズと場所を検出することができます.
光推定:それは電話が環境の照明条件を感知することができます.
SceneFormは開発者がOpenGLを学ぶことなく、AndroidのARアプリを構築できるようにするGoogle公式AR SDKです.
SceneFormには次のような機能があります.
ARCORE対応電話の自動互換性チェック.
カメラ許可のチェック.
3 D資産を操作するためのプラグイン.
すべての複雑さを抽象化するシーングラフAPI.
最初にプロジェクトでarcoreを有効にする必要があります.Android StudioとSceneForm SDKを使用するので、これは簡単です.自動的に実行する2つの主要な操作スタイルがあります.
Acoreの可用性のチェック
カメラの許可を求める
新しいAndroid Studioプロジェクトを作成し、空のアクティビティを選択します.
次の依存関係をプロジェクトレベルのビルドに追加します.Gradleファイル:
今、我々は最初のarcoreアプリケーションを作成することから始めることができます.
まず、デザインレイアウトにSceneFormフラグメントを追加する必要があります.これは3 Dモデルをレンダリングするためのコンテナです.それはカメラの具体化と承認の世話を扱っています.
アクティビティーArフラグメントをActivityCainメインに追加します.XML
互換性チェックのために以下のメソッドをクラスに追加します.
今、我々はダウンロードすることができますし、我々のアプリケーションに3 Dモデルをインポートします.この場合、我々は我々の部屋の角で3 D立方体を描いていて、それを動かしています.
あなたはTurboquid、CGtrader、Free 3 Dのような任意のオンライン3 Dモデルのリポジトリから3 Dモデルをダウンロードすることができます.また、あなたのアプリケーションのために3 Dモデルをダウンロードするために、優れたリポジトリPolyを提供しました.あなたはモデルをダウンロードできます.FBX、.OBJまたは.GLTFフォーマット.我々は、それをしています...fbx形式.
Android Studioプロジェクトでプロジェクトビューを開き、アプリケーションフォルダーを展開します.アプリケーションフォルダ内の「SampleData」というフォルダを作成します.次に、このSampleDataフォルダーの中にダウンロードしたモデルファイルを追加する必要があります.SceneFormプラグインを使用して3 Dモデルファイルをアプリケーションにインポートします.
あなたのアプリケーションのビルドでARプラグインを設定する必要があります.Gradleファイル.
次の依存関係を追加します.
次のコードをJavaファイルに追加します.
ARフラグメントはシーンのコンテナーですので、クリックするたびにフラグメントにモデルを追加する必要があります.したがって、我々は我々の断片にontaplistenerを加えます.
HitResultを使用して、場所をタップして、シーンのルートノードであるアンカーノードを作成できます.
次に、我々はギアであるtransformablenodeを作成して、それをアンカーノードにセットします.変換可能なノードは、ユーザーがズームするオブジェクトまたはピンチをドラッグすると、サイズおよび位置の変更に反応することができます.
ここでいくつかの用語を見てみましょう.
シーン:我々の3 D世界がレンダリングされる場所です.
Hitresult:それは無限から来ている架空の光線であり、現実世界との交差点の最初のポイントは、タップのポイントです.
アンカー:現実世界の固定位置.ローカル座標を実世界座標に変換するために使用します.
TransformableNode :翻訳、回転、スケール、ドラッグなどのユーザインタラクションに反応できるノード.
最後に、メインアクティビティ.Javaファイルは次のようになります.
最初に、SupportFragmentManagerを使用して、レイアウトファイルからそのIDでARフラグメントを取得する必要があります. 私たちはモデルをシーンにロードする必要があります.このため、SceneForm SDKによって提供されているModelRenderableクラスを使用します.生成された名前を渡すことでモデルをロードします.setsource ()メソッドの引数としてのsfbファイル. モデルはバックグラウンドスレッド上に構築されています.その後、メインスレッドを使用してシーンでレンダリングします. Tenacceptメソッドの内部にモデルを受け取ります.モデルを構築する際にエラーが発生した場合に例外がスローされます. 現在、私たちはanchornodeとtransformablenodeを作成します.また、setRenderable ()の中でレンダリング可能なオブジェクトを参照してください.最後に、AnchorNodeをTransformableNodeの親として設定し、アンカーノードをシーンに追加します. あそこにある.Android Studioの独自のARアプリ:)
この記事を読んでくれてありがとう.
あなたがこの記事を楽しむならば、Clapボタンをクリックしてください👏 他の人がそれを見つけるのを助けるために共有!
このチュートリアルのプロジェクトの完全なコードは
codemaker2015/ar-object-augmentation-android-studio
もともとメディアに投稿-
Develop your HelloAR app in Android studio using ARCore and Sceneform
拡張現実とは
拡張現実感は、“現実世界のユーザーのビューにコンピュータ生成されたイメージを重ねる技術”です.本質的に、ARは私たちがコンピュータ生成された3 Dモデルを現実の世界にレンダリングするのを可能にするテクノロジーです、そして、それはその周囲と対話します.
アーコアとは
ArcoreはAndroidのAR体験を構築するためのプラットフォームです.それはあなたの携帯電話は、その環境を感知し、世界を理解し、情報と対話することができます.
Arcoreは3つの原則に従います.
モーショントラッキング:それは携帯電話は、現在の位置を現実の世界に相対的に理解することができます.
環境理解:それは、電話を垂直方向と水平方向のすべてのタイプのサイズと場所を検出することができます.
光推定:それは電話が環境の照明条件を感知することができます.
風景形
SceneFormは開発者がOpenGLを学ぶことなく、AndroidのARアプリを構築できるようにするGoogle公式AR SDKです.
SceneFormには次のような機能があります.
ARCORE対応電話の自動互換性チェック.
カメラ許可のチェック.
3 D資産を操作するためのプラグイン.
すべての複雑さを抽象化するシーングラフAPI.
始める
最初にプロジェクトでarcoreを有効にする必要があります.Android StudioとSceneForm SDKを使用するので、これは簡単です.自動的に実行する2つの主要な操作スタイルがあります.
Acoreの可用性のチェック
カメラの許可を求める
新しいAndroid Studioプロジェクトを作成し、空のアクティビティを選択します.
依存性の追加
次の依存関係をプロジェクトレベルのビルドに追加します.Gradleファイル:
dependencies {
...
classpath 'com.google.ar.sceneform:plugin:1.17.1'
}
次の依存関係をアプリケーションレベルのビルドに追加します.Gradleファイル:dependencies {
...
implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.17.1'
implementation 'com.google.ar:core:1.27.0'
}
AndroidManifestに次の行を追加します.XMLファイル:<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>
<application
...>
...
<meta-data
android:name="com.google.ar.core"
android:value="required" />
</application>
その後、gradleファイルを使用してプロジェクトを同期し、ビルドを完了するのを待つ(同期アイコンをクリック).SceneForm SDKをプロジェクトとSceneFormプラグインにAndroidStudioにインストールします.今、我々は最初のarcoreアプリケーションを作成することから始めることができます.
まず、デザインレイアウトにSceneFormフラグメントを追加する必要があります.これは3 Dモデルをレンダリングするためのコンテナです.それはカメラの具体化と承認の世話を扱っています.
アクティビティーArフラグメントをActivityCainメインに追加します.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<fragment
android:id="@+id/ux_fragment"
android:name="com.google.ar.sceneform.ux.ArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
実行時互換性チェック
互換性チェックのために以下のメソッドをクラスに追加します.
private 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;
}
アプリケーションへの3 Dモデルの追加
今、我々はダウンロードすることができますし、我々のアプリケーションに3 Dモデルをインポートします.この場合、我々は我々の部屋の角で3 D立方体を描いていて、それを動かしています.
あなたはTurboquid、CGtrader、Free 3 Dのような任意のオンライン3 Dモデルのリポジトリから3 Dモデルをダウンロードすることができます.また、あなたのアプリケーションのために3 Dモデルをダウンロードするために、優れたリポジトリPolyを提供しました.あなたはモデルをダウンロードできます.FBX、.OBJまたは.GLTFフォーマット.我々は、それをしています...fbx形式.
Android Studioプロジェクトでプロジェクトビューを開き、アプリケーションフォルダーを展開します.アプリケーションフォルダ内の「SampleData」というフォルダを作成します.次に、このSampleDataフォルダーの中にダウンロードしたモデルファイルを追加する必要があります.SceneFormプラグインを使用して3 Dモデルファイルをアプリケーションにインポートします.
SceneFormプラグインを使用したモデルのインポート
あなたのアプリケーションのビルドでARプラグインを設定する必要があります.Gradleファイル.
次の依存関係を追加します.
apply plugin: 'com.google.ar.sceneform.plugin'
アプリケーションのビルドの末尾に次の行を追加します.Gradleファイル:sceneform.asset('sampledata/cube.obj',
'default',
'sampledata/cube.sfa',
'src/main/res/raw/cube')
最後にビルドします.アプリのGradleは次のようになります.apply plugin: 'com.android.application'
apply plugin: 'com.google.ar.sceneform.plugin'
android {
compileSdkVersion 31
defaultConfig {
applicationId "com.example.arcorefirst"
minSdkVersion 24
targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.17.1'
implementation 'com.google.ar:core:1.27.0'
}
sceneform.asset('sampledata/cube.obj',
'default',
'sampledata/cube.sfa',
'src/main/res/raw/cube')
モデルの統合
次のコードをJavaファイルに追加します.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!checkIsSupportedDeviceOrFinish(this))
return;
setContentView(R.layout.activity_main);
arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
arFragment.setOnTapArPlaneListener(
(HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
if (plane.getType() != Plane.Type.HORIZONTAL_UPWARD_FACING)
return;
Anchor anchor = hitresult.createAnchor();
placeObject(arFragment, anchor, R.raw.cube);
}
);
}
ARシーンへのモデルの追加
ARフラグメントはシーンのコンテナーですので、クリックするたびにフラグメントにモデルを追加する必要があります.したがって、我々は我々の断片にontaplistenerを加えます.
private void placeObject(ArFragment arFragment, Anchor anchor, int uri) {
ModelRenderable.builder()
.setSource(arFragment.getContext(), uri)
.build()
.thenAccept(modelRenderable -> addNodeToScene(arFragment, anchor, modelRenderable))
.exceptionally(throwable -> {
Toast.makeText(arFragment.getContext(), "Error:" + throwable.getMessage(), Toast.LENGTH_LONG).show();
return null;
}
);
}
private void addNodeToScene(ArFragment arFragment, Anchor anchor, Renderable renderable) {
AnchorNode anchorNode = new AnchorNode(anchor);
TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
node.setRenderable(renderable);
node.setParent(anchorNode);
arFragment.getArSceneView().getScene().addChild(anchorNode);
node.select();
}
コードを理解しましょうHitResultを使用して、場所をタップして、シーンのルートノードであるアンカーノードを作成できます.
次に、我々はギアであるtransformablenodeを作成して、それをアンカーノードにセットします.変換可能なノードは、ユーザーがズームするオブジェクトまたはピンチをドラッグすると、サイズおよび位置の変更に反応することができます.
ここでいくつかの用語を見てみましょう.
シーン:我々の3 D世界がレンダリングされる場所です.
Hitresult:それは無限から来ている架空の光線であり、現実世界との交差点の最初のポイントは、タップのポイントです.
アンカー:現実世界の固定位置.ローカル座標を実世界座標に変換するために使用します.
TransformableNode :翻訳、回転、スケール、ドラッグなどのユーザインタラクションに反応できるノード.
最後に、メインアクティビティ.Javaファイルは次のようになります.
package com.example.arcorefirst;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.Toast;
import com.google.ar.core.Anchor;
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.rendering.Renderable;
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;
ArFragment arFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!checkIsSupportedDeviceOrFinish(this))
return;
setContentView(R.layout.activity_main);
arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
arFragment.setOnTapArPlaneListener(
(HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
if (plane.getType() != Plane.Type.HORIZONTAL_UPWARD_FACING)
return;
Anchor anchor = hitresult.createAnchor();
placeObject(arFragment, anchor, R.raw.cube);
}
);
}
private void placeObject(ArFragment arFragment, Anchor anchor, int uri) {
ModelRenderable.builder()
.setSource(arFragment.getContext(), uri)
.build()
.thenAccept(modelRenderable -> addNodeToScene(arFragment, anchor, modelRenderable))
.exceptionally(throwable -> {
Toast.makeText(arFragment.getContext(), "Error:" + throwable.getMessage(), Toast.LENGTH_LONG).show();
return null;
}
);
}
private void addNodeToScene(ArFragment arFragment, Anchor anchor, Renderable renderable) {
AnchorNode anchorNode = new AnchorNode(anchor);
TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
node.setRenderable(renderable);
node.setParent(anchorNode);
arFragment.getArSceneView().getScene().addChild(anchorNode);
node.select();
}
private 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;
}
}
ここで起こっていることを見ましょう.この記事を読んでくれてありがとう.
あなたがこの記事を楽しむならば、Clapボタンをクリックしてください👏 他の人がそれを見つけるのを助けるために共有!
このチュートリアルのプロジェクトの完全なコードは
codemaker2015/ar-object-augmentation-android-studio
もともとメディアに投稿-
Develop your HelloAR app in Android studio using ARCore and Sceneform
Reference
この問題について(ArcoreとSceneformを使用してAndroid StudioであなたのHelloarアプリを開発する), 我々は、より多くの情報をここで見つけました https://dev.to/codemaker2015/develop-your-helloar-app-in-android-studio-using-arcore-and-sceneform-11ldテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol