Poly API: Ανάκτηση στοιχείων 3D για τις εφαρμογές σας VR και AR Android

Συγγραφέας: Peter Berry
Ημερομηνία Δημιουργίας: 14 Αύγουστος 2021
Ημερομηνία Ενημέρωσης: 8 Ενδέχεται 2024
Anonim
Poly API: Ανάκτηση στοιχείων 3D για τις εφαρμογές σας VR και AR Android - Εφαρμογές
Poly API: Ανάκτηση στοιχείων 3D για τις εφαρμογές σας VR και AR Android - Εφαρμογές

Περιεχόμενο


Έχετε μια μεγάλη ιδέα για μια εφαρμογή κινητής εικονικής πραγματικότητας (VR) ή για την Αυξημένη Πραγματικότητα (AR), αλλά δεν έχετε ιδέα πώς να φέρετε το όραμά σας στη ζωή;

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

Ακριβώς επειδή δεν έχετε το χρόνο, τους πόρους ή την εμπειρία που χρειάζεστε για να δημιουργήσετε μοντέλα 3D, δεν το κάνει σημαίνει ότι δεν μπορείτε να δημιουργήσετε μια μεγάλη VR ή AR κινητή εφαρμογή! Υπάρχει μια τεράστια γκάμα τρισδιάστατων πόρων που διατίθενται δωρεάν στον Παγκόσμιο Ιστό, καθώς και όλα τα API, τα πλαίσια και οι βιβλιοθήκες που χρειάζεστε για να κατεβάσετε και να αποδώσετε αυτά τα στοιχεία στις εφαρμογές σας Android.

Διαβάστε παρακάτω: Μπορείτε τώρα να επισκεφθείτε οποιαδήποτε ιστοσελίδα χρησιμοποιώντας το Daydream VR. Ακόμα και αυτό.


Σε αυτό το άρθρο, θα εξετάσουμε το Poly, ένα online αποθετήριο και το API που θέτει χιλιάδες στοιχεία 3D στην άκρη των δακτύλων σας. Μέχρι το τέλος αυτού του άρθρου, θα έχετε δημιουργήσει μια εφαρμογή που ανακτά ένα περιουσιακό στοιχείο 3D Poly κατά τη διάρκεια εκτέλεσης και στη συνέχεια θα το κάνει χρησιμοποιώντας τη δημοφιλή βιβλιοθήκη επεξεργασίας για Android.

Εμφάνιση στοιχείων 3D με το Poly

Εάν έχετε βρεθεί ποτέ στην ανάπτυξη Unity, τότε το Poly repository είναι παρόμοιο με το Unity Asset Store - εκτός από το ότι τα πάντα στο Poly είναι δωρεάν!

Πολλά από τα τρισδιάστατα μοντέλα του Poly δημοσιεύονται υπό την άδεια Creative Commons, επομένως μπορείτε να χρησιμοποιήσετε, να τροποποιήσετε και να αναδιατάξετε αυτά τα στοιχεία, αρκεί να δώσετε στον δημιουργό την κατάλληλη πίστωση.

Όλα τα τρισδιάστατα μοντέλα του Poly έχουν σχεδιαστεί για να είναι συμβατά με τις πλατφόρμες VR και AR της Google, όπως το Daydream και το ARCore, αλλά μπορείτε να τα χρησιμοποιήσετε οπουδήποτε κι αν θέλετε - ενδεχομένως να τα χρησιμοποιήσετε και με το ARKit της Apple!


Όταν πρόκειται για την ανάκτηση και την προβολή των στοιχείων του Poly, έχετε δύο επιλογές. Πρώτον, μπορείτε να μεταφορτώσετε τα στοιχεία στον υπολογιστή σας και, στη συνέχεια, να τα εισαγάγετε στο Android Studio, ώστε να μεταφέρονται μαζί με την εφαρμογή σας και να συμβάλλουν στο μέγεθος του APK ή μπορείτε να ανακτήσετε αυτά τα στοιχεία κατά τη διάρκεια της εκτέλεσης χρησιμοποιώντας το Poly API.

