Δημιουργήστε μια εφαρμογή Android για επαυξημένη πραγματικότητα με το Google ARCore

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 7 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 1 Ιούλιος 2024
Anonim
# Playground και # Playmoji στο # Android 10 | Sydney CBD Repair Centre
Βίντεο: # Playground και # Playmoji στο # Android 10 | Sydney CBD Repair Centre

Περιεχόμενο


Εισαγωγή τρισδιάστατων μοντέλων, με την προσθήκη Sceneform

Συνήθως, η εργασία με τρισδιάστατα μοντέλα απαιτεί εξειδικευμένες γνώσεις, αλλά με την απελευθέρωση του plugin σκηνικού Google έχει καταστήσει δυνατή την απόδοση 3D μοντέλων χρησιμοποιώντας Java - και χωρίς πρέπει να μάθουν το OpenGL.

Το plugin σκηνικού παρέχει ένα API υψηλού επιπέδου που μπορείτε να χρησιμοποιήσετε για να δημιουργήσετε Renderdables από τα βασικά γραφικά στοιχεία, σχήματα ή υλικά Android ή από στοιχεία 3D, όπως αρχεία .OBJ ή .FBX.

Στο σχέδιό μας, θα χρησιμοποιήσουμε το plugin Sceneform για την εισαγωγή ενός αρχείου .OBJ στο Android Studio. Κάθε φορά που εισάγετε ένα αρχείο χρησιμοποιώντας Sceneform, αυτό το πρόσθετο θα γίνει αυτόματα:

  • Μετατρέψτε το αρχείο στοιχείων σε αρχείο .sfb. Αυτή είναι μια μορφή δυαδικής μορφής Sceneform (.sfb) που έχει προστεθεί στο APK και στη συνέχεια φορτωθεί κατά το χρόνο εκτέλεσης. Θα χρησιμοποιήσουμε αυτό το αρχείο .sfb για να δημιουργήσουμε μια Renderable, η οποία αποτελείται από μάτια, υλικά και υφές και μπορεί να τοποθετηθεί οπουδήποτε μέσα στην ενισχυμένη σκηνή.
  • Δημιουργήστε ένα αρχείο .sfa. Αυτό είναι ένα αρχείο περιγραφής στοιχείων, το οποίο είναι ένα αρχείο κειμένου που περιέχει μια ανθρώπινη αναγνώσιμη περιγραφή του αρχείου .sfb. Ανάλογα με το μοντέλο, ίσως μπορείτε να αλλάξετε την εμφάνισή του επεξεργάζοντας το κείμενο μέσα στο αρχείο .sfa.


Απλά να γνωρίζετε ότι κατά τη στιγμή της σύνταξης, το plugin Sceneform ήταν ακόμα σε beta, επομένως μπορεί να αντιμετωπίσετε σφάλματα, σφάλματα ή άλλη περίεργη συμπεριφορά όταν χρησιμοποιείτε αυτό το plugin.

Εγκατάσταση της προσθήκης Sceneform

Το plugin σκηνικού απαιτεί το Android Studio 3.1 ή νεότερο. Εάν δεν είστε σίγουροι σε ποια έκδοση του Android Studio χρησιμοποιείτε, επιλέξτε "Android Studio> About Android Studio" από τη γραμμή εργαλείων. Το ακόλουθο αναδυόμενο παράθυρο περιέχει μερικές βασικές πληροφορίες σχετικά με την εγκατάσταση του Android Studio, συμπεριλαμβανομένου του αριθμού έκδοσης του.

Για να εγκαταστήσετε τη σκηνική προσθήκη:

  • Εάν βρίσκεστε σε Mac, επιλέξτε "Προτιμήσεις Android ...>" από τη γραμμή εργαλείων του Android Studio και, στη συνέχεια, επιλέξτε "Plugins" από το αριστερό μενού. Εάν βρίσκεστε σε υπολογιστή με Windows και, στη συνέχεια, επιλέξτε "Αρχείο> Ρυθμίσεις> Plugins> Αναζήτηση αποθετηρίων".
  • Αναζήτηση για το "Sceneform." Όταν εμφανιστεί το "Εργαλεία σκηνικού Google", επιλέξτε "Εγκατάσταση".
  • Κάντε επανεκκίνηση του Android Studio όταν σας ζητηθεί και το πρόσθετο θα είναι έτοιμο για χρήση.


Sceneform UX και Java 8: Ενημέρωση των εξαρτήσεων του έργου σας

Ας ξεκινήσουμε προσθέτοντας τις εξαρτήσεις που θα χρησιμοποιήσουμε σε όλο το έργο. Ανοίξτε το αρχείο build.grable σε επίπεδο ενότητας και προσθέστε τη βιβλιοθήκη Sceneform UX, η οποία περιέχει το ArFragment που θα χρησιμοποιήσουμε στη διάταξη μας:

