Creați o aplicație Android cu realitate augmentată cu Google ARCore

Autor: Laura McKinney
Data Creației: 7 Lang L: none (month-011) 2021
Data Actualizării: 1 Iulie 2024
Anonim
Create an Augmented Reality App in Android |  App Development Tutorial | Android Studio
Video: Create an Augmented Reality App in Android | App Development Tutorial | Android Studio

Conţinut


Importarea de modele 3D, cu pluginul Sceneform

De obicei, lucrul cu modele 3D necesită cunoștințe de specialitate, dar cu lansarea pluginului Sceneform Google au făcut posibilă redarea modelelor 3D folosind Java - și fără trebuind să învețe OpenGL.

Pluginul Sceneform oferă o API de nivel înalt pe care o puteți utiliza pentru a crea Renderdables din widget-uri, forme sau materiale standard Android sau din active 3D, cum ar fi fișiere .OBJ sau .FBX.

În proiectul nostru, vom folosi pluginul Sceneform pentru a importa un fișier .OBJ în Android Studio. Ori de câte ori importați un fișier utilizând Sceneform, acest plugin va face automat:

  • Convertiți fișierul de activ într-un fișier .sfb. Acesta este un format binar Sceneform optimizat în timpul rulării (.sfb) care este adăugat la APK-ul dvs. și apoi încărcat la runtime. Vom folosi acest fișier .sfb pentru a crea un Renderable, care constă din ochiuri, materiale și texturi și poate fi plasat oriunde în cadrul scenei augmentate.
  • Generați un fișier .sfa. Acesta este un fișier cu descrierea activelor, care este un fișier text care conține o descriere lizibilă de om a fișierului .sfb. În funcție de model, puteți modifica aspectul acestuia prin editarea textului din fișierul .sfa.


Doar fiți conștienți că la momentul scrierii, pluginul Sceneform era încă în versiune beta, deci puteți întâmpina erori, erori sau alte comportamente ciudate atunci când utilizați acest plugin.

Instalarea pluginului Sceneform

Pluginul Sceneform necesită Android Studio 3.1 sau o versiune ulterioară. Dacă nu sunteți sigur ce versiune a Android Studio utilizați, selectați „Android Studio> Despre Android Studio” din bara de instrumente. Popup ulterior conține câteva informații de bază despre instalarea Android Studio, inclusiv numărul versiunii sale.

Pentru a instala pluginul Sceneform:

  • Dacă sunteți pe un Mac, selectați „Android Studio> Preferințe…” din bara de instrumente Android Studio, apoi alegeți „Pluginele” din meniul din stânga. Dacă sunteți pe un computer Windows, apoi selectați „Fișier> Setări> Pluginuri> Parcurgere depozite.”
  • Căutați „Sceneform”. Când apare „Instrumente Sceneform Google”, selectați „Instalare”.
  • Reporniți Android Studio când vi se solicită, iar pluginul dvs. va fi gata de utilizare.


Sceneform UX și Java 8: Actualizarea dependențelor proiectului

Să începem prin adăugarea dependențelor pe care le vom folosi pe parcursul acestui proiect. Deschideți fișierul build.gradle la nivel de modul și adăugați biblioteca Sceneform UX, care conține ArFragmentul pe care îl vom folosi în aspectul nostru:

dependences {implement fileTree (dir: libs, include:) implementare androidx.appcompat: appcompat: 1.0.2 implementare 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 oferă resurse UX, inclusiv ArFragment // implementarea „com.google.ar.sceneform.ux: sceneform-ux: 1.7.0„ implementare ”com. android.support:appcompat-v7:28.0.0 "}

Sceneform folosește construcții de limbaj de la Java 8, de aceea va trebui să actualizăm și compatibilitatea sursă și compatibilitatea cu țintele la Java 8:

compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}

În cele din urmă, trebuie să aplicăm pluginul Sceneform:

aplicați plugin: com.google.ar.sceneform.plugin

Fișierul dvs. build.gradle completat ar trebui să arate astfel:

apply plugin: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.arcoredemo" minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRitersunner Java JavaVersion.VERSION_1_8} buildTypes {release {minifyEnabled proguardFiles false getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} dependențe {implement fileTree (dir: libs, include:) implementarea androidx.appcompat: appcompat: 1.0 .2 implementare 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 implementare "com.google. ar.sceneform.ux: sceneform-ux: 1.7.0 "implementare" com.android.support:appcompat-v7:28.0.0 "} apply plugin: com.google.ar .sceneform.plugin