Το cross-platform, βασισμένο στο REST Poly API παρέχει προγραμματική πρόσβαση μόνο για ανάγνωση στην τεράστια συλλογή πολυτελών μοντέλων του Poly. Αυτό είναι πιο περίπλοκο από τη δέσμευση περιουσιακών στοιχείων με το APK, αλλά υπάρχουν πολλά οφέλη για την ανάκτηση πολυάριθμων πόρων κατά τη διάρκεια εκτέλεσης, κυρίως δε ότι βοηθά να διατηρηθεί το μέγεθος του APK σας υπό έλεγχο, γεγονός που μπορεί να επηρεάσει τον αριθμό των ατόμων που κάνουν λήψη της αίτησής σας.

Μπορείτε επίσης να χρησιμοποιήσετε το Poly API για να δώσετε στους χρήστες σας περισσότερες επιλογές, για παράδειγμα αν αναπτύσσετε ένα κινητό παιχνίδι τότε θα μπορούσατε να αφήσετε τους χρήστες σας να επιλέξουν από μια σειρά μοντέλων χαρακτήρων.

Καθώς είστε ελεύθεροι να τροποποιήσετε τα μοντέλα Poly, μπορείτε ακόμη και να επιτρέψετε στους χρήστες σας να τροποποιήσουν τον επιλεγμένο χαρακτήρα τους, για παράδειγμα μεταβάλλοντας το χρώμα των μαλλιών ή των ματιών τους ή συνδυάζοντάς το με άλλα στοιχεία του Poly, όπως διαφορετικά όπλα και πανοπλίες. Με αυτό τον τρόπο, το πολυ API μπορεί να σας βοηθήσει να παραδώσετε μια εντυπωσιακή γκάμα τρισδιάστατων στοιχείων, με πολλά περιθώρια για την εξατομίκευση της εμπειρίας - και όλα για σχετικά μικρή εργασία. Οι χρήστες σας θα είναι πεπεισμένοι ότι έχετε περάσει έναν τόνο χρόνου, δημιουργώντας σχολαστικά όλα αυτά τα τρισδιάστατα μοντέλα!

Δημιουργία έργου 3D μοντελοποίησης

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

Για να μας βοηθήσετε να ανακτήσουμε αυτό το στοιχείο, θα χρησιμοποιήσω το Fuel, το οποίο είναι μια βιβλιοθήκη δικτύωσης HTTP για το Kotlin και το Android. Ξεκινήστε δημιουργώντας ένα νέο έργο με τις ρυθμίσεις της επιλογής σας, αλλά όταν σας ζητηθεί επιλέξτε "Συμπεριλάβετε την υποστήριξη Kotlin".

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

Για να δημιουργήσετε ένα κλειστό κλειδί, θα πρέπει να γνωρίζετε το πιστοποιητικό υπογραφής SHA-1 του έργου σας, οπότε ας πάρουμε αυτές τις πληροφορίες τώρα:

  • Επιλέξτε την καρτέλα "Gradle" του Android Studio (όπου ο δρομέας τοποθετείται στο παρακάτω στιγμιότυπο οθόνης). Αυτό ανοίγει ένα πάνελ "Gradle projects".

  • Στον πίνακα "Gradle Projects", κάντε διπλό κλικ για να επεκτείνετε το "root" του έργου σας και, στη συνέχεια, επιλέξτε "Tasks> Android> Reporting Signing." Αυτό ανοίγει ένα νέο πλαίσιο στο κάτω μέρος του παραθύρου του Android Studio.
  • Επιλέξτε το κουμπί "Εναλλαγή λειτουργιών εκτέλεσης / λειτουργία κειμένου" (όπου ο δρομέας βρίσκεται στο επόμενο στιγμιότυπο οθόνης).

Ο πίνακας "Εκτέλεση" θα ενημερωθεί τώρα για να εμφανίσει πολλές πληροφορίες σχετικά με το έργο σας, συμπεριλαμβανομένου του δακτυλικού αποτυπώματος SHA-1.

Δημιουργήστε έναν λογαριασμό Google Cloud Platform