dependencies {υλοποίηση 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 // Το Sceneform UX παρέχει πόρους UX, συμπεριλαμβανομένου του ArFragment // implementation "com.google.ar.sceneform.ux: sceneform-ux: 1.7.0" implementation "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:

εφαρμογή plugin: com.google.ar.sceneform.plugin

Το ολοκληρωμένο αρχείο build.gradle θα πρέπει να έχει την εξής μορφή:

εφαρμογή plugin: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.arcoredemo" minSdkVersion 23 targetSdkVersion 28 versionCode 1 έκδοσηName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"} compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} εξαρτήσεις {implementation fileTree (dir: libs, include:) εφαρμογή androidx.appcompat: appcompat: .2 εφαρμογή androidx.constraintlayout: constraintlayout: 1.1.3 testImplementation junit: junit: 4.12 androidTestImplementation καιroidx.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 "} εφαρμογή plugin: com.google.ar .sceneform.plugin

Ζητώντας δικαιώματα με το ArFragment

Η εφαρμογή μας θα χρησιμοποιήσει τη φωτογραφική μηχανή της συσκευής για να αναλύσει το περιβάλλον της και να τοποθετήσει 3D μοντέλα στον πραγματικό κόσμο. Προτού η εφαρμογή μας έχει πρόσβαση στην κάμερα, απαιτεί την άδεια της κάμερας, ανοίξτε το Manifest του έργου σας και προσθέστε τα εξής:

Το Android 6.0 έδωσε στους χρήστες τη δυνατότητα να χορηγούν, να αρνούνται και να ανακαλούν δικαιώματα βάσει άδειας βάσει άδειας. Ενώ αυτό βελτίωσε την εμπειρία των χρηστών, οι προγραμματιστές Android πρέπει τώρα να ζητήσουν χειροκίνητα δικαιώματα κατά το χρόνο εκτέλεσης και να χειριστούν την απόκριση του χρήστη. Τα καλά νέα είναι ότι όταν δουλεύει το Google ARCore, εφαρμόζεται η διαδικασία αίτησης της άδειας κάμερας και χειρισμού της απόκρισης του χρήστη αυτομάτως.

Η συνιστώσα ArFragment ελέγχει αυτόματα αν η εφαρμογή σας έχει το δικαίωμα κάμερας και στη συνέχεια την ζητά, εάν απαιτείται, προτού δημιουργήσει την περίοδο λειτουργίας AR. Από τη στιγμή που θα χρησιμοποιήσουμε το ArFragment στην εφαρμογή μας, δεν χρειάζεται να γράψουμε κανένα κωδικό για να ζητήσουμε την άδεια της κάμερας.

Απαιτείται AR ή προαιρετικό;

Υπάρχουν δύο τύποι εφαρμογών που χρησιμοποιούν λειτουργικότητα AR:

1. Απαιτείται AR

Εάν η αίτησή σας βασίζεται στο Google ARCore για να προσφέρει μια καλή εμπειρία χρήστη, τότε πρέπει να διασφαλίσετε ότι η λήψη του θα γίνει μόνο σε συσκευές που υποστηρίζουν το ARCore. Αν επισημάνετε την εφαρμογή σας ως "Απαιτείται AR" τότε θα εμφανιστεί μόνο στο κατάστημα Google Play, αν η συσκευή υποστηρίζει ARCore.

Από την αίτησή μας κάνει απαιτήστε ARCore, ανοίξτε το Manifest και προσθέστε τα εξής:

Υπάρχει επίσης η πιθανότητα η εφαρμογή σας να μεταφορτωθεί σε μια συσκευή που υποστηρίζει ARCore θεωρητικά, αλλά στην πραγματικότητα δεν έχει εγκατεστημένο το ARCore. Αφού επισημάνουμε την εφαρμογή μας ως "Απαιτείται AR" το Google Play θα κάνει αυτόματη λήψη και εγκατάσταση του ARCore μαζί με την εφαρμογή σας, αν δεν υπάρχει ήδη στη συσκευή προορισμού.

Απλά να γνωρίζετε ότι ακόμα και αν η εφαρμογή σας είναι Android: απαιτείται = "true" θα το κάνετε ακόμη πρέπει να ελέγξετε ότι το ARCore είναι παρόν στο runtime, καθώς υπάρχει πιθανότητα ο χρήστης να έχει απεγκαταστήσει το ARCore από τη λήψη της εφαρμογής σας ή ότι η έκδοση του ARCore είναι παλιά.

Τα καλά νέα είναι ότι χρησιμοποιούμε το ArFragment, το οποίο ελέγχει αυτόματα ότι το ARCore είναι εγκατεστημένο και ενημερωμένο πριν από τη δημιουργία του καθε AR συνεδρίαση - για άλλη μια φορά, αυτό δεν είναι κάτι που πρέπει να εφαρμόσουμε με το χέρι.

2. AR Προαιρετικό

Αν η εφαρμογή σας περιλαμβάνει λειτουργίες AR που είναι ωραίες αλλά όχι απαραίτητες για την παροχή των βασικών λειτουργιών της, τότε μπορείτε να επισημάνετε αυτήν την εφαρμογή ως "AR προαιρετική". Η εφαρμογή σας μπορεί στη συνέχεια να ελέγξει αν το Google ARCore είναι παρόν στο χρόνο εκτέλεσης και να απενεργοποιήσει AR χαρακτηριστικά σε συσκευές που δεν υποστηρίζουν ARCore.

Εάν δημιουργήσετε μια εφαρμογή "AR Optional", τότε το ARCore θα το κάνει δεν να εγκατασταθεί αυτόματα μαζί με την εφαρμογή σας, ακόμα κι αν η συσκευή διαθέτει όλο το υλικό και το λογισμικό που απαιτείται για την υποστήριξη του ARCore. Η εφαρμογή "AR Optional" θα πρέπει στη συνέχεια να ελέγξει εάν το ARCore είναι παρόν και ενημερωμένο και να κατεβάσετε την πιο πρόσφατη έκδοση όπως και όταν απαιτείται.

Εάν το ARCore δεν είναι κρίσιμο για την εφαρμογή σας, τότε μπορείτε να προσθέσετε τα εξής στο Manifest:

Ενώ έχω το Manifest ανοιχτό, προσθέτω και το Android: configChanges και Android: screenOrientation, για να διασφαλίσω ότι η MainActivity χειρίζεται τις αλλαγές προσανατολισμού με χαρά.

Μετά την προσθήκη όλων αυτών στο Manifest σας, το ολοκληρωμένο αρχείο θα πρέπει να έχει την εξής μορφή:

Προσθέστε το ArFragment στη διάταξή σας

Θα χρησιμοποιήσω το ArFragment του ARCore, καθώς χειρίζεται αυτόματα μια σειρά από βασικά καθήκοντα ARCore στην αρχή κάθε συνεδρίασης AR. Πιο συγκεκριμένα, το ArFragment ελέγχει ότι στη συσκευή είναι εγκατεστημένη μια συμβατή έκδοση του ARCore και ότι η εφαρμογή διαθέτει αυτήν την άδεια.

Μόλις το ArFragment επαληθεύσει ότι η συσκευή μπορεί να υποστηρίξει τις λειτουργίες AR της εφαρμογής σας, δημιουργεί μια περίοδο λειτουργίας ArSceneView ARCore και η εμπειρία AR της εφαρμογής σας είναι έτοιμη!

Μπορείτε να προσθέσετε το θραύσμα ArFragment σε ένα αρχείο σχεδιαγράμματος, ακριβώς όπως ένα κανονικό τεμάχιο Android, ανοίξτε το αρχείο activity_main.xml και προσθέστε ένα στοιχείο "com.google.ar.sceneform.ux.ArFragment".

Λήψη τρισδιάστατων μοντέλων, χρησιμοποιώντας το Poly της Google

Υπάρχουν διάφοροι διαφορετικοί τρόποι με τους οποίους μπορείτε να δημιουργήσετε Renderables, αλλά σε αυτό το άρθρο θα χρησιμοποιήσουμε ένα αρχείο τρισδιάστατων στοιχείων.

Το Sceneform υποστηρίζει τρισδιάστατα στοιχεία σε μορφές .OBJ, .glTF και .FBX, με ή χωρίς κινούμενα σχέδια. Υπάρχουν πολλά μέρη όπου μπορείτε να αποκτήσετε τρισδιάστατα μοντέλα σε ένα από αυτά τα υποστηριζόμενα φορμά, αλλά σε αυτό το σεμινάριο θα χρησιμοποιήσω ένα αρχείο .OBJ, το οποίο λήφθηκε από το αποθετήριο Poly της Google.

Προχωρήστε στην τοποθεσία Poly και μεταφορτώστε το στοιχείο που θέλετε να χρησιμοποιήσετε σε μορφή .OBJ (χρησιμοποιώ αυτό το μοντέλο T-Rex).

  • Αποσυμπιέστε τον φάκελο, ο οποίος θα πρέπει να περιέχει το αρχείο πηγής προέλευσης του μοντέλου (.OBJ, .FBX ή .glTF). Ανάλογα με το μοντέλο, αυτός ο φάκελος μπορεί επίσης να περιέχει κάποιες εξαρτήσεις μοντέλου, όπως αρχεία στις μορφές .mtl, .bin, .png ή .jpeg.

Εισαγωγή μοντέλων 3D σε Android Studio

Μόλις έχετε το περιουσιακό σας στοιχείο, θα πρέπει να το εισαγάγετε στο Android Studio χρησιμοποιώντας το plugin Sceneform. Πρόκειται για μια διαδικασία πολλαπλών βημάτων που απαιτεί:

  • Δημιουργήστε ένα φάκελο "sampledata". Το Sampledata είναι ένας νέος τύπος φακέλου για δεδομένα δείγματος χρόνου σχεδιασμού που δεν θα περιλαμβάνονται στο APK σας, αλλά θα είναι διαθέσιμοι στον επεξεργαστή του Android Studio.
  • Σύρετε και αποθέστε το αρχικό αρχείο .OBJ στο αρχείο "sampledata".
  • Εκτελέστε την εισαγωγή και μετατροπή σχήματος σκηνής στο αρχείο .OBJ, το οποίο θα δημιουργήσει τα αρχεία .sfa και .sfb.

Αν και μπορεί να φαίνεται πιο απλή, όχι μεταφέρετε και αποθέστε το αρχείο .OBJ απευθείας στον κατάλογο "res" του έργου σας, καθώς αυτό θα προκαλέσει άσκοπα την ενσωμάτωση του μοντέλου στο APK σας.

Τα έργα του Studio Studio δεν περιέχουν προεπιλεγμένο φάκελο "sampledata", επομένως θα πρέπει να δημιουργήσετε ένα χειροκίνητα:

  • Κάντε κλικ στο εικονίδιο "εφαρμογή" του έργου σας.
  • Επιλέξτε "Νέα> Δείγμα δεδομένων" και δημιουργήστε ένα φάκελο που ονομάζεται "sampledata".
  • Πλοηγηθείτε στα αρχεία 3D μοντέλων που έχετε κατεβάσει νωρίτερα. Βρείτε το αρχείο προέλευσης πηγής (.OBJ, .FBX ή .glTF) και, στη συνέχεια, σύρετε και τοποθετήστε το στον κατάλογο "sampledata".
  • Ελέγξτε αν το μοντέλο σας έχει εξαρτήσεις (όπως αρχεία στις μορφές .mtl, .bin, .png ή .jpeg). Αν βρείτε κάποιο από αυτά τα αρχεία, μεταφέρετε και αφήστε τα στο φάκελο "sampledata".
  • Στο Android Studio, κάντε κλικ στο εικονίδιο προέλευσης τρισδιάστατου μοντέλου (.OBJ, .FBX ή .glTF) και, στη συνέχεια, επιλέξτε "Εισαγωγή στοιχείων σκηνικού σχήματος".

  • Το επόμενο παράθυρο εμφανίζει κάποιες πληροφορίες σχετικά με τα αρχεία που πρόκειται να δημιουργήσει η Sceneform, συμπεριλαμβανομένου του τόπου όπου το αρχείο .sfa που προκύπτει θα αποθηκευτεί στο έργο σας. Πάω να χρησιμοποιώ τον "ακατέργαστο" κατάλογο.
  • Όταν είστε ικανοποιημένοι με τις πληροφορίες που έχετε εισάγει, κάντε κλικ στην επιλογή "Τέλος".

Αυτή η εισαγωγή κάνει μερικές αλλαγές στο έργο σας. Αν ανοίξετε το αρχείο build.gradle, τότε θα δείτε ότι η προσθήκη Sceneform έχει προστεθεί ως εξάρτηση έργου:

dependencies {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform: plugin: 1.7.0 // ΣΗΜΕΙΩΣΗ: Μην τοποθετείτε εδώ τις εξαρτήσεις της εφαρμογής σας. ανήκουν // στα ξεχωριστά αρχεία build.gradle της μονάδας}}

Ανοίξτε το αρχείο build.gradle σε επίπεδο ενότητας και θα βρείτε μια νέα καταχώρηση sceneform.asset () για το εισαγόμενο μοντέλο 3D:

apply plugin: com.google.ar.sceneform.plugin // Η "Διαδρομή πηγής πόρων" που καθορίσατε κατά την εισαγωγή // sceneform.asset (sampledata / dinosaur.obj, // Η "Διαδρομή υλικού" που καθορίσατε κατά την εισαγωγή // Default , // Η διαδρομή εξόδου ".sfa" που καθορίσατε κατά την εισαγωγή // sampledata / dinosaur.sfa, // Η ".sfb Output Path" που καθορίσατε κατά την εισαγωγή // src / main / assets / dinosaur)

Εάν ρίξετε μια ματιά στους φακέλους σας "sampledata" και "raw", τότε θα δείτε ότι περιέχουν νέα αρχεία .sfa και .sfb, αντίστοιχα.

Μπορείτε να κάνετε προεπισκόπηση του αρχείου .sfa, στο νέο Sceneform Viewer του Android Studio:

  • Επιλέξτε "Προβολή> Εργαλεία Windows> Προβολή" από τη γραμμή μενού του Android Studio.
  • Στο αριστερό μενού, επιλέξτε το αρχείο .sfa. Το μοντέλο 3D θα πρέπει να εμφανίζεται τώρα στο παράθυρο του προγράμματος προβολής.

Εμφάνιση του 3D μοντέλου σας

Το επόμενο καθήκον μας είναι η δημιουργία μιας συνόδου AR που κατανοεί το περιβάλλον της και επιτρέπει στον χρήστη να τοποθετήσει 3D μοντέλα σε μια ενισχυμένη σκηνή.

Αυτό απαιτεί να κάνουμε τα εξής:

1. Δημιουργήστε μια μεταβλητή μέλους ArFragment

Το ArFragment εκτελεί μεγάλο μέρος της βαριάς ανύψωσης που σχετίζεται με τη δημιουργία μιας συνόδου AR, οπότε θα αναφερθούμε σε αυτό το θραύσμα σε όλη την κλάση MainActivity.

Στο ακόλουθο απόσπασμα, δημιουργώ μια μεταβλητή μέλους για το ArFragment και στη συνέχεια την αρχικοποίησή της στη μέθοδο onCreate ():

ιδιωτικό ArFragment arCoreFragment; @Override προστατεύεται void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); ... ... ...} setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Βρείτε το θραύσμα, χρησιμοποιώντας το διαχειριστή τεμαχίων // getSupportFragmentManager () findFragmentById (R.id.main_fragment);

