Google ARCore를 사용하여 증강 현실 Android 앱 빌드

작가: Laura McKinney
창조 날짜: 7 4 월 2021
업데이트 날짜: 1 칠월 2024
Anonim
Android에서 증강 현실 앱 만들기 | 앱 개발 튜토리얼 | 안드로이드 스튜디오
동영상: Android에서 증강 현실 앱 만들기 | 앱 개발 튜토리얼 | 안드로이드 스튜디오

콘텐츠


Sceneform 플러그인을 사용하여 3D 모델 가져 오기

일반적으로 3D 모델 작업에는 전문가의 지식이 필요하지만 Sceneform 플러그인이 출시되면서 Google은 Java를 사용하여 3D 모델을 렌더링 할 수있게했습니다. 없이 OpenGL을 배워야합니다.

Sceneform 플러그인은 표준 Android 위젯, 모양 또는 재질 또는 3D 자산 (예 : .OBJ 또는 .FBX 파일)에서 렌더러 블을 생성하는 데 사용할 수있는 고급 API를 제공합니다.

이 프로젝트에서는 Sceneform 플러그인을 사용하여 .OBJ 파일을 Android Studio로 가져옵니다. Sceneform을 사용하여 파일을 가져올 때마다이 플러그인은 자동으로 다음을 수행합니다.

  • 자산 파일을 .sfb 파일로 변환하십시오. 이것은 APK에 추가 된 다음 런타임에로드되는 런타임에 최적화 된 장면 형식 이진 형식 (.sfb)입니다. 이 .sfb 파일을 사용하여 메쉬, 재질 및 텍스처로 구성되고 증강 장면 내 어느 곳에 나 배치 할 수있는 렌더러 블을 만듭니다.
  • .sfa 파일을 생성하십시오. 이 파일은 자산 설명 파일로, 사람이 읽을 수있는 .sfb 파일 설명이 포함 된 텍스트 파일입니다. 모델에 따라 .sfa 파일 내부의 텍스트를 편집하여 모양을 변경할 수 있습니다.

작성시 Sceneform 플러그인은 아직 베타 버전이므로이 플러그인을 사용할 때 버그, 오류 또는 기타 이상한 동작이 발생할 수 있습니다.

Sceneform 플러그인 설치

Sceneform 플러그인에는 Android Studio 3.1 이상이 필요합니다. 사용중인 Android Studio 버전이 확실하지 않으면 툴바에서 'Android Studio> Android Studio 정보'를 선택하십시오. 다음 팝업에는 버전 번호를 포함하여 Android Studio 설치에 대한 몇 가지 기본 정보가 포함되어 있습니다.


Sceneform 플러그인을 설치하려면

  • Mac을 사용하는 경우 Android Studio 툴바에서 "Android Studio> 환경 설정 ..."을 선택한 다음 왼쪽 메뉴에서 "플러그인"을 선택하십시오. Windows PC를 사용하는 경우 "파일> 설정> 플러그인> 리포지토리 찾아보기"를 선택하십시오.
  • "Sceneform"을 검색하십시오. "Google Sceneform Tools"가 나타나면 "Install"을 선택하십시오.
  • 메시지가 표시되면 Android Studio를 다시 시작하면 플러그인을 사용할 수 있습니다.

Sceneform UX 및 Java 8 : 프로젝트 종속성 업데이트

이 프로젝트 전체에서 사용할 종속성을 추가하여 시작하겠습니다. 모듈 수준 build.gradle 파일을 열고 레이아웃에서 사용할 ArFragment가 포함 된 Sceneform UX 라이브러리를 추가하십시오.

종속성 {구현 fileTree (dir : libs 포함 :) 구현 androidx.appcompat : appcompat : 1.0.2 구현 androidx.constraintlayout : constraintlayout : 1.1.3 testImplementation junit : junit : 4.12 androidTestImplementation androidx.test.ext : junit : 1.1.0 androidTestImplementation androidx.test.espresso : espresso-core : 3.1.1 // Sceneform UX는 ArFragment // 구현 "com.google.ar.sceneform.ux : sceneform-ux : 1.7.0"구현 "com. android.support:appcompat-v7:28.0.0 "}

Sceneform은 Java 8의 언어 구성을 사용하므로 프로젝트의 소스 호환성 및 대상 호환성을 Java 8로 업데이트해야합니다.


compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}