Solicitarea permisiunilor cu ArFragment

Aplicația noastră va folosi camera dispozitivului pentru a analiza împrejurimile și poziționarea modelelor 3D în lumea reală. Înainte ca aplicația noastră să poată accesa camera, necesită permisiunea camerei, așa că deschideți Manifestul proiectului și adăugați următoarele:

Android 6.0 le-a oferit utilizatorilor posibilitatea de a acorda, refuza și revoca permisiunile pe baza unei permisiuni. În timp ce acest lucru a îmbunătățit experiența utilizatorului, dezvoltatorii Android trebuie să solicite manual permisiunile la timpul de execuție și să gestioneze răspunsul utilizatorului. Vestea bună este că atunci când lucrează Google ARCore, procesul de a solicita permisiunea camerei și de a gestiona răspunsul utilizatorului automat.

Componenta ArFragment verifică automat dacă aplicația dvs. are permisiunea camerei și apoi o solicită, dacă este necesar, înainte de a crea sesiunea AR. Deoarece vom folosi ArFragment în aplicația noastră, nu este necesar să scriem niciun cod pentru a solicita permisiunea camerei.

AR Necesar sau opțional?

Există două tipuri de aplicații care utilizează funcționalitatea AR:

1. AR Necesar

Dacă aplicația dvs. se bazează pe Google ARCore pentru a oferi o experiență bună a utilizatorului, atunci trebuie să vă asigurați că este descărcată doar pe dispozitivele care acceptă ARCore. Dacă marcați aplicația dvs. ca „AR Obligatorie”, atunci aceasta va apărea doar în magazinul Google Play, dacă dispozitivul acceptă ARCore.

De la cererea noastră face necesită ARCore, deschide Manifestul și adaugă următoarele:

Există, de asemenea, șansa ca aplicația dvs. să fie descărcată pe un dispozitiv care acceptă ARCore în teorie, dar de fapt nu are ARCore instalat. După ce marcăm aplicația noastră ca „AR Obligatorie”, Google Play va descărca și instala automat ARCore alături de aplicație, dacă nu este deja prezent pe dispozitivul țintă.

Doar fiți conștient că, chiar dacă aplicația dvs. este Android: obligatoriu = „adevărat”, veți fi încă trebuie să verificați că ARCore este prezent la runtime, deoarece există șanse ca utilizatorul să fi dezinstalat ARCore de la descărcarea aplicației dvs. sau că versiunea lor de ARCore este demodată.

Vestea bună este că folosim ArFragment, care verifică automat dacă ARCore este instalat și actualizat înainte de a crea fiecare Ședință AR - deci încă o dată, este ceva ce nu trebuie să implementăm manual.

2. AR Opțional

Dacă aplicația dvs. include caracteristici AR care sunt frumoase, dar care nu sunt esențiale pentru a-și livra funcționalitatea de bază, atunci puteți marca această aplicație ca „opțională AR”. Aplicația dvs. poate verifica dacă Google ARCore este prezent la runtime și dezactiva Funcții AR pe dispozitivele care nu acceptă ARCore.

Dacă creați o aplicație „AR opțională”, atunci ARCore va nu fi instalat automat alături de aplicația dvs., chiar dacă dispozitivul are tot hardware-ul și software-ul necesar pentru a suporta ARCore. Aplicația dvs. „Opțională AR” va trebui apoi să verifice dacă ARCore este prezent și actualizat și să descarce cea mai recentă versiune după cum este necesar.

Dacă ARCore nu este crucial pentru aplicația dvs., atunci puteți adăuga următoarele la Manifest:

În timp ce manifestul este deschis, adaug și Android: configChanges și Android: ecranOrientation, pentru a asigura MainActivity gestionează orientările cu grație.

După adăugarea a toate acestea la Manifestul dvs., fișierul completat ar trebui să arate așa:

Adăugați ArFragment la aspectul dvs.

Voi folosi ArFragmentul ARCore, deoarece gestionează automat o serie de sarcini cheie ARCore la începutul fiecărei sesiuni AR. În special, ArFragment verifică dacă pe dispozitiv este instalată o versiune compatibilă a ARCore și că aplicația are în prezent permisiunea camerei.

După ce ArFragment a verificat că dispozitivul poate suporta funcțiile AR ale aplicației, creează o sesiune ArSceneView ARCore, iar experiența AR a aplicației este gata de pornire!