2. Δημιουργήστε ένα ΜοντέλοΔιατάξιμο

Τώρα πρέπει να μετατρέψουμε το αρχείο .sfb σε ModelRenderable, το οποίο θα αποτελέσει τελικά το 3D αντικείμενο μας.

Εδώ, δημιουργώ ένα ModelRenderable από το αρχείο res / raw / δεινοσαύρων του έργου μου .sfb:

ιδιωτικό μοντέλοRedable dinoRenderable; ...) ... (...) ... (...) ... (...) ... (...) ... (...) TAG, "Δεν είναι δυνατή η φόρτωση των διαθέσιμων εκδόσεων"), επιστροφή null,}). }}

3. Απαντήστε στην είσοδο του χρήστη

Το ArFragment έχει ενσωματωμένη υποστήριξη για χειροκίνητες βρύσες, σύρσιμο, τσίμπημα και στρίψιμο.

Στην εφαρμογή μας, ο χρήστης θα προσθέσει ένα τρισδιάστατο μοντέλο σε ένα ARCore Plane, δίδοντας στο αεροπλάνο μια βρύση.

Για να προσφέρουμε αυτή τη λειτουργία, πρέπει να καταχωρήσουμε μια επιστροφή κλήσης που θα καλείται κάθε φορά που θα πετάξει ένα αεροπλάνο:

arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Επίπεδο αεροπλάνου, MotionEvent motionEvent) -> {if (dinoRenderable == null) {επιστροφή;}

4. Αγκυρώστε το μοντέλο σας

Σε αυτό το βήμα, πρόκειται να ανακτήσουμε ένα ArSceneView και να το προσαρτήσουμε σε ένα AnchorNode, ο οποίος θα χρησιμεύσει ως γονικός κόμβος της Σκηνής.

Το ArSceneView είναι υπεύθυνο για την εκτέλεση πολλών σημαντικών καθηκόντων ARCore, μεταξύ των οποίων η απόδοση των εικόνων κάμερας της συσκευής και η απεικόνιση ενός animation Sceneform UX που καταδεικνύει τον τρόπο με τον οποίο ο χρήστης πρέπει να κρατήσει και να μετακινήσει τη συσκευή του προκειμένου να ξεκινήσει την εμπειρία AR. Το ArSceneView θα επισημάνει επίσης τα αεροπλάνα που ανιχνεύει, έτοιμα για το χρήστη να τοποθετήσει τα 3D μοντέλα μέσα στη σκηνή.

Το στοιχείο ARSceneView έχει μια σκηνή συνδεδεμένη με αυτήν, η οποία είναι μια δομή δεδομένων γονικού-παιδιού που περιέχει όλους τους κόμβους που πρέπει να αποτυπωθούν.

Θα ξεκινήσουμε δημιουργώντας έναν κόμβο τύπου AnchorNode, ο οποίος θα λειτουργεί ως γονικός κόμβος του ArSceneView.

Όλοι οι κόμβοι άγκυρας παραμένουν στην ίδια πραγματική θέση στον κόσμο, δημιουργώντας έτσι έναν κόμβο αγκυροβόλησης εξασφαλίζουμε ότι τα τρισδιάστατα μοντέλα μας θα παραμείνουν σταθερά στη θέση τους μέσα στην ενισχυμένη σκηνή.

Ας δημιουργήσουμε τον κόμβο αγκυροβόλησης:

AnchorNode anchorNode = νέο AnchorNode (άγκυρα);

Στη συνέχεια, μπορούμε να ανακτήσουμε ένα ArSceneView χρησιμοποιώντας το getArSceneView () και να το επισυνάψουμε στον AnchorNode:

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

5. Προσθέστε υποστήριξη για μετακίνηση, κλιμάκωση και περιστροφή

Στη συνέχεια, θα δημιουργήσω έναν κόμβο τύπου TransformableNode. Το TransformableNode είναι υπεύθυνο για τη μετακίνηση, την κλιμάκωση και την περιστροφή των κόμβων, με βάση τις χειρονομίες των χρηστών.

Αφού δημιουργήσετε ένα TransformableNode, μπορείτε να το επισυνάψετε στο Renderable, το οποίο θα δώσει στο μοντέλο τη δυνατότητα να κλιμακώνεται και να μετακινείται ανάλογα με την αλληλεπίδραση του χρήστη. Τέλος, πρέπει να συνδέσετε το TransformableNode στο AnchorNode, σε μια σχέση γονέα-παιδιού που εξασφαλίζει το TransformableNode και Οι αποδιοργανωτές παραμένουν σταθεροί στη θέση τους μέσα στην ενισχυμένη σκηνή.

ΜετασχηματισμόςNode transformableNode = νέα μετασχηματιστήNode (arCoreFragment.getTransformationSystem ()); // Συνδέστε το μετασχηματιστόNode στο anchorNode // transformableNode.setParent (anchorNode). transformableNode.setRenderable (dinoRenderable); // Επιλέξτε τον κόμβο // transformableNode.select (); }); }}

Η ολοκληρωμένη MainActivity

Αφού εκτελέσετε όλα τα παραπάνω, το MainActivity σας θα πρέπει να μοιάζει με αυτό:

εισαγωγή καιroid.app.Activity; εισαγωγή καιroid.app.ActivityManager; εισαγωγή καιroid.appcompat.app.AppCompatActivity; εισαγωγή καιroid.content.Context. εισαγωγή καιroid.net.Uri; εισαγωγή καιroid.os.Build; εισαγωγή καιroid.os.Build.VERSION_CODES; εισαγωγή android.os.Bundle; εισαγωγή καιroid.util.log; εισαγωγή καιroid.view.MotionEvent; εισαγωγή καιroid.annotation.RequiresApi; εισαγωγή com.google.ar.core.Anchor; εισαγωγή com.google.ar.core.HitResult; εισαγωγή com.google.ar.core.Plane; εισαγωγή com.google.ar.sceneform.AnchorNode; εισαγωγή com.google.ar.sceneform.rendering.ModelRenderable; εισαγωγή com.google.ar.sceneform.ux.ArFragment. εισαγωγή com.google.ar.sceneform.ux.TransformableNode; η δημόσια κλάση MainActivity επεκτείνει την AppCompatActivity {ιδιωτική στατική τελική ακολουθία TAG = MainActivity.class.getSimpleName (); ιδιωτική στατική τελική διπλή MIN_OPENGL_VERSION = 3.0; // Δημιουργήστε μια μεταβλητή μέλους για ModelRenderable // ιδιωτικό ΜοντέλοRedable dinoRenderable; // Δημιουργία μεταβλητής μέλους για το ArFragment // ιδιωτικό ArFragment arCoreFragment; @RequiresApi (api = VERSION_CODES.N) @Ορισμένα προστατευμένα κενά onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); αν (! checkDevice ((αυτό))) {επιστροφή; } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Βρείτε το θραύσμα, χρησιμοποιώντας το διαχειριστή τεμαχίων // getSupportFragmentManager () findFragmentById (R.id.main_fragment); εάν (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// Δημιουργία του ModelRenderable // ModelRenderable.builder () .setSource (αυτό, R.raw.dinosaur) .build () .thenAccept (αποδόσιμη -> dinoRenderable = ) .εξαιρετικά (// Αν παρουσιαστεί σφάλμα ... // // μπορεί να εκτυπωθεί -> {// ... τότε εκτυπώστε τα ακόλουθα στο Logcat // Log.e (TAG, "Δεν είναι δυνατή η φόρτωση του rendering"), επιστρέψτε null; ) · } // Ακούστε για τα γεγονότα onTap // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Επίπεδο αεροπλάνου, MotionEvent motionEvent) -> {if (dinoRenderable == null) {επιστροφή;} Anchor anchor = hitResult.createAnchor (); κόμβος τύπου AnchorNode // AnchorNode anchorNode = νέο AnchorNode (άγκυρα) · // Συνδέστε το AnchorNode στη σκηνή // anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ()) // // Δημιουργία ενός κόμβου τύπου TransformableNode // ΜετασχηματιστήςNode μετασχηματιστήςNode = new TransformableNode (arCoreFragment.getTransformationSystem ()); // Συνδέστε το TransformableNode στο AnchorNode // μετασχηματιστόNode.setParent (anchorNode); // Επισύναψη του Renderable // transformableNode.setRenderable (dinoRenderable); // Ρύθμιση του κόμβου / / transformableNode.select ();}). } δημόσιο static boolean checkDevice (τελική δραστηριότητα δραστηριότητας) {// Εάν η συσκευή εκτελεί Android Marshmallow ή παλιότερη ... // αν (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 ... // αν (Double.parseDouble (openGlVersionString) <MIN_OPENGL_VERSION) {// ... τότε τυπώστε τα ακόλουθα στο Logcat // Log.e (TAG, " Απαιτεί OpenGL ES 3.0 ή νεότερη έκδοση "). activity.finish (); επιστροφή ψευδής? } επιστροφή true; }}

Μπορείτε να κατεβάσετε το ολοκληρωμένο έργο από το GitHub.

Δοκιμάστε την εφαρμογή πραγματικότητας Google ARCore augmented reality

Τώρα είστε έτοιμοι να δοκιμάσετε την εφαρμογή σας σε μια φυσική, υποστηριζόμενη συσκευή Android. Εάν δεν διαθέτετε μια συσκευή που υποστηρίζει το ARCore, τότε είναι δυνατό να δοκιμάσετε την εφαρμογή AR σας στο Android Emulator (με λίγο επιπλέον διαμόρφωση, την οποία θα καλύψουμε στην επόμενη ενότητα).

Για να δοκιμάσετε το έργο σας σε ένα φυσικός Συσκευή Android:

  • Εγκαταστήστε την εφαρμογή σας στη συσκευή προορισμού.
  • Όταν σας ζητηθεί, παραχωρήστε την πρόσβαση στην κάμερα της συσκευής σας.
  • Αν σας ζητηθεί να εγκαταστήσετε ή να ενημερώσετε την εφαρμογή ARCore, πατήστε "Συνέχεια" και, στη συνέχεια, ολοκληρώστε το διάλογο για να βεβαιωθείτε ότι εκτελείτε την πιο πρόσφατη και καλύτερη έκδοση του ARCore.
  • Θα πρέπει τώρα να δείτε μια προβολή κάμερας, συνοδευόμενη από μια κίνηση ενός χεριού που κρατά μια συσκευή. Τοποθετήστε τη φωτογραφική μηχανή σε μια επίπεδη επιφάνεια και μετακινήστε τη συσκευή σας με κυκλική κίνηση, όπως δείχνει η κινούμενη εικόνα. Μετά από λίγα λεπτά, θα πρέπει να εμφανιστεί μια σειρά από κουκίδες, που να δείχνουν ότι έχει εντοπιστεί ένα αεροπλάνο.

  • Μόλις είστε ευχαριστημένοι με τη θέση αυτών των κουκκίδων, δώστε τους μια βρύση - το μοντέλο 3D θα πρέπει τώρα να εμφανίζεται στο επιλεγμένο αεροπλάνο!

  • Δοκιμάστε να κινηθείτε γύρω από το μοντέλο. ανάλογα με το περιβάλλον σας, μπορεί να είστε σε θέση να κάνετε τα πλήρη 360 μοίρες γύρω από αυτό. Θα πρέπει επίσης να ελέγξετε ότι το αντικείμενο μετατοπίζει μια σκιά που είναι συνεπής με τις πηγές φωτός του πραγματικού κόσμου.

Δοκιμάζοντας το ARCore σε μια εικονική συσκευή Android

Για να δοκιμάσετε τις εφαρμογές σας ARCore σε μια εικονική συσκευή Android (AVD), θα χρειαστείτε έκδοση Emulator Android 27.2.9 ή νεότερη έκδοση. Επίσης, πρέπει να συνδεθείτε στο κατάστημα Google Play στο AVD σας και να έχετε ενεργοποιημένη την έκδοση OpenGL ES 3.0 ή υψηλότερη.

Για να ελέγξετε αν το OpenGL ES 3.0 ή μεγαλύτερο είναι επί του παρόντος ενεργοποιημένο στο AVD σας:

  • Ξεκινήστε το AVD σας κανονικά.
  • Ανοίξτε ένα νέο παράθυρο του τερματικού (Mac) ή μια γραμμή εντολών (Windows).
  • Αλλάξτε τον κατάλογο ("cd") ώστε η Γραμμή τερματικού / εντολών να δείχνει στη θέση του προγράμματος "adb" του Android SDK, για παράδειγμα η εντολή μου φαίνεται έτσι:

Cd / Users / jessicathornsby / Βιβλιοθήκη / Android / sdk / εργαλεία πλατφόρμας

  • Πατήστε το πλήκτρο "Enter" στο πληκτρολόγιό σας.
  • Αντιγράψτε / επικολλήστε την επόμενη εντολή στο τερματικό και, στη συνέχεια, πατήστε το πλήκτρο "Enter":

./adb logcat | grep eglMakeCurrent

Αν το Terminal επιστρέψει "ver 3 0" ή υψηλότερο, τότε το OpenGL ES έχει ρυθμιστεί σωστά. Εάν το Terminal ή το Command Prompt εμφανίζει κάτι πριν από το 3.0, τότε θα πρέπει να ενεργοποιήσετε το OpenGL ES 3.0:

  • Επιστρέψτε στο AVD σας.
  • Βρείτε τη λωρίδα των κουμπιών "Extended Control" που επιπλέουν μαζί με το Emulator Android και, στη συνέχεια, επιλέξτε "Ρυθμίσεις> Για προχωρημένους".
  • Μεταβείτε στο επίπεδο "OpenGL ES API> μέγιστο Renderer (μέχρι το OpenGL ES 3.1)."
  • Κάντε επανεκκίνηση του εξομοιωτή.

Στο παράθυρο "Τερματικό / Γραμμή εντολών", αντιγράψτε / επικολλήστε την ακόλουθη εντολή και, στη συνέχεια, πατήστε το πλήκτρο "Enter"

./adb logcat | grep eglMakeCurrent

Θα πρέπει τώρα να πάρετε ένα αποτέλεσμα "ver 3 0" ή υψηλότερο, πράγμα που σημαίνει ότι το OpenGL ES έχει ρυθμιστεί σωστά.

Τέλος, βεβαιωθείτε ότι το AVD σας εκτελεί την πιο πρόσφατη έκδοση του ARCore:

  • Προχωρήστε στη σελίδα GitHub του ARCore και κατεβάστε την τελευταία έκδοση του ARCore για τον εξομοιωτή. Για παράδειγμα, τη στιγμή της σύνταξης της πιο πρόσφατης έκδοσης ήταν το "ARCore_1.7.0.x86_for_emulator.apk"
  • Σύρετε και αποθέστε το APK στο τρέχον AVD.

Για να δοκιμάσετε το έργο σας σε ένα AVD, εγκαταστήστε την εφαρμογή σας και της παραχωρήστε πρόσβαση στην κάμερα του AVD όταν σας ζητηθεί.

Θα πρέπει τώρα να δείτε μια προβολή κάμερας ενός προσομοιωμένου δωματίου. Για να δοκιμάσετε την εφαρμογή σας, μετακινήστε τον εικονικό χώρο, βρείτε μια προσομοιωμένη επίπεδη επιφάνεια και κάντε κλικ για να τοποθετήσετε ένα μοντέλο σε αυτήν την επιφάνεια.

Μπορείτε να μετακινήσετε την εικονική κάμερα γύρω από τον εικονικό χώρο πατώντας παρατεταμένα τα πλήκτρα "Option" (macOS) ή "Alt" (Linux ή Windows) και στη συνέχεια χρησιμοποιώντας οποιαδήποτε από τις παρακάτω συντομεύσεις πληκτρολογίου:

  • Μετακίνηση αριστερά ή δεξιά. Πατήστε A ή D
  • Μετακίνηση προς τα κάτω ή προς τα επάνω. Πατήστε Q ή Ε.
  • Μετακίνηση προς τα εμπρός ή προς τα πίσω. Πατήστε W ή S.

Μπορείτε επίσης να "μετακινήσετε" γύρω από την εικονική σκηνή, πατώντας "Option" ή "Alt" και στη συνέχεια χρησιμοποιώντας το ποντίκι σας. Αυτό μπορεί να αισθανθεί λίγο clunky στην αρχή, αλλά με την πρακτική θα πρέπει να είναι σε θέση να διερευνήσει με επιτυχία τον εικονικό χώρο. Μόλις βρείτε ένα προσομοιωμένο επίπεδο, κάντε κλικ στις λευκές κουκίδες για να τοποθετήσετε το μοντέλο 3D σε αυτή την επιφάνεια.

Τυλίγοντας

Σε αυτό το άρθρο, δημιουργήσαμε μια απλή εφαρμογή επαυξημένης πραγματικότητας, χρησιμοποιώντας το ARCore και το plugin Sceneform.

Αν αποφασίσετε να χρησιμοποιήσετε το Google ARCore στα δικά σας έργα, φροντίστε να μοιραστείτε τις δημιουργίες σας στα παρακάτω σχόλια!

Το pigen Liquid Crytal είναι μια λεπτή, ελαφριά και τυποποιημένη θήκη TPU για το amung Galaxy Note 10 Plu. Τα κουμπιά καλύπτονται αλλά είναι εύκολο να πατηθούν, ένα ανυψωμένο χείλος διατηρεί την οθόνη...

Δεν είμαστε σε μια εποχή όπου η αποθήκευση σύννεφων είναι μια καλή ιδέα. Είναι αποδοτικό, δεν αναλαμβάνει την εσωτερική αποθήκευση και είναι πολύ πιο βολικό από το να μεταφέρετε έναν σκληρό δίσκο παν...

Περισσότερες Λεπτομέρειες