마지막으로 Sceneform 플러그인을 적용해야합니다.

플러그인 적용 : com.google.ar.sceneform.plugin

완성 된 build.gradle 파일은 다음과 같아야합니다.

플러그인 적용 : com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.arcoredemo"minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"} compileOptions {sourceCompatatibility JavaVersion.VERSION_1_VERSION_1 JavaVersion.VERSION_1_8} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} 종속성 {구현 fileTree (dir : libs, include :) 구현 androidx.appcompat : appcompat : 1.0 .2 구현 androidx.constraintlayout : constraintlayout : 1.1.3 testImplementation junit : junit : 4.12 androidTestImplementation androidx.test.ext : junit : 1.1.0 androidTestImplementation androidx.test.espresso : espresso-core : 3.1.1 구현 "com.google. ar.sceneform.ux : sceneform-ux : 1.7.0 "구현"com.android.support:appcompat-v7:28.0.0 "} 플러그인 적용 : com.google.ar .sceneform.plugin

ArFragment로 권한 요청

애플리케이션은 기기의 카메라를 사용하여 주변 환경을 분석하고 실제 세계에서 3D 모델을 배치합니다. 응용 프로그램이 카메라에 액세스하려면 카메라 권한이 필요하므로 프로젝트의 매니페스트를 열고 다음을 추가하십시오.

Android 6.0은 사용자에게 권한별로 권한을 부여, 거부 및 취소 할 수있는 기능을 제공했습니다. 이로 인해 사용자 환경이 개선되었지만 이제 Android 개발자는 런타임시 수동으로 권한을 요청하고 사용자의 응답을 처리해야합니다. 좋은 소식은 Google ARCore를 작업 할 때 카메라 권한을 요청하고 사용자의 응답을 처리하는 프로세스가 구현된다는 것입니다. 자동적으로.

ArFragment 구성 요소는 AR 세션을 만들기 전에 앱에 카메라 권한이 있는지 자동으로 확인한 다음 필요한 경우 요청합니다. 앱에서 ArFragment를 사용하므로 카메라 권한을 요청하기 위해 코드를 작성할 필요가 없습니다.

AR 필수 또는 선택?

AR 기능을 사용하는 두 가지 유형의 애플리케이션이 있습니다.

1. AR 필요

우수한 사용자 경험을 제공하기 위해 애플리케이션이 Google ARCore에 의존하는 경우 ARCore를 지원하는 기기로만 다운로드되도록해야합니다. 앱을 'AR Required'로 표시하면 기기가 ARCore를 지원하는 경우 Google Play 스토어에만 표시됩니다.

우리의 응용 프로그램 이후 않습니다 ARCore가 필요하면 Manifest를 열고 다음을 추가하십시오.

이론적으로 ARCore를 지원하지만 실제로 ARCore가 설치되지 않은 장치로 응용 프로그램을 다운로드 할 수도 있습니다. 앱을 'AR 필수'로 표시하면 Google Play에서 대상 기기에 ARCore가없는 경우 앱과 함께 ARCore를 자동으로 다운로드하여 설치합니다.

앱이 android : required =”true”인 경우에도 아직도 앱을 다운로드 한 후 사용자가 ARCore를 제거했거나 ARCore 버전이 오래되었을 수 있으므로 런타임에 ARCore가 있는지 확인해야합니다.

좋은 소식은 ARFragment를 사용한다는 것입니다. ArFragment는 ARCore가 설치되기 전에 ARCore가 설치되어 있고 최신 상태인지 자동으로 확인합니다. 마다 AR 세션 – 다시 한 번, 수동으로 구현할 필요가 없습니다.

2. AR 선택

앱에 사용하기는 쉽지만 핵심 기능을 제공하는 데 필수적이지 않은 AR 기능이 포함 된 경우이 애플리케이션을 "AR 선택 사항"으로 표시 할 수 있습니다. 그런 다음 앱에서 런타임에 Google ARCore가 있는지 확인하고 해당 기능을 비활성화 할 수 있습니다 ARCore를 지원하지 않는 장치의 AR 기능.