Puteți adăuga fragmentul ArFragment într-un fișier de layout, la fel ca un Fragment Android obișnuit, așadar deschideți fișierul activitate_main.xml și adăugați o componentă „com.google.ar.sceneform.ux.ArFragment”

Descărcarea modelelor 3D, folosind Google Poly

Există mai multe moduri diferite de a crea Renderabile, dar în acest articol vom folosi un fișier de resurse 3D.

Sceneform acceptă resursele 3D în formate .OBJ, .glTF și .FBX, cu sau fără animații. Există o mulțime de locuri unde puteți achiziționa modele 3D într-unul din aceste formate acceptate, dar în acest tutorial voi folosi un fișier .OBJ, descărcat din depozitul Poly din Google.

Accesați site-ul web Poly și descărcați activul pe care doriți să îl utilizați, în format .OBJ (folosesc acest model T-Rex).

  • Decuplați dosarul, care ar trebui să conțină fișierul sursă sursă de model (.OBJ, .FBX sau .glTF). În funcție de model, acest folder poate conține, de asemenea, unele dependențe de model, cum ar fi fișierele în formatele .mtl, .bin, .png sau .jpeg.

Importarea modelelor 3D în Android Studio

După ce aveți activul dvs., trebuie să îl importați în Android Studio utilizând pluginul Sceneform. Acesta este un proces în mai multe etape care necesită să:

  • Creați un folder „eșantionat”. Sampledata este un nou tip de folder pentru datele de eșantion de timp de proiectare care nu vor fi incluse în APK-ul dvs., dar vor fi disponibile în editorul Android Studio.
  • Trageți și fixați fișierul .OBJ original în folderul „eșantionate”.
  • Efectuați importul și conversia Sceneform în fișierul .OBJ, care va genera fișiere .sfa și .sfb.

Deși poate părea mai simplu, nu trageți și aruncați fișierul .OBJ direct în directorul „res” al proiectului dvs., deoarece acest lucru va face ca modelul să fie inclus în APK-ul dvs. inutil.

Proiectele Android Studio nu conțin în mod implicit un folder „eșantionate”, deci va trebui să creați unul manual:

  • Faceți clic pe butonul „aplicație” al proiectului dvs.
  • Selectați „Nou> Director de date de eșantion” și creați un dosar numit „eșantionat”.
  • Navigați la fișierele cu model 3D pe care le-ați descărcat mai devreme. Găsiți fișierul sursă sursă (.OBJ, .FBX sau .glTF) apoi trageți-l și plasați-l în directorul „eșantionate”.
  • Verificați dacă modelul dvs. are dependențe (cum ar fi fișierele în formatele .mtl, .bin, .png sau .jpeg). Dacă găsiți oricare dintre aceste fișiere, apoi glisați-le și aruncați-le în folderul „eșantionate”.
  • În Android Studio, faceți clic pe Control pe fișierul sursă al modelului 3D (.OBJ, .FBX sau .glTF) și apoi selectați „Import Sceneform Asset”.

  • Fereastra ulterioară afișează câteva informații despre fișierele pe care Sceneform urmează să le genereze, inclusiv în cazul în care fișierul .sfa rezultat va fi stocat în proiectul dvs.; Voi folosi directorul „brut”.
  • Când sunteți mulțumit de informațiile introduse, faceți clic pe „Finalizați”.

Acest import aduce câteva modificări proiectului. Dacă deschideți fișierul build.gradle, atunci veți vedea că pluginul Sceneform a fost adăugat ca dependență de proiect:

dependencies {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform: plugin: 1.7.0 // NOTĂ: Nu plasați aici dependențele aplicației; ele aparțin // din modulul individual build.gradle files}}

Deschideți fișierul build.gradle la nivel de modul și veți găsi o nouă intrare scenform.asset () pentru modelul dvs. 3D importat:

apply plugin: com.google.ar.sceneform.plugin // „Calea de activare sursă” pe care ați specificat-o în timpul importului // sceneform.asset (sampledata / dinosaur.obj, // „Calea materialului” specificată în timpul importului // implicit , // „Calea de ieșire .sfa” pe care ați specificat-o în timpul importului // samplingata / dinosaur.sfa, // „Calea de ieșire .sfb” pe care ați specificat-o în timpul importului // src / main / active / dinosaur)

Dacă aruncați o privire asupra dosarelor „eșantionate” și „brute”, atunci veți vedea că acestea conțin fișiere noi .sfa și, respectiv, .sfb.

Puteți previzualiza fișierul .sfa în noul Viewer Sceneform de la Android Studio:

  • Selectați „Vizualizare> Instrumente Windows> Viewer” din bara de meniu Android Studio.
  • În meniul din stânga, selectați fișierul dvs. .sfa. Modelul dvs. 3D ar trebui să apară acum în fereastra Viewer.

Afișați modelul dvs. 3D

Următoarea noastră sarcină este crearea unei sesiuni AR care înțelege împrejurimile sale și permite utilizatorului să plaseze modele 3D într-o scenă mărită.

Acest lucru necesită să facem următoarele:

1. Creați o variabilă de membru ArFragment

ArFragment realizează o mare parte din activitățile de ridicare grele implicate în crearea unei sesiuni de AR, așa că vom face referire la acest fragment în întreaga noastră clasă MainActivity.

În fragmentul următor, creez o variabilă de membru pentru ArFragment și o inițializez prin metoda onCreate ():

privat ArFragment arCoreFragment; @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (salvatInstanceState); ... ... ...} setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Găsiți fragmentul, folosind managerul de fragmente // getSupportFragmentManager (). findFragmentById (R.id.main_fragment);

2. Construiți un Model Renderable

Acum trebuie să transformăm fișierul nostru .sfb într-un ModelRenderable, care va reda obiectul nostru 3D.

Aici, creez un ModelRenderable din fișierul .sfb res / raw / dinozaur al proiectului meu:

Model privatReparabil dinoRenderable; ... ... ... ModelRenderable.builder () .setSource (aceasta, R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = renderable) .excepțional (aruncător -> {Log.e ( TAG, „Imposibil de încărcat prestabilite”); returnare nulă;}); }

3. Răspundeți la intrarea utilizatorului

ArFragment are suport integrat pentru gesturi de atingere, glisare, strângere și răsucire.

În aplicația noastră, utilizatorul va adăuga un model 3D la un avion ARCore, dând acel avion un robinet.

Pentru a livra această funcționalitate, trebuie să înregistrăm un apel de apel care va fi invocat de fiecare dată când un avion este apăsat:

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

4. Ancorează-ți modelul

În acest pas, vom regăsi un ArSceneView și îl vom atașa la un AnchorNode, care va servi drept nodul părinte al Scenei.

ArSceneView este responsabil pentru efectuarea mai multor sarcini importante ARCore, inclusiv redarea imaginilor camerei ale dispozitivului și afișarea unei animații Sceneform UX care demonstrează modul în care utilizatorul ar trebui să țină și să mute dispozitivul pentru a începe experiența AR. ArSceneView va evidenția, de asemenea, toate planurile pe care le detectează, gata pentru utilizator să plaseze modelele 3D în scenă.

Componenta ARSceneView are atașată o scenă, care este o structură de date părinte-copil care conține toate nodurile care trebuie redate.

Vom începe creând un nod de tip AnchorNode, care va acționa ca nodul părinte al ArSceneView.

Toate nodurile de ancoră rămân în aceeași poziție din lumea reală, așa că, prin crearea unui nod ancor, ne asigurăm că modelele noastre 3D vor rămâne fixate în cadrul scenei augmentate.

Să creăm nodul nostru de ancoră:

AnchorNode anchorNode = nou AnchorNode (ancoră);

Putem apoi prelua un ArSceneView, folosind getArSceneView () și atașați-l la AnchorNode:

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

5. Adăugați suport pentru mișcare, scalare și rotire

În continuare, voi crea un nod de tip TransformableNode. TransformableNode este responsabil pentru deplasarea, scalarea și rotirea nodurilor, pe baza gesturilor utilizatorului.

După ce ați creat un TransformableNode, îl puteți atașa pe Renderable, ceea ce va oferi modelului posibilitatea de a scala și de a se deplasa, pe baza interacțiunii utilizatorului. În cele din urmă, trebuie să conectați TransformableNode la AnchorNode, într-o relație copil-părinte care asigură TransformableNode și Renderabilul rămâne fixat la locul lor în cadrul scenei augmentate.

TransformableNode transformableNode = new TransformableNode (arCoreFragment.getTransformationSystem ()); // Conectați transformableNode la anchorNode // transformableNode.setParent (anchorNode); transformableNode.setRenderable (dinoRenderable); // Selectați nodul // transformableNode.select (); }); }

MainActivity finalizată

După efectuarea tuturor celor de mai sus, Activitatea principală ar trebui să arate așa:

import Android.app.Activitate; import Android.app.ActivityManager; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import Android.net.Uri; import Android.os.Build; import Android.os.Build.VERSION_CODES; import 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.Plan; 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; public class MainActivity extinde AppCompatActivity {private static final String TAG = MainActivity.class.getSimpleName (); dublu static privat privat MIN_OPENGL_VERSION = 3,0; // Creați o variabilă de membru pentru ModelRenderable // private ModelRenderable dinoRenderable; // Creați o variabilă de membru pentru ArFragment // privat ArFragment arCoreFragment; @RequiresApi (api = VERSION_CODES.N) @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (salvatInstanceState); if (! checkDevice ((this))) {return; } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Găsiți fragmentul, folosind managerul de fragmente // getSupportFragmentManager (). findFragmentById (R.id.main_fragment); if (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// Construiți ModelRenderable // ModelRenderable.builder () .setSource (aceasta, R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = renderable ) .excepțional (// Dacă apare o eroare ... // aruncabilă -> {//...then imprimați următoarele în Logcat // Log.e (TAG, "Nu se poate încărca raportabil"); return null;} ); } // Ascultați evenimentele onTap // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Plane plane, MotionEvent motionEvent) -> {if (dinoRenderable == null) {return;} Anchor ancora = hitResult.createAnchor (); // Build a nod de tip AnchorNode // AnchorNode anchorNode = nou AnchorNode (ancoră); // Conectați AnchorNode la Scena // anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ()); // Construiți un nod de tip TransformableNode // TransformableNode transformableNode = new TransformableNode (arCoreFragment.getTransformationSystem ()); // Conectați TransformableNode la AnchorNode // transformableNode.setParent (anchorNode); // Atașați Renderable // transformableNode.setRenderable (dinoRenderable); // Setați nodul / / transformableNode.select ();}); } public static boolean checkDevice (activitate finală a activității) {// Dacă dispozitivul rulează Android Marshmallow sau mai devreme ... // if (Build.VERSION.SDK_INT <VERSION_CODES.N) {//… extinde următoarele pentru Logcat // Log.e (TAG, „Sceneform necesită Android N sau versiuni ulterioare”); activity.finish (); returnare falsă; } String openGlVersionString = ((ActivityManager) Activity.getSystemService (Context.ACTIVITY_SERVICE)) .getDeviceConfigurationInfo () // Verificați versiunea OpenGL ES // .getGlEsVersion (); // Dacă dispozitivul rulează ceva mai puțin decât OpenGL ES 3.0 ... // if (Double.parseDouble (openGlVersionString) <MIN_OPENGL_VERSION) {//...then print the following to Logcat // Log.e (TAG, " Necesită OpenGL ES 3.0 sau mai mare "); activity.finish (); returnare falsă; } returnare adevărat; }}

Puteți descărca proiectul finalizat de pe GitHub.

Testarea aplicației Google ARCore pentru realitate augmentată

Acum sunteți gata să testați aplicația pe un dispozitiv Android acceptat fizic. Dacă nu dețineți un dispozitiv care acceptă ARCore, atunci este posibil să vă testați aplicația AR în emulatorul Android (cu o configurație suplimentară, pe care o vom acoperi în secțiunea următoare).

Pentru a testa proiectul dvs. pe un fizic Dispozitiv Android:

  • Instalați aplicația pe dispozitivul țintă.
  • Când vi se solicită, acordați aplicației accesul la camera dispozitivului dvs.
  • Dacă vi se solicită să instalați sau să actualizați aplicația ARCore, atingeți „Continuare” și apoi completați dialogul pentru a vă asigura că executați cea mai recentă și cea mai mare versiune de ARCore.
  • Acum ar trebui să vedeți o vedere a camerei, completată cu o animație a unei mâini care ține un dispozitiv. Îndreptați camera spre o suprafață plană și mutați dispozitivul într-o mișcare circulară, așa cum demonstrează animația. După câteva momente, ar trebui să apară o serie de puncte care indică faptul că a fost detectat un avion.

  • După ce sunteți mulțumit de poziția acestor puncte, dați-le un robinet - modelul dvs. 3D ar trebui să apară acum în avionul ales!

  • Încercați să vă deplasați fizic în jurul modelului; în funcție de împrejurimile dvs., este posibil să puteți face cele 360 ​​de grade în jurul său. De asemenea, ar trebui să verificați dacă obiectul aruncă o umbră care este în concordanță cu sursele reale de lumină din lume.

Testarea ARCore pe un dispozitiv virtual Android

Pentru a testa aplicațiile ARCore într-un dispozitiv virtual Android (AVD), veți avea nevoie de versiunea 27.2.9 sau mai recentă a emulatorului Android. De asemenea, trebuie să fiți conectat la magazinul Google Play de pe AVD și să fiți activat OpenGL ES 3.0 sau o versiune superioară.

Pentru a verifica dacă OpenGL ES 3.0 sau o versiune ulterioară este activat în prezent pe AVD-ul dvs.:

  • Lansați AVD-ul, la fel de normal.
  • Deschideți o nouă fereastră de terminal (Mac) sau o comandă de comandă (Windows).
  • Schimbați directorul („cd”), astfel încât promptul Terminal / Command indică locația programului „adb” al SDK-ului dvs. Android, de exemplu comanda mea arată astfel:

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

  • Apăsați tasta „Enter” de pe tastatură.
  • Copiați / inserați următoarea comandă în terminal, apoi apăsați tasta „Enter”:

./adb logcat | grep eglMakeCurrent

Dacă terminalul returnează „ver 3 0” sau mai mare, atunci OpenGL ES este configurat corect. Dacă Terminalul sau promptul de comandă afișează ceva mai devreme decât 3.0, va trebui să activați OpenGL ES 3.0:

  • Comutați înapoi la AVD.
  • Găsiți fâșia butoanelor „Control extins” care plutesc alături de Emulatorul Android, apoi selectați „Setări> Complex”.
  • Accesați „Nivel API OpenGL ES> Renderer maxim (până la OpenGL ES 3.1).”
  • Reporniți emulatorul.

În fereastra Prompt Terminal / Command, copiați / inserați următoarea comandă și apoi apăsați tasta „Enter”

./adb logcat | grep eglMakeCurrent

Acum ar trebui să obțineți un rezultat „ver 3 0” sau mai mare, ceea ce înseamnă că OpenGL ES este configurat corect.

În cele din urmă, asigurați-vă că AVD-ul dvs. rulează cea mai recentă versiune de ARCore:

  • Accesați pagina GitHub a ARCore și descărcați cea mai recentă versiune de ARCore pentru emulator. De exemplu, la momentul scrierii, cea mai recentă versiune a fost „ARCore_1.7.0.x86_for_emulator.apk”
  • Trageți și fixați APK-ul pe AVD-ul dvs. care rulează.

Pentru a testa proiectul pe un AVD, instalați-vă aplicația și acordați-i acces la „camera” AVD-ului atunci când vi se solicită.

Acum ar trebui să vedeți o cameră cu o cameră simulată. Pentru a testa aplicația dvs., deplasați-vă în acest spațiu virtual, găsiți o suprafață plană simulată și faceți clic pentru a plasa un model pe această suprafață.

Puteți muta camera virtuală în camera virtuală, apăsând și ținând apăsate tastele „Opțiune” (macOS) sau „Alt” (Linux sau Windows), apoi utilizând oricare dintre următoarele comenzi rapide de la tastatură:

  • Deplasați-vă spre stânga sau spre dreapta. Apăsați A sau D.
  • Mută-te în jos sau în sus. Apăsați Q sau E.
  • Mutați înainte sau înapoi. Apăsați W sau S.

De asemenea, puteți „deplasa” în jurul scenei virtuale, apăsând „Opțiune” sau „Alt” și apoi folosind mouse-ul. Acest lucru se poate simți puțin incomod la început, dar cu practica ar trebui să fii capabil să explorezi cu succes spațiul virtual. După ce găsiți un plan simulat, faceți clic pe punctele albe pentru a plasa modelul 3D pe această suprafață.

Înveliți

În acest articol, am creat o aplicație simplă de realitate augmentată, folosind ARCore și pluginul Sceneform.

Dacă decideți să utilizați Google ARCore în propriile proiecte, atunci asigurați-vă că împărtășiți creațiile dvs. în comentariile de mai jos!

Deignul minimal ete o reminicență a căștilor WH-1000XM3, cu o cacă enibilă la atingere pentru controlul redării muzicii.Acetea unt ușoare pentru căștile cu ureche (254g), ceea ce ete deoebit de import...

Dacă faceți cumpărături pentru căști de anulare activă a zgomotului (ANC), probabil că veți găi două mărci: ony și Boe. Fiecare marcă ete un nume canic și e află în topul litei cu cele mai bune c...

Publicații Fascinante