Για να αποκτήσετε το απαραίτητο κλειδί API, θα χρειαστείτε έναν λογαριασμό πλατφόρμα Google Cloud (GPC).

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

Αποκτήστε το κλειδί πολυλειτουργικού API

Μόλις εγγραφείτε όλοι, μπορείτε να ενεργοποιήσετε το Poly API και να δημιουργήσετε το κλειδί:

  • Προχωρήστε στην κονσόλα GCP.
  • Επιλέξτε το εικονίδιο με επένδυση στην επάνω αριστερή γωνία και επιλέξτε "Πίνακας εργαλείων APIs & Services".
  • Επιλέξτε "Ενεργοποίηση API και υπηρεσιών".
  • Στο αριστερό μενού, επιλέξτε "Άλλο".
  • Επιλέξτε την κάρτα "Poly API".
  • Κάντε κλικ στο κουμπί "Ενεργοποίηση".
  • Μετά από λίγα λεπτά, θα μεταφερθείτε σε μια νέα οθόνη. ανοίξτε το δευτερεύον μενού και επιλέξτε "APIs & Services> Credentials".

  • Στο επόμενο αναδυόμενο παράθυρο, επιλέξτε "Πλήκτρο περιορισμού".
  • Δώστε στο κλειδί σας ένα διακριτικό όνομα.
  • Στην ενότητα "Περιορισμοί εφαρμογής", επιλέξτε "εφαρμογές Android".
  • Επιλέξτε "Προσθήκη ονόματος πακέτου και δακτυλικών αποτυπωμάτων".
  • Αντιγράψτε / επικολλήστε το δακτυλικό αποτύπωμα SHA-1 του έργου σας στο πεδίο "Αποτύπωμα πιστοποιητικού υπογραφής".
  • Καταχωρίστε το όνομα του πακέτου του έργου σας (εμφανίζεται στο Manifest σας και στην κορυφή κάθε αρχείου κλάσης).
  • Κάντε κλικ στην επιλογή "Αποθήκευση".

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

Σχέσεις εξαρτήσεων: Επεκτάσεις καυσίμου, P3D και Kotlin

Για να ανακτήσετε και να εμφανίσετε πολυκαταστήματα, θα χρειαστούμε ένα χέρι βοήθειας από ορισμένες πρόσθετες βιβλιοθήκες:

  • Καύσιμα. Το Poly επί του παρόντος δεν διαθέτει επίσημο πακέτο εργαλείων Android, επομένως θα χρειαστεί να εργαστείτε απευθείας με το API χρησιμοποιώντας τη διασύνδεσή του REST. Για να καταστήσω αυτή τη διαδικασία απλούστερη, θα χρησιμοποιήσω τη βιβλιοθήκη δικτύωσης FTP HTTP.
  • Επεξεργασία για Android. Θα χρησιμοποιήσω τον επεξεργαστή P3D αυτής της βιβλιοθήκης για την εμφάνιση του στοιχείου Poly.

Ανοίξτε το αρχείο build.gradle του έργου και προσθέστε αυτές τις δύο βιβλιοθήκες ως εξαρτήσεις έργου:

dependencies {implementation fileTree (περιλαμβάνει:, dir: libs) εφαρμογή "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" υλοποίηση com.android.support:appcompat-v7:27.1.1 // Προσθήκη βιβλιοθήκης καυσίμων / / implementation com.github.kittinunf.fuel: fuel-android: 1.13.0 // Προσθέστε την Επεξεργασία για Android engine // υλοποίηση org.p5android: processing-core: 4.0.1}

Για να κάνουμε τον κώδικα πιο συνοπτικό, θα χρησιμοποιώ και τις επεκτάσεις Android Kotlin, οπότε ας προσθέσουμε αυτό το plugin ενώ έχουμε ανοίξει το αρχείο build.gradle:

εφαρμόστε το plugin: επεκτάσεις kotlin-android

Τέλος, από τη στιγμή που ανακτάμε το στοιχείο από το Internet, η εφαρμογή μας χρειάζεται την άδεια Internet. Ανοίξτε το Manifest και προσθέστε τα εξής:

Προσθέτοντας το κλειδί API

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

Προσθέτω επίσης μια επιταγή, έτσι ώστε η εφαρμογή να εμφανίσει μια προειδοποίηση αν ξεχάσετε να αντικαταστήσετε το κείμενο "ΕΙΣΑΓΩΓΗ-ΑΡΙΘΜΟΣ-ΣΑΣ":

εισαγωγή καιroid.os.Bundle εισαγωγή καιroid.support.v7.app.AppCompatActivity class MainActivity: AppCompatActivity () {συνοδευτικό αντικείμενο {const val APIKey = "INSERT-YOUR-API-KEY"} αντικατάσταση διασκέδασης onCreate (savedInstanceState: Bundle; super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) // Εάν το κλειδί API αρχίζει με "INSERT" ... // if (APIKey.startsWith ("INSERT")) {// εμφανίζεται το ακόλουθο τοστ ... . / Toast.makeText (αυτό, "Δεν έχετε ενημερώσει το κλειδί API", Toast.LENGTH_SHORT) .show ()} αλλιώς {... ... ...

Ανάκτηση του στοιχείου

Μπορείτε να επιλέξετε οποιοδήποτε στοιχείο στον ιστότοπο Google Poly, αλλά θα χρησιμοποιήσω αυτό το μοντέλο του πλανήτη Γη.

Μπορείτε να ανακτήσετε ένα στοιχείο χρησιμοποιώντας το αναγνωριστικό του, το οποίο εμφανίζεται στο τέλος του σκουπιδιού URL (που επισημάνθηκε στο προηγούμενο στιγμιότυπο οθόνης). Συνδυάζουμε αυτό το αναγνωριστικό στοιχείου με τον κεντρικό υπολογιστή API του Poly, ο οποίος είναι "https://poly.googleapis.com/v1".

εισαγωγή καιroid.content.Intent εισαγωγή καιroid.os.Bundle εισαγωγή καιroid.support.v7.app.AppCompatActivity εισαγωγή android.widget.Toast εισαγωγή com.github.kittinunf.fuel.android.extension.responseJson εισαγωγή com.github.kittinunf.fuel .httpDownload εισαγάγετε com.github.kittinunf.fuel.httpΑπορροφήστε την εισαγωγή kotlinx.android.synthetic.main.activity_main. * Εισαγωγή java.io.File class MainActivity: AppCompatActivity () {σύντροφος αντικείμενο {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} αντικατάσταση διασκέδασης onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) εάν ( APIKey.startsWith ("INSERT")) {Toast.makeText (αυτό, "Δεν ενημερώσατε το κλειδί API", Toast.LENGTH_SHORT) .show ()} else {

Στη συνέχεια, πρέπει να κάνουμε ένα αίτημα GET στη διεύθυνση URL του στοιχείου, χρησιμοποιώντας τη μέθοδο httpGet (). Επίσης, διευκρινίζω ότι ο τύπος απόκρισης πρέπει να είναι JSON:

εισαγωγή καιroid.content.Intent εισαγωγή καιroid.os.Bundle εισαγωγή καιroid.support.v7.app.AppCompatActivity εισαγωγή android.widget.Toast εισαγωγή com.github.kittinunf.fuel.android.extension.responseJson εισαγωγή com.github.kittinunf.fuel .httpDownload εισαγάγετε com.github.kittinunf.fuel.httpΑπορροφήστε την εισαγωγή kotlinx.android.synthetic.main.activity_main. * Εισαγωγή java.io.File class MainActivity: AppCompatActivity () {σύντροφος αντικείμενο {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} αντικατάσταση διασκέδασης onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) εάν ( APIKey.startsWith ("INSERT")) {Toast.makeText (αυτό, "Δεν ενημερώσατε το κλειδί API", Toast.LENGTH_SHORT) .show ()} else {// Κάντε μια κλήση διακομιστή και μετά περάστε τα δεδομένα χρησιμοποιώντας το Μέθοδος "listOf" // assetURL.httpGet (listOf ("κλειδί" στο APIKey)) responseJson {αίτημα, απάντηση, αποτέλεσμα -> // Κάνετε κάτι με την απάντηση // result.fold ({ set = it.obj ()

Το στοιχείο μπορεί να έχει διάφορες μορφές, όπως OBJ, GLTF και FBX. Πρέπει να προσδιορίσουμε ότι το στοιχείο είναι σε μορφή OBJ.

Σε αυτό το βήμα, ανακτώνται επίσης το όνομα και η διεύθυνση URL όλων των αρχείων που πρέπει να κατεβάσετε,
συμπεριλαμβανομένου του πρωτεύοντος αρχείου του περιουσιακού στοιχείου ("root"), συν όλα τα σχετικά αρχεία υλικού και υφής ("πόροι").

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

εισαγωγή καιroid.content.Intent εισαγωγή καιroid.os.Bundle εισαγωγή καιroid.support.v7.app.AppCompatActivity εισαγωγή android.widget.Toast εισαγωγή com.github.kittinunf.fuel.android.extension.responseJson εισαγωγή com.github.kittinunf.fuel .httpDownload εισαγάγετε com.github.kittinunf.fuel.httpΑπορροφήστε την εισαγωγή kotlinx.android.synthetic.main.activity_main. * Εισαγωγή java.io.File class MainActivity: AppCompatActivity () {σύντροφος αντικείμενο {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} αντικατάσταση διασκέδασης onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) εάν ( APIKey.startsWith ("INSERT")) {Toast.makeText (αυτό, "Δεν έχετε ενημερώσει το κλειδί API", Toast.LENGTH_SHORT) .show ()} else {// Δημιουργία αίτησης GET στη διεύθυνση URL του asset // assetURL. Η απάντηση Json {request, response, result -> // Κάνε κάτι με την απάντηση // result.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: Η συμβολοσειρά; = null var materialLibraryURL: Η συμβολοσειρά; = null // Ελέγξτε τη μορφή του στοιχείου, χρησιμοποιώντας τον πίνακα "formats" // val assetFormats = asset.getJSONArray ("μορφές") // Βρόχος σε όλες τις μορφές // για (i σε 0 έως ότου το στοιχείο assetFormats.length ()) { val currentFormat = assetFormats.getJSONObject (i) // Χρησιμοποιήστε το formatType για να προσδιορίσετε τον τύπο μορφής αυτού του πόρου. Αν το σχήμα είναι OBJ ... .//, τότε (τρέχουσαFormat.getString ("formatType") == "OBJ") {// ... τότε ανακτήστε το αρχείο 'root' αυτού του πόρου, δηλαδή το αρχείο OBJ // objectURL = currentFormat. getJSONObject ("root") .getString ("url") // Ανάκτηση όλων των εξαρτήσεων του root file // materialLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("relativePath") materialLibraryURL = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("url") break}} objectURL !! httpDownload () destination {_, _-> Αρχείο (fileDir, globeAsset.obj) , _, αποτέλεσμα -> result.fold ({}, {// Αν δεν μπορείτε να εντοπίσετε ή να κατεβάσετε το αρχείο OBJ, εμφανίστε ένα σφάλμα // Toast.makeText (αυτό, "Αδυναμία λήψης πόρων", Toast.LENGTH_SHORT ) .show ()})}} materialLibraryURL !!. httpDownload () προορισμός {_, _ -> Αρχείο (filesDir, materialLibraryName)} .response {_, _, αποτέλεσμα -> result.fold ({}, makeText (αυτό, "Δεν είναι δυνατή η λήψη πόρων", Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (αυτό, "Δεν είναι δυνατή η λήψη πόρων", Toast.LENGTH_SHORT) .show ()})}}}

Σε αυτό το σημείο, εάν εγκαταστήσετε το έργο στο Android smartphone ή στο tablet σας ή στην Εικονική συσκευή Android (AVD), τότε το στοιχείο θα μεταφορτωθεί με επιτυχία, αλλά η εφαρμογή δεν θα την εμφανίσει στην πραγματικότητα. Ας το διορθώσουμε τώρα!

Δημιουργία δεύτερης οθόνης: Προσθήκη πλοήγησης

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

Τώρα ας προσθέσουμε το onClickListener στο τέλος του αρχείου MainActivity.kt:

εισαγωγή καιroid.content.Intent εισαγωγή καιroid.os.Bundle εισαγωγή καιroid.support.v7.app.AppCompatActivity εισαγωγή android.widget.Toast εισαγωγή com.github.kittinunf.fuel.android.extension.responseJson εισαγωγή com.github.kittinunf.fuel .httpDownload εισαγάγετε com.github.kittinunf.fuel.httpΑπορροφήστε την εισαγωγή kotlinx.android.synthetic.main.activity_main. * Εισαγωγή java.io.File class MainActivity: AppCompatActivity () {σύντροφος αντικείμενο {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} αντικατάσταση διασκέδασης onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) εάν ( APIKey.startsWith ("INSERT")) {Toast.makeText (αυτό, "Δεν ενημερώσατε το κλειδί API", Toast.LENGTH_SHORT) .show ()} else {assetURL.httpGet (listOf ("κλειδί" στο APIKey)). responseJson {αίτημα, απάντηση, αποτέλεσμα -> result.fold ({val asset = it.obj () var objectURL: String; = null var materialLibraryName: String; = null var materialLibraryURL: Str ες; = (null value) Ακαδημαϊκά Στοιχεία = asset.getJSONArray ("formats") για (i σε 0 έως ότου το στοιχείο assetFormats.length ()) {val currentFormat = assetFormats.getJSONObject (i) if (currentFormat.getString) ) {objectURL = τρέχουσαFormat.getJSONObject ("root") .getString ("url") materialLibraryName = τρέχουσαFormat.getJSONArray ("πόροι") .getJSONObject (0) .getStringLibraryURL = currentFormat.getJSONArray ) .getJSONObject (0) .getString ("url") break}} objectURL !! .Download () destination {_, _-> Αρχείο (αρχείοDir, "globeAsset.obj")}. -> result.fold ({}, {Toast.makeText (αυτό, "Δεν είναι δυνατή η λήψη πόρων", Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!. (.) ()) .response {_, _, αποτέλεσμα -> result.fold ({}, {Toast.makeText (αυτό δεν είναι δυνατή η λήψη πόρων, Toast.LENGTH_SHORT) .show {Toast.makeText (αυτό, "Δεν είναι δυνατή η λήψη πόρων", Toast.LENGTH_SHORT) .sh ow ()})} // Εφαρμογή ενός κουμπιού // displayButton.setOnClickListener {val intent = Πρόθεση (αυτό, SecondActivity :: class.java) startActivity (πρόθεση); }}}

Δημιουργία ενός 3D καμβά

Τώρα, ας δημιουργήσουμε τη Δραστηριότητα όπου θα προβάλλουμε το στοιχείο μας σε λειτουργία πλήρους οθόνης:

  • Κάντε κλικ στο Control-κλικ στο αρχείο MainActivity.kt του έργου σας και επιλέξτε "New> Kotlin File / Class".
  • Ανοίξτε το αναπτυσσόμενο μενού "Kind" και επιλέξτε "Class."
  • Δώστε αυτή την κλάση το όνομα "SecondActivity", και στη συνέχεια κάντε κλικ στο κουμπί "OK".

Προκειμένου να σχεδιάσουμε ένα 3D αντικείμενο, χρειαζόμαστε έναν 3D καμβά! Πρόκειται να χρησιμοποιήσω τον επεξεργαστή P3D της επεξεργασίας για την επεξεργασία του Android, που σημαίνει επέκταση της κλάσης PApplet, παρακάμπτοντας τη μέθοδο settings () και στη συνέχεια διαβιβάζοντας το P3D ως όρισμα στη μέθοδο fullScreen (). Επίσης, πρέπει να δημιουργήσουμε μια ιδιότητα που αντιπροσωπεύει το πολυμέσο ως αντικείμενο PShape.

ιδιωτική απεικόνιση διασκέδασηςAsset () {val canvas3D = αντικείμενο: PApplet () {var polyAsset: PShape; = null αντικατάσταση ρυθμίσεων διασκέδασης () {fullScreen (PConstants.P3D)}

Στη συνέχεια, πρέπει να αρχικοποιήσουμε το αντικείμενο PShape, παρακάμπτοντας τη μέθοδο setup (), καλώντας τη μέθοδο loadShape () και μετά περάνοντας την απόλυτη διαδρομή του αρχείου .obj:

αντικατάσταση διαμόρφωσης διασκέδασης () {polyAsset = loadShape (αρχείο (filesDir, "globeAsset.obj") absolutePath)}

Σχεδιάζοντας τον καμβά του P3D

Για να σχεδιάσουμε αυτόν τον 3D καμβά, πρέπει να αντικαταστήσουμε τη μέθοδο draw ():

αντικατάσταση διάστασης διασκέδασης () {φόντο (0) (polyAsset)}}

Από προεπιλογή, πολλά από τα στοιχεία που ανακτώνται από το Poly API βρίσκονται στη μικρότερη πλευρά, οπότε αν εκτελέσετε αυτόν τον κώδικα τώρα, τότε ίσως να μην δείτε το στοιχείο, ανάλογα με τη διαμόρφωση της οθόνης. Όταν δημιουργείτε τρισδιάστατες σκηνές, συνήθως θα δημιουργήσετε μια προσαρμοσμένη κάμερα, έτσι ώστε ο χρήστης να μπορεί να εξερευνήσει τη σκηνή και να προβάλει τα 3D στοιχεία σας από τους 360 βαθμούς. Ωστόσο, αυτό είναι πέρα ​​από το πεδίο εφαρμογής αυτού του άρθρου, ώστε να αλλάξω το μέγεθος και τη θέση του στοιχείου χειροκίνητα, για να βεβαιωθείτε ότι ταιριάζει άνετα στην οθόνη.

Μπορείτε να αυξήσετε το μέγεθος του στοιχείου, διαβάζοντας μια αρνητική τιμή στη μέθοδο scale ():

κλίμακα (-10στ)

Μπορείτε να προσαρμόσετε τη θέση του περιουσιακού στοιχείου στον εικονικό χώρο 3D χρησιμοποιώντας τη μέθοδο translate () και τις ακόλουθες συντεταγμένες:

  • Χ. Τοποθετεί το περιουσιακό στοιχείο κατά μήκος του οριζόντιου άξονα.
  • Υ. Τοποθετεί το στοιχείο κατά μήκος του κάθετου άξονα.
  • Z. Αυτός είναι ο άξονας "βάθος / ύψος", ο οποίος μετατρέπει ένα αντικείμενο 2D σε ένα αντικείμενο 3D. Οι θετικές τιμές δημιουργούν την εντύπωση ότι το αντικείμενο έρχεται προς το μέρος σας και οι αρνητικές τιμές δημιουργούν την εντύπωση ότι το αντικείμενο κινείται μακριά από εσάς.

Σημειώστε ότι οι μετασχηματισμοί είναι σωρευτικοί, οπότε ό, τι συμβαίνει μετά τη λειτουργία συσσωρεύει το αποτέλεσμα.

Χρησιμοποιώ τα εξής:

μεταφράστε (-50f, -100f, 10f)

Εδώ είναι ο ολοκληρωμένος κώδικας:

(-10f) translate (-50f, -100f) // Σχεδιάστε το στοιχείο καλώντας τη μέθοδο shape () // shape (polyAsset)}}

Στη συνέχεια, πρέπει να δημιουργήσουμε το αντίστοιχο αρχείο διαμόρφωσης, όπου θα προσθέσουμε τον 3D καμβά ως widget FrameLayout:

  • Κάντε κλικ στο Control-κλικ στο φάκελο "res> layout του έργου σας.
  • Επιλέξτε "Αρχείο πόρου διάταξης".
  • Δώστε αυτό το αρχείο το όνομα "activity_second", και στη συνέχεια κάντε κλικ στο κουμπί "OK".

Τώρα έχουμε το FrameLayout "asset_view" μας, πρέπει να αφήσουμε την SecondActivity να μάθει γι 'αυτό! Ανατρέξτε στο αρχείο SecondActivity.kt, δημιουργήστε μια νέα παράσταση PFragment και τοποθετήστε την προς την κατεύθυνση του γραφικού στοιχείου "asset_view":

εισαγωγή καιroid.os.Bundle εισαγωγή καιroid.support.v7.app.AppCompatActivity εισαγωγή kotlinx.android.synthetic.main.activity_ δευτερόλεπτο. * εισαγωγή επεξεργασίας.android.PFragment εισαγωγής processing.core.PApplet εισαγωγής επεξεργασία.core.PConstants εισαγωγή processing.core . Εισαγωγή σφαίρας java.io.File class SecondActivity: AppCompatActivity () {override fun onCreate (savedInstanceState: Bundle;) {super.onCreate (savedInstanceState) setContentView (R.layout.activity_second) displayAsset () canvas3D = αντικείμενο: PApplet () {var polyAsset: PShape? = null override fun () () {fullScreen (PConstants.P3D)} αντικατάσταση διασκέδασης () {polyAsset = loadShape (αρχείο (filesDir, "globeAsset.obj" (-10f) μεταφράζει (-50f, -100f) σχήμα (polyAsset)}} // Προσθέστε το ακόλουθο // val assetView = PFragment (canvas3D) assetView.setView (asset_view, this)}}

Το τελευταίο βήμα, είναι η προσθήκη της Δεύτερης Δράσης στο Δηλωτικό σας:

// Προσθέστε τα ακόλουθα //

Δοκιμάστε το έργο σας

Είμαστε έτοιμοι να δοκιμάσουμε το τελικό έργο! Εγκαταστήστε τη συσκευή σας στη συσκευή σας Android ή στο AVD και βεβαιωθείτε ότι έχετε ενεργή σύνδεση στο Internet. Μόλις ξεκινήσει η εφαρμογή, θα μεταφορτώσει το στοιχείο και στη συνέχεια μπορείτε να το δείτε δίνοντας το κουμπί "Πακέτο προβολής" πατώντας.

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

Τυλίγοντας

Σε αυτό το άρθρο, εξετάσαμε τον τρόπο χρήσης του Poly API για την ανάκτηση ενός τρισδιάστατου στοιχείου κατά το χρόνο εκτέλεσης και τον τρόπο εμφάνισης αυτού του στοιχείου χρησιμοποιώντας τη βιβλιοθήκη επεξεργασίας για το Android. Πιστεύετε ότι το Poly API έχει τη δυνατότητα να καταστήσει την ανάπτυξη VR και AR πιο προσιτή σε περισσότερους ανθρώπους; Ενημερώστε μας στα σχόλια παρακάτω!

Σχετιζομαι με

  • Η Google θα φέρει εφαρμογές AR σε "εκατοντάδες εκατομμύρια" συσκευές Android το 2018
  • Η Google θα σας διδάξει δωρεάν για AI και μηχανική μάθηση
  • 15 καλύτερα παιχνίδια VR για το Google Cardboard
  • 10 καλύτερες εφαρμογές VR για το Google Cardboard
  • Τι είναι το Google Fuchsia; Είναι αυτό το νέο Android;
  • Τι είναι το Google Duplex; - χαρακτηριστικά, ημερομηνία κυκλοφορίας και άλλα
  • Πώς να δημιουργήσετε μια εφαρμογή VR για Android σε μόλις 7 λεπτά
  • Κινητά ακουστικά VR - ποιες είναι οι καλύτερες επιλογές σας;

Ας είμαστε ειλικρινείς, οι βοηθοί φωνής είναι δροσεροί. Μιλώντας σε Alexa, iri, ή Cortana, είναι ίσως το πιο κοντινό πράγμα που οι περισσότεροι από εμάς θα φτάσουν στο δικό μας ρομπότ μπάτλερ. Αλλά, έ...

Ξύπνα υπναρά! Λάβατε τα Z που χρειάζεστε; Εάν όχι, θα μπορούσε να οφείλεται σε μια υποκείμενη κατάσταση. Πάρτε τη ρίζα του με το Go2leep, το μικρότερο εργαλείο αξιολόγησης ύπνου στην αγορά, που προσφέ...

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