“AR Optional”앱을 만들면 ARCore는 아니 장치에 ARCore를 지원하는 데 필요한 모든 하드웨어 및 소프트웨어가 있어도 응용 프로그램과 함께 자동으로 설치됩니다. 그런 다음 "AR Optional"앱은 ARCore의 존재 여부와 최신 상태를 확인하고 필요할 때 최신 버전을 다운로드해야합니다.

ARCore가 앱에 중요하지 않은 경우 매니페스트에 다음을 추가 할 수 있습니다.

Manifest가 열려있는 동안 MainActivity가 방향 변경을 정상적으로 처리하도록 android : configChanges 및 android : screenOrientation도 추가합니다.

이 모든 것을 매니페스트에 추가 한 후 완성 된 파일은 다음과 같아야합니다.

레이아웃에 ArFragment 추가

ARCore의 ArFragment는 각 AR 세션이 시작될 때 여러 주요 ARCore 작업을 자동으로 처리하므로 ARCore의 ArFragment를 사용할 것입니다. 특히 ArFragment는 호환 가능한 ARCore 버전이 장치에 설치되어 있고 앱에 현재 카메라 권한이 있는지 확인합니다.

ArFragment가 기기가 앱의 AR 기능을 지원할 수 있음을 확인하면 ArSceneView ARCore 세션이 생성되고 앱의 AR 경험이 준비됩니다!

일반 Android Fragment와 마찬가지로 ArFragment Fragment를 레이아웃 파일에 추가 할 수 있으므로 activity_main.xml 파일을 열고 "com.google.ar.sceneform.ux.ArFragment"구성 요소를 추가하십시오.

Google의 Poly를 사용하여 3D 모델 다운로드

렌더러 블을 만드는 방법에는 여러 가지가 있지만이 기사에서는 3D 자산 파일을 사용합니다.

Sceneform은 애니메이션 유무에 관계없이 .OBJ, .glTF 및 .FBX 형식의 3D 에셋을 지원합니다. 지원되는 형식 중 하나로 3D 모델을 얻을 수있는 곳이 많이 있지만이 자습서에서는 Google의 Poly 저장소에서 다운로드 한 .OBJ 파일을 사용합니다.

Poly 웹 사이트로 이동하여 사용하려는 에셋을 .OBJ 형식으로 다운로드하십시오 (이 T-Rex 모델을 사용하고 있습니다).

  • 모델의 소스 자산 파일 (.OBJ, .FBX 또는 .glTF)이 포함 된 폴더의 압축을 풉니 다. 모델에 따라이 폴더에는 .mtl, .bin, .png 또는 .jpeg 형식의 파일과 같은 일부 모델 종속성이 포함될 수도 있습니다.

3D 모델을 Android Studio로 가져 오기

애셋이 있으면 Sceneform 플러그인을 사용하여 자산을 Android Studio로 가져와야합니다. 이것은 다음을 수행해야하는 다단계 프로세스입니다.

  • "sampledata"폴더를 만듭니다. Sampledata는 APK에 포함되지 않지만 Android Studio 편집기에서 사용할 수있는 디자인 타임 샘플 데이터를위한 새로운 폴더 유형입니다.
  • 원본 .OBJ 자산 파일을 "sampledata"폴더로 끌어다 놓습니다.
  • .OBJ 파일에서 Sceneform 가져 오기 및 변환을 수행하면 .sfa 및 .sfb 파일이 생성됩니다.

더 간단 해 보일 수 있지만 하지마 .OBJ 파일을 프로젝트의 "res"디렉토리에 직접 끌어다 놓으면 모델이 불필요하게 APK에 포함됩니다.

Android Studio 프로젝트에는 기본적으로 "sampledata"폴더가 포함되어 있지 않으므로 수동으로 폴더를 만들어야합니다.

  • 프로젝트의 "앱"폴더를 Control- 클릭하십시오.
  • "New> Sample Data Directory"를 선택하고 "sampledata"라는 폴더를 만듭니다.
  • 앞서 다운로드 한 3D 모델 파일로 이동하십시오. 소스 자산 파일 (.OBJ, .FBX 또는 .glTF)을 찾은 다음 "sampledata"디렉토리로 끌어다 놓습니다.
  • 모델에 .mtl, .bin, .png 또는 .jpeg 형식의 파일과 같은 종속성이 있는지 확인하십시오. 이러한 파일이 있으면 "sampledata"폴더로 끌어다 놓으십시오.
  • Android Studio에서 3D 모델 소스 파일 (.OBJ, .FBX 또는 .glTF)을 Control- 클릭 한 다음“장면 가져 오기 자산”을 선택하십시오.

  • 다음 창에는 결과 .sfa 파일이 프로젝트에 저장 될 위치를 포함하여 Sceneform에서 생성 할 파일에 대한 일부 정보가 표시됩니다. “원시”디렉토리를 사용하겠습니다.
  • 입력 한 정보가 마음에 들면 "마침"을 클릭하십시오.

이 가져 오기는 프로젝트를 약간 변경합니다. build.gradle 파일을 열면 Sceneform 플러그인이 프로젝트 종속성으로 추가 된 것을 볼 수 있습니다.

종속성 {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform : plugin : 1.7.0 // 참고 : 애플리케이션 종속성을 여기에 두지 마십시오. 그것들은 개별 모듈 build.gradle 파일에 // 속한다}}

모듈 수준 build.gradle 파일을 열면 가져온 3D 모델에 대한 새로운 sceneform.asset () 항목이 있습니다.

플러그인 적용 : com.google.ar.sceneform.plugin // import // sceneform.asset (sampledata / dinosaur.obj, // 가져 오는 동안 지정한“Material Path”// Default에서 지정한“소스 자산 경로” , // import // sampledata / dinosaur.sfa 중에 지정한“.sfa 출력 경로”, // import // src / main / assets / dinosaur 중에 지정한“.sfb 출력 경로”

"sampledata"및 "raw"폴더를 보면 각각 새로운 .sfa 및 .sfb 파일이 포함되어 있음을 알 수 있습니다.

Android Studio의 새로운 Sceneform Viewer에서 .sfa 파일을 미리 볼 수 있습니다.

  • Android Studio 메뉴 표시 줄에서 "보기> 도구 창> 뷰어"를 선택하십시오.
  • 왼쪽 메뉴에서 .sfa 파일을 선택하십시오. 이제 3D 모델이 뷰어 창에 나타납니다.

3D 모델 표시

다음 작업은 주변 환경을 이해하고 사용자가 증강 장면에 3D 모델을 배치 할 수있는 AR 세션을 만드는 것입니다.

이를 위해서는 다음을 수행해야합니다.

1. ArFragment 멤버 변수 생성

ArFragment는 AR 세션 생성과 관련된 많은 노력을 수행하므로 MainActivity 클래스 전체에서이 조각을 참조합니다.

다음 스 니펫에서는 ArFragment에 대한 멤버 변수를 만든 다음 onCreate () 메서드에서 초기화합니다.

개인 ArFragment arCoreFragment; @Override protected void onCreate (번들 저장 인스턴스 상태) {super.onCreate (savedInstanceState); ... ... ...} setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // 프래그먼트 관리자를 사용하여 프래그먼트를 찾습니다 // getSupportFragmentManager (). findFragmentById (R.id.main_fragment);

2. ModelRenderable 빌드

이제 .sfb 파일을 ModelRenderable로 변환하여 3D 객체를 렌더링합니다.

여기에서는 프로젝트의 res / raw / dinosaur .sfb 파일에서 ModelRenderable을 만듭니다.

개인 ModelRenderable dinoRenderable; ... ... ... ModelRenderable.builder () .setSource (this, R.raw.dinosaur) .build () .thenAccept (renderable-> dinoRenderable = renderable) .exceptionally (throwable-> {Log.e ( TAG, "렌더러 블을로드 할 수 없습니다"); null 반환;}); }

3. 사용자 입력에 응답

ArFragment는 탭, 드래그, 핀치 및 트위스트 제스처를 기본적으로 지원합니다.

앱에서 사용자는 해당 평면을 탭하여 ARCore 평면에 3D 모델을 추가합니다.

이 기능을 제공하려면 비행기를 탭할 때마다 호출되는 콜백을 등록해야합니다.

arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, 평면, MotionEvent motionEvent)-> {if (dinoRenderable == null) {return;}

4. 모델 고정

이 단계에서는 ArSceneView를 검색하여 AnchorNode에 연결하여 Scene의 부모 노드 역할을합니다.

ArSceneView는 장치의 카메라 이미지 렌더링, AR 경험을 시작하기 위해 사용자가 장치를 잡고 이동하는 방법을 보여주는 Sceneform UX 애니메이션 표시를 포함하여 몇 가지 중요한 ARCore 작업을 수행합니다. ArSceneView는 또한 탐지 한 모든 평면을 강조 표시하여 사용자가 3D 모델을 장면 내에 배치 할 수 있습니다.

ARSceneView 컴포넌트에는 씬이 첨부되어 있는데, 이는 렌더링해야하는 모든 노드를 포함하는 상위-하위 데이터 구조입니다.

우리는 ArSceneView의 부모 노드 역할을 할 AnchorNode 유형의 노드를 만드는 것으로 시작하겠습니다.

모든 앵커 노드는 동일한 실제 위치를 유지하므로 앵커 노드를 생성하여 3D 모델이 증강 장면 내에서 고정 된 상태로 유지되도록합니다.

앵커 노드를 만들어 봅시다 :

AnchorNode anchorNode = 새로운 AnchorNode (앵커);

그런 다음 getArSceneView ()를 사용하여 ArSceneView를 검색하여 AnchorNode에 연결할 수 있습니다.

anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ());

5. 이동, 스케일링 및 회전에 대한 지원 추가

다음으로 TransformableNode 유형의 노드를 작성하겠습니다. TransformableNode는 사용자 제스처를 기반으로 노드 이동, 스케일링 및 회전을 담당합니다.

TransformableNode를 만든 후에는 Renderable에 렌더러 블을 부착하면 사용자 상호 작용을 기반으로 모델의 스케일 및 이동 기능을 제공 할 수 있습니다. 마지막으로, TransformableNode를 보장하는 자식-부모 관계에서 TransformableNode를 AnchorNode에 연결해야합니다. 증강 장면 내에서 렌더러 블은 고정되어 있습니다.

TransformableNode transformableNode = 새 TransformableNode (arCoreFragment.getTransformationSystem ()); // transformableNode를 anchorNode에 연결 // transformableNode.setParent (anchorNode); transformableNode.setRenderable (dinoRenderable); // 노드 선택 // transformableNode.select (); }); }

완성 된 MainActivity

위의 모든 작업을 수행 한 후 MainActivity는 다음과 같아야합니다.

import android.app.Activity; import android.app.ActivityManager; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; android.net.Uri 가져 오기; import android.os.Build; import android.os.Build.VERSION_CODES; android.os.Bundle 가져 오기; import android.util.Log; import android.view.MotionEvent; import androidx.annotation.RequiresApi; 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.ux.ArFragment; import com.google.ar.sceneform.ux.TransformableNode; 공용 클래스 MainActivity 확장 AppCompatActivity {개인 정적 최종 문자열 TAG = MainActivity.class.getSimpleName (); 개인 정적 최종 두 배 MIN_OPENGL_VERSION = 3.0; // ModelRenderable // private에 대한 멤버 변수를 만듭니다. ModelRenderable dinoRenderable; // ArFragment // private ArFragment에 대한 멤버 변수를 만듭니다. ArCoreFragment; @RequiresApi (api = VERSION_CODES.N) @ 보호 된 무효화 무효 onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); if (! checkDevice ((this))) {return; } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // 프래그먼트 관리자를 사용하여 프래그먼트를 찾습니다 // getSupportFragmentManager (). findFragmentById (R.id.main_fragment); if (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// ModelRenderable // ModelRenderable.builder () .setSource (this, R.raw.dinosaur) .build () .thenAccept (renderable-> dinoRenderable = renderable 빌드 ) .exceptionally (// 오류가 발생하면 ... // throwable-> {// ... 다음을 Logcat // Log.e (TAG, "렌더러 블을로드 할 수 없음")에 출력합니다; ); } // onTap 이벤트 듣기 // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Plane plane, MotionEvent motionEvent)-> {if (dinoRenderable == null) {return;} 앵커 앵커 = hitResult.createAnchor (); // 빌드 a AnchorNode // AnchorNode 유형의 노드 anchorNode = new AnchorNode (anchor); // AnchorNode를 Scene // anchorNode에 연결합니다. setParent (arCoreFragment.getArSceneView (). getScene ()); // TransformableNode // 유형의 노드 작성 TransformableNode transformableNode = new TransformableNode (arCoreFragment.getTransformationSystem ()); // TransformableNode를 AnchorNode에 연결 // transformableNode.setParent (anchorNode); // Renderable // TransformableNode.setRenderable (dinoRenderable) 연결 // 노드 설정 / / transformableNode.select ();}); } public static boolean checkDevice (final Activity activity) {// 장치가 Android Marshmallow 이하를 실행중인 경우 ... // if (Build.VERSION.SDK_INT <VERSION_CODES.N) {// ... 다음을 인쇄 Logcat // Log.e (TAG, "Sceneform은 Android N 이상이 필요합니다"); activity.finish (); 거짓을 반환; } String openGlVersionString = ((ActivityManager) activity.getSystemService (Context.ACTIVITY_SERVICE)) .getDeviceConfigurationInfo () // OpenGL ES // .getGlEsVersion ()의 버전을 확인합니다. // 장치가 OpenGL ES 3.0 미만을 실행중인 경우 ... // if (Double.parseDouble (openGlVersionString) <MIN_OPENGL_VERSION) {// ... 다음을 Logcat // Log.e (TAG, " OpenGL ES 3.0 이상이 필요합니다. "); activity.finish (); 거짓을 반환; } true를 반환; }}

완성 된 프로젝트는 GitHub에서 다운로드 할 수 있습니다.

Google ARCore 증강 현실 앱 테스트

이제 지원되는 실제 Android 기기에서 애플리케이션을 테스트 할 준비가되었습니다. ARCore를 지원하는 기기를 소유하지 않은 경우 Android 에뮬레이터에서 AR 앱을 테스트 할 수 있습니다 (다음 섹션에서 자세히 설명 할 약간의 추가 구성).

프로젝트를 테스트하려면 물리적 안드로이드 기기 :

  • 대상 장치에 응용 프로그램을 설치하십시오.
  • 메시지가 표시되면 애플리케이션에 기기의 카메라에 대한 액세스 권한을 부여하십시오.
  • ARCore 앱을 설치 또는 업데이트하라는 메시지가 표시되면 "계속"을 탭한 다음 대화 상자를 완료하여 최신 버전의 ARCore를 실행하고 있는지 확인하십시오.
  • 이제 장치를 들고있는 손의 애니메이션으로 완성 된 카메라 뷰가 표시됩니다. 애니메이션이 보여주는 것처럼 카메라를 평평한 표면으로 향하게하고 원을 그리며 움직입니다. 잠시 후 평면이 감지되었음을 나타내는 일련의 점이 나타납니다.

  • 이 점의 위치에 만족하면 탭을 탭하십시오. 이제 3D 모델이 선택한 평면에 나타납니다!

  • 모델 주위를 물리적으로 움직여보십시오. 주변 환경에 따라 360도 전체를 돌릴 수 있습니다. 또한 물체가 실제 광원과 일치하는 그림자를 드리 우고 있는지 확인해야합니다.

Android 가상 장치에서 ARCore 테스트

AVD (Android Virtual Device)에서 ARCore 앱을 테스트하려면 Android Emulator 버전 27.2.9 이상이 필요합니다. 또한 AVD의 Google Play 스토어에 로그인하고 OpenGL ES 3.0 이상을 활성화해야합니다.

현재 AVD에서 OpenGL ES 3.0 이상이 활성화되어 있는지 확인하려면

  • 평소와 같이 AVD를 시작하십시오.
  • 새 터미널 창 (Mac) 또는 명령 프롬프트 (Windows)를 엽니 다.
  • 터미널 / 명령 프롬프트가 Android SDK의 "adb"프로그램 위치를 가리 키도록 디렉토리 ( "cd")를 변경하십시오. 예를 들어, 내 명령은 다음과 같습니다.

Cd / Users / jessicathornsby / Library / Android / sdk / platform-tools

  • 키보드에서 "Enter"키를 누릅니다.
  • 다음 명령을 터미널에 복사 / 붙여 넣기 한 다음 "Enter"키를 누릅니다.

./adb logcat | grep eglMakeCurrent

터미널이“ver 3 0”이상을 반환하면 OpenGL ES가 올바르게 구성된 것입니다. 터미널 또는 명령 프롬프트에 3.0 이전의 것이 표시되면 OpenGL ES 3.0을 활성화해야합니다.

  • AVD로 다시 전환하십시오.
  • Android 에뮬레이터와 함께 떠 다니는 "확장 컨트롤"버튼을 찾은 다음 "설정> 고급"을 선택하십시오.
  • "OpenGL ES API 레벨> 렌더러 최대 값 (최대 OpenGL ES 3.1)"으로 이동하십시오.
  • 에뮬레이터를 다시 시작하십시오.

터미널 / 명령 프롬프트 창에서 다음 명령을 복사하여 붙여 넣은 다음 "Enter"키를 누릅니다.

./adb logcat | grep eglMakeCurrent

이제“ver 3 0”이상의 결과가 표시됩니다. 이는 OpenGL ES가 올바르게 구성되었음을 의미합니다.

마지막으로 AVD가 최신 ARCore 버전을 실행하고 있는지 확인하십시오.

  • ARCore의 GitHub 페이지로 이동하여 에뮬레이터 용 최신 ARCore 릴리스를 다운로드하십시오. 예를 들어, 최신 릴리스를 작성할 당시는 "ARCore_1.7.0.x86_for_emulator.apk"였습니다.
  • 실행중인 AVD에 APK를 끌어다 놓습니다.

AVD에서 프로젝트를 테스트하려면 응용 프로그램을 설치하고 메시지가 표시되면 AVD의 "카메라"에 대한 액세스 권한을 부여하십시오.

이제 시뮬레이션 된 방의 카메라 뷰가 나타납니다. 응용 프로그램을 테스트하려면이 가상 공간을 이동하고 시뮬레이션 된 평면을 찾은 다음 클릭하여이 표면에 모델을 배치하십시오.

“Option”(macOS) 또는“Alt”(Linux 또는 Windows) 키를 누른 상태에서 다음 키보드 단축키 중 하나를 사용하여 가상 카메라를 가상 방 주위로 이동할 수 있습니다.

  • 왼쪽이나 오른쪽으로 이동하십시오. A 또는 D를 누릅니다.
  • 아래로 또는 위로 이동하십시오. Q 또는 E를 누릅니다.
  • 앞으로 또는 뒤로 이동하십시오. W 또는 S를 누릅니다.

“Option”또는“Alt”를 누른 다음 마우스를 사용하여 가상 장면을“이동”할 수도 있습니다. 처음에는 약간 혼란 스러울 수 있지만 실제로는 가상 공간을 성공적으로 탐색 할 수 있어야합니다. 시뮬레이션 된 평면을 찾으면 흰색 점을 클릭하여 3D 모델을이 표면에 배치하십시오.

마무리

이 기사에서는 ARCore 및 Sceneform 플러그인을 사용하여 간단한 증강 현실 앱을 만들었습니다.

자신의 프로젝트에서 Google ARCore를 사용하기로 결정한 경우 아래 의견에 작품을 공유하십시오!

곧 출시 될 삼성 갤럭시 10의 가격이 눈에 띄는 것은 내 눈만이 아니었다 고 확신한다.보고서에 따르면 12GB RAM과 1TB의 내부 스토리지를 포함하는 가장 비싼 10 Plu 모델의 가격은 1,599 유로 (~ 1,818 달러)입니다. 얼마 전에 스마트 폰이 논란의 여지없이 1000 달러를 넘었고 곧 우리가 2,000 달러에 도달 할 수있을 것으로 보입...

지난주 설문 조사 요약 : 총 투표 수 3,100 개 중 독자의 39.4 %가 갤럭시 노트 8을 구매하지는 않았지만 노트 7의 혼란으로 인한 것이 아니라고 답했습니다. 35.1 %는 이미 노트 8을 구매할 계획이라고 답했으며, 유권자의 4 %는 노트 7에서 발생한 일로 인해 노트 8에 총격을주지 않았다고 답했습니다. 14.7 %는 리뷰가 올 때까지 기다리고...

옛 소련