Poly API: Abrufen von 3D-Elementen für Ihre VR- und AR-Android-Apps

Autor: Peter Berry
Erstelldatum: 14 Lang L: none (month-012) 2021
Aktualisierungsdatum: 4 Kann 2024
Anonim
Poly API: Abrufen von 3D-Elementen für Ihre VR- und AR-Android-Apps - Apps
Poly API: Abrufen von 3D-Elementen für Ihre VR- und AR-Android-Apps - Apps

Inhalt


Sie haben eine großartige Idee für eine mobile Virtual Reality (VR) - oder Augmented Reality (AR) -App, aber keine Idee, wie Sie Ihre Vision zum Leben erwecken können?

Wenn Sie kein Android-Entwickler sind, der auch ein erfahrener 3D-Künstler ist, kann die Erstellung aller Ressourcen, die für ein immersives 360-Grad-Erlebnis erforderlich sind, ein entmutigender Prozess sein.

Nur weil Sie nicht über die Zeit, die Ressourcen oder die Erfahrung verfügen, die zum Erstellen von 3D-Modellen erforderlich sind, nicht bedeutet, dass Sie keine großartige VR- oder AR-App für Mobilgeräte erstellen können! Im World Wide Web ist eine Vielzahl von 3D-Ressourcen frei verfügbar. Außerdem stehen alle APIs, Frameworks und Bibliotheken zur Verfügung, die Sie zum Herunterladen und Rendern dieser Assets in Ihren Android-Anwendungen benötigen.

Lesen Sie weiter: Sie können jetzt jede Website mit Daydream VR besuchen. Sogar diesen.


In diesem Artikel werden wir uns mit Poly befassen, einem Online-Repository und einer API, mit denen Sie Tausende von 3D-Assets zur Hand haben. Am Ende dieses Artikels haben Sie eine App erstellt, mit der ein 3D-Poly-Asset zur Laufzeit abgerufen und anschließend mit der beliebten Processing for Android-Bibliothek gerendert wird.

Anzeigen von 3D-Objekten mit Poly

Wenn Sie sich jemals mit der Entwicklung von Unity befasst haben, ähnelt das Poly-Repository dem Unity Asset Store - mit der Ausnahme, dass alles in Poly kostenlos ist!

Viele der 3D-Modelle von Poly werden unter der Creative-Commons-Lizenz veröffentlicht. Sie können diese Assets also verwenden, ändern und neu mischen, sofern Sie dem Ersteller die entsprechende Berechtigung einräumen.

Alle 3D-Modelle von Poly sind mit den VR- und AR-Plattformen von Google wie Daydream und ARCore kompatibel. Sie können sie jedoch überall und nach Belieben verwenden. Möglicherweise können Sie sie sogar mit dem ARKit von Apple verwenden.


Wenn Sie Poly-Assets abrufen und anzeigen möchten, haben Sie zwei Möglichkeiten. Erstens können Sie die Assets auf Ihren Computer herunterladen und dann in Android Studio importieren, damit sie mit Ihrer Anwendung geliefert werden und zur APK-Größe beitragen, oder Sie können diese Assets zur Laufzeit mithilfe der Poly-API abrufen.

Die plattformübergreifende, REST-basierte Poly-API bietet programmgesteuerten Lesezugriff auf die riesige Sammlung von 3D-Modellen von Poly. Dies ist komplizierter als das Bündeln von Assets mit Ihrem APK. Das Abrufen von Poly-Assets zur Laufzeit bietet jedoch mehrere Vorteile, insbesondere die Kontrolle über die Größe Ihres APK, was sich auf die Anzahl der Benutzer auswirken kann, die Ihre Anwendung herunterladen.

Sie können auch die Poly-API verwenden, um Ihren Benutzern mehr Auswahlmöglichkeiten zu bieten. Wenn Sie beispielsweise ein Handyspiel entwickeln, können Sie Ihren Benutzern die Auswahl aus einer Reihe von Charaktermodellen ermöglichen.

Da Sie die Poly-Modelle modifizieren können, können Sie Ihren Benutzern sogar erlauben, ihren ausgewählten Charakter zu ändern, indem Sie beispielsweise die Haar- oder Augenfarbe ändern oder sie mit anderen Poly-Objekten kombinieren, z. B. mit verschiedenen Waffen und Rüstungen. Auf diese Weise kann Ihnen die Poly-API dabei helfen, eine beeindruckende Auswahl an 3D-Assets bereitzustellen, mit viel Spielraum für die Personalisierung der Erfahrung - und alles für vergleichsweise wenig Arbeit. Ihre Benutzer werden überzeugt sein, dass Sie eine Tonne Zeit damit verbracht haben, all diese 3D-Modelle akribisch zu fertigen!

Erstellen eines 3D-Modellierungsprojekts

Wir werden eine Anwendung erstellen, die ein bestimmtes Poly-Asset beim ersten Start der Anwendung abruft und dieses Asset auf Wunsch des Benutzers im Vollbildmodus anzeigt.

Um dieses Asset leichter abrufen zu können, verwende ich Fuel, eine HTTP-Netzwerkbibliothek für Kotlin und Android. Beginnen Sie, indem Sie ein neues Projekt mit den Einstellungen Ihrer Wahl erstellen. Wenn Sie jedoch dazu aufgefordert werden, wählen Sie „Kotlin-Unterstützung einbeziehen“.

Alle Aufrufe an die Poly-API müssen einen API-Schlüssel enthalten, mit dem Sie Ihre App identifizieren und Nutzungsbeschränkungen durchsetzen können. Während der Entwicklung und des Testens verwenden Sie häufig einen uneingeschränkten API-Schlüssel. Wenn Sie jedoch vorhaben, diese App freizugeben, müssen Sie einen auf Android beschränkten API-Schlüssel verwenden.

Um einen eingeschränkten Schlüssel zu erstellen, müssen Sie das SHA-1-Signaturzertifikat Ihres Projekts kennen. Lassen Sie uns jetzt die folgenden Informationen erhalten:

  • Wählen Sie die Registerkarte "Gradle" von Android Studio aus (auf dem folgenden Screenshot befindet sich der Cursor). Dies öffnet ein Fenster "Gradle-Projekte".

  • Doppelklicken Sie im Bedienfeld "Gradle-Projekte", um das Stammverzeichnis Ihres Projekts zu erweitern, und wählen Sie dann "Aufgaben> Android> Signaturbericht". Dadurch wird ein neues Bedienfeld am unteren Rand des Android Studio-Fensters geöffnet.
  • Wählen Sie die Schaltfläche "Aufgabenausführung / Textmodus umschalten" (in der folgenden Abbildung befindet sich der Cursor).

Das Fenster "Ausführen" wird jetzt aktualisiert und zeigt viele Informationen zu Ihrem Projekt an, einschließlich des SHA-1-Fingerabdrucks.

Erstellen Sie ein Google Cloud Platform-Konto

Um den erforderlichen API-Schlüssel zu erhalten, benötigen Sie ein Google Cloud Platform-Konto (GPC).

Wenn Sie kein Konto haben, können Sie sich für eine kostenlose 12-monatige Testversion anmelden, indem Sie auf der kostenlosen Seite "Cloud-Plattform testen" nach den Anweisungen suchen. Beachten Sie, dass eine Kreditkarte oder eine Debitkarte erforderlich ist. Auf der Seite "Häufig gestellte Fragen" wird dies jedoch lediglich zur Überprüfung Ihrer Identität verwendet.

Holen Sie sich Ihren Poly-API-Schlüssel

Sobald Sie alle angemeldet sind, können Sie die Poly-API aktivieren und Ihren Schlüssel erstellen:

  • Gehen Sie zur GCP-Konsole.
  • Wählen Sie das linierte Symbol in der oberen linken Ecke aus und wählen Sie "APIs & Services> Dashboard".
  • Wählen Sie "APIs und Dienste aktivieren".
  • Wählen Sie im linken Menü "Andere".
  • Wählen Sie die Karte "Poly API".
  • Klicken Sie auf die Schaltfläche "Aktivieren".
  • Nach einigen Augenblicken werden Sie zu einem neuen Bildschirm geführt. Öffnen Sie das Seitenmenü und wählen Sie "APIs & Services> Credentials".

  • Wählen Sie im folgenden Popup "Schlüssel einschränken".
  • Geben Sie Ihrem Schlüssel einen unverwechselbaren Namen.
  • Wählen Sie unter "Anwendungseinschränkungen" die Option "Android-Apps" aus.
  • Wählen Sie "Paketnamen und Fingerabdruck hinzufügen".
  • Kopieren Sie den SHA-1-Fingerabdruck Ihres Projekts in das Feld "Signaturzertifikat-Fingerabdruck".
  • Geben Sie den Paketnamen Ihres Projekts ein (er wird in Ihrem Manifest und am Anfang jeder Klassendatei angezeigt).
  • Klicken Sie auf "Speichern".

Sie werden nun zum Bildschirm "Anmeldeinformationen" Ihres Projekts weitergeleitet, der eine Liste aller Ihrer API-Schlüssel enthält - einschließlich des soeben erstellten polyaktivierten API-Schlüssels.

Projektabhängigkeiten: Fuel-, P3D- und Kotlin-Erweiterungen

Zum Abrufen und Anzeigen von Poly-Assets benötigen wir Unterstützung von einigen zusätzlichen Bibliotheken:

  • Treibstoff. Poly verfügt derzeit nicht über ein offizielles Android-Toolkit. Sie müssen daher mit der API direkt über die REST-Schnittstelle arbeiten. Um diesen Vorgang zu vereinfachen, verwende ich die Fuel HTTP-Netzwerkbibliothek.
  • Verarbeitung für Android. Ich verwende den P3D-Renderer dieser Bibliothek, um das Poly-Asset anzuzeigen.

Öffnen Sie die build.gradle-Datei Ihres Projekts und fügen Sie diese beiden Bibliotheken als Projektabhängigkeiten hinzu:

Abhängigkeiten {Implementierung fileTree (include:, dir: libs) Implementierung "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" Implementierung com.android.support:appcompat-v7:27.1.1 // Add the Fuel library / / implementierung com.github.kittinunf.fuel: fuel-android: 1.13.0 // Hinzufügen der Processing for Android-Engine // implementierung org.p5android: processing-core: 4.0.1}

Um unseren Code übersichtlicher zu gestalten, verwende ich auch Kotlin-Android-Erweiterungen. Fügen Sie also dieses Plugin hinzu, während die Datei build.gradle geöffnet ist:

Plugin anwenden: kotlin-android-extensions

Da wir das Asset aus dem Internet abrufen, benötigt unsere App die Internet-Berechtigung. Öffnen Sie Ihr Manifest und fügen Sie Folgendes hinzu:

Hinzufügen Ihres API-Schlüssels

Jedes Mal, wenn unsere App ein Asset von Poly anfordert, muss es einen gültigen API-Schlüssel enthalten. Ich verwende Platzhaltertext, aber Sie Muss Ersetzen Sie diesen Platzhalter durch Ihren eigenen API-Schlüssel, falls die Anwendung jemals funktionieren sollte.

Ich füge außerdem einen Haken hinzu, damit die Anwendung eine Warnung anzeigt, wenn Sie vergessen, den Text "INSERT-YOUR-API-KEY" zu ersetzen:

Import android.os.Bundle Import android.support.v7.app.AppCompatActivity-Klasse MainActivity: AppCompatActivity () {Begleitobjekt {const val APIKey = "EINFÜGEN-IHRES-API-SCHLÜSSELS"} Überschreibungsspaß bei Erstellen (savedInstanceState: Bundle?) { super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) // Wenn der API-Schlüssel mit "INSERT" beginnt ... // if (APIKey.startsWith ("INSERT")) {// dann zeige den folgenden Toast an ... .// Toast.makeText ("Sie haben Ihren API-Schlüssel nicht aktualisiert", Toast.LENGTH_SHORT) .show ()} else {... ... ...

Asset abrufen

Sie können ein beliebiges Asset auf der Google Poly-Website auswählen, ich verwende jedoch dieses Modell des Planeten Erde.

Sie rufen ein Asset anhand seiner ID ab, die am Ende des URL-Slugs angezeigt wird (im vorherigen Screenshot hervorgehoben). Wir kombinieren diese Asset-ID mit dem Poly-API-Host "https://poly.googleapis.com/v1".

Import android.content.Intent Import android.os.Bundle Import android.support.v7.app.AppCompatActivity Import android.widget.Toast Import com.github.kittinunf.fuel.android.extension.responseJson Import com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {Begleitobjekt {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} Spaß überschreiben onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT") {Toast.makeText ("Sie haben Ihren API-Schlüssel nicht aktualisiert", Toast.LENGTH_SHORT) .show ()} else {

Als Nächstes müssen wir mithilfe der httpGet () -Methode eine GET-Anforderung an die Asset-URL senden. Ich gebe auch an, dass der Antworttyp JSON sein muss:

Import android.content.Intent Import android.os.Bundle Import android.support.v7.app.AppCompatActivity Import android.widget.Toast Import com.github.kittinunf.fuel.android.extension.responseJson Import com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {Begleitobjekt {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} Spaß überschreiben onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT") {Toast.makeText (diesmal "Sie haben Ihren API-Schlüssel nicht aktualisiert", Toast.LENGTH_SHORT) .show ()} else {// Rufe einen Server auf und übergebe die Daten mit dem Methode "listOf" // assetURL.httpGet (listOf ("Schlüssel" für APIKey)). ResponseJson {request, response, result -> // Mach etwas mit der Antwort // result.fold ({val as set = it.obj ()

Das Asset kann verschiedene Formate haben, z. B. OBJ, GLTF und FBX. Wir müssen feststellen, dass das Asset im OBJ-Format vorliegt.

In diesem Schritt rufe ich auch den Namen und die URL aller Dateien ab, die wir herunterladen müssen.
einschließlich der Primärdatei des Assets („root“) sowie aller zugehörigen Material- und Texturdateien („Ressourcen“).

Wenn unsere Anwendung das Asset nicht korrekt abrufen kann, wird ein Toast angezeigt, der den Benutzer informiert.

Import android.content.Intent Import android.os.Bundle Import android.support.v7.app.AppCompatActivity Import android.widget.Toast Import com.github.kittinunf.fuel.android.extension.responseJson Import com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {Begleitobjekt {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} Spaß überschreiben onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT") {Toast.makeText (diesmal "Sie haben Ihren API-Schlüssel nicht aktualisiert", Toast.LENGTH_SHORT) .show ()} else {// Eine GET-Anforderung an die Asset-URL // assetURL senden. httpGet (listOf ("Schlüssel" zu APIKey)). responseJson {Anfrage, Antwort, Ergebnis -> // Tun Sie etwas mit der Antwort // result.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: String? = null // Überprüfen Sie das Format des Assets mithilfe des Arrays "formats" // val assetFormats = asset.getJSONArray ("formats") // Durchlaufen Sie alle Formate // for (i in 0 bis assetFormats.length ()) { val currentFormat = assetFormats.getJSONObject (i) // Verwenden Sie formatType, um den Formattyp dieser Ressource zu identifizieren. Wenn das Format OBJ ist… .// if (currentFormat.getString ("formatType") == "OBJ") {//... dann rufe die Stammdatei dieser Ressource ab, dh die OBJ-Datei // objectURL = currentFormat. getJSONObject ("root") .getString ("url") // Ruft alle Abhängigkeiten der Stammdatei ab. // materialLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("relativePath") materialLibraryURL = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_, _ -> File (filesDir, "globeAsset.obj")} .response {_ , _, result -> result.fold ({}, {// Wenn Sie die OBJ-Datei nicht finden oder herunterladen können, wird ein Fehler angezeigt. // Toast.makeText (dies, "Ressource kann nicht heruntergeladen werden", Toast.LENGTH_SHORT ) .show ()})} materialLibraryURL !!. httpDownload (). destination {_, _ -> File (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast. makeText (dies, "Ressource kann nicht heruntergeladen werden", Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (dies, "Ressource kann nicht heruntergeladen werden", Toast.LENGTH_SHORT) .show ()})}}

Wenn Sie das Projekt auf Ihrem Android-Smartphone oder -Tablet oder einem virtuellen Android-Gerät (AVD) installieren, wird das Asset zu diesem Zeitpunkt erfolgreich heruntergeladen, aber von der App nicht angezeigt. Beheben wir das jetzt!

Erstellen eines zweiten Bildschirms: Navigation hinzufügen

Wir werden das Asset im Vollbildmodus anzeigen. Aktualisieren Sie daher unsere Datei main_activity.xml mit einer Schaltfläche, die beim Tippen auf die Schaltfläche die Vollbildaktivität startet.

Fügen Sie nun den onClickListener am Ende der MainActivity.kt-Datei hinzu:

Import android.content.Intent Import android.os.Bundle Import android.support.v7.app.AppCompatActivity Import android.widget.Toast Import com.github.kittinunf.fuel.android.extension.responseJson Import com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {Begleitobjekt {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} Spaß überschreiben onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT") {Toast.makeText (diesmal "Sie haben Ihren API-Schlüssel nicht aktualisiert", Toast.LENGTH_SHORT) .show ()} else {assetURL.httpGet (listOf ("key" to APIKey)). responseJson {request, response, result -> result.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: Str ing? = null val assetFormats = asset.getJSONArray ("formats") für (i in 0 bis assetFormats.length ()) {val currentFormat = assetFormats.getJSONObject (i) if (currentFormat.getString ("formatType") == "OBJ" ) {objectURL = currentFormat.getJSONObject ("root") .getString ("url") materialLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("relativePath") materialLibraryURL = currentFormat.getJSONArray ("resources" ) .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_, _ -> File (filesDir, "globeAsset.obj")} .response {_, _, result -> result.fold ({}, {Toast.makeText (dies, "Ressource kann nicht heruntergeladen werden", Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!. httpDownload (). destination {_, _ -> File (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast.makeText (dies, "Ressource kann nicht heruntergeladen werden", Toast.LENGTH_SHORT) .show ()}}}, {Toast.makeText (dies, "Ressource kann nicht heruntergeladen werden", Toast.LENGTH_SHORT) .sh ow ()})} // Implementiere eine Schaltfläche // displayButton.setOnClickListener {val intent = Intent (this, SecondActivity :: class.java) startActivity (intent); }}}

Erstellen einer 3D-Leinwand

Nun erstellen wir die Aktivität, in der wir unser Asset im Vollbildmodus anzeigen:

  • Klicken Sie bei gedrückter Ctrl-Taste auf die MainActivity.kt-Datei Ihres Projekts und wählen Sie "Neu> Kotlin-Datei / Klasse".
  • Öffnen Sie die Dropdown-Liste "Art" und wählen Sie "Class".
  • Geben Sie dieser Klasse den Namen "SecondActivity" und klicken Sie dann auf "OK".

Um ein 3D-Objekt zu zeichnen, benötigen wir eine 3D-Leinwand! Ich werde den P3D-Renderer der Processing for Android-Bibliothek verwenden, dh die PApplet-Klasse erweitern, die settings () -Methode überschreiben und dann P3D als Argument an die fullScreen () -Methode übergeben. Wir müssen auch eine Eigenschaft erstellen, die das Poly-Asset als PShape-Objekt darstellt.

private fun displayAsset () {val canvas3D = Objekt: PApplet () {var polyAsset: PShape? = Null überschreibt die Spaßeinstellungen () {fullScreen (PConstants.P3D)}

Als Nächstes müssen wir das PShape-Objekt initialisieren, indem wir die setup () -Methode überschreiben, die loadShape () -Methode aufrufen und dann den absoluten Pfad der OBJ-Datei übergeben:

Überschreibe fun setup () {polyAsset = loadShape (File (filesDir, "globeAsset.obj"). absolutePath)}

Zeichnen auf der Leinwand von P3D

Um auf dieser 3D-Leinwand zu zeichnen, müssen wir die draw () -Methode überschreiben:

Spaß überschreiben draw () {background (0) shape (polyAsset)}}

Standardmäßig sind viele der von der Poly-API abgerufenen Assets kleiner. Wenn Sie diesen Code jetzt ausführen, wird das Asset je nach Bildschirmkonfiguration möglicherweise nicht einmal angezeigt. Beim Erstellen von 3D-Szenen erstellen Sie in der Regel eine benutzerdefinierte Kamera, mit der der Benutzer die Szene erkunden und Ihre 3D-Elemente in voller Breite anzeigen kann. Dies würde jedoch den Rahmen dieses Artikels sprengen. Daher ändere ich Größe und Position des Assets manuell, um sicherzustellen, dass es bequem auf dem Bildschirm angezeigt wird.

Sie können das Asset vergrößern, indem Sie einen negativen Wert an die scale () -Methode übergeben:

Skala (-10f)

Sie können die Position des Assets im virtuellen 3D-Raum mit der translate () -Methode und den folgenden Koordinaten anpassen:

  • X. Positioniert das Asset entlang der horizontalen Achse.
  • Y. Positioniert das Asset entlang der vertikalen Achse.
  • Z. Dies ist die Tiefen- / Höhenachse, die ein 2D-Objekt in ein 3D-Objekt umwandelt. Positive Werte erzeugen den Eindruck, dass das Objekt auf Sie zukommt, und negative Werte erzeugen den Eindruck, dass sich das Objekt von Ihnen wegbewegt.

Beachten Sie, dass Transformationen kumulativ sind, sodass alles, was nach der Funktion geschieht, den Effekt akkumuliert.

Ich verwende Folgendes:

übersetzen (-50f, -100f, 10f)

Hier ist der vollständige Code:

Spaß überschreiben draw () {background (0) scale (-10f) translate (-50f, -100f) // Zeichne das Asset durch Aufrufen der shape () -Methode // shape (polyAsset)}}

Als Nächstes müssen wir die entsprechende Layoutdatei erstellen, in der wir die 3D-Leinwand als FrameLayout-Widget hinzufügen:

  • Klicken Sie bei gedrückter Ctrl-Taste auf den Ordner "res> layout" Ihres Projekts.
  • Wählen Sie "Layout-Ressourcendatei".
  • Geben Sie dieser Datei den Namen "activity_second" und klicken Sie dann auf "OK".

Jetzt haben wir unser FrameLayout "asset_view" und müssen unsere SecondActivity darüber informieren! Kehren Sie zur Datei SecondActivity.kt zurück, erstellen Sie eine neue PFragment-Instanz und richten Sie sie in Richtung unseres Widgets „asset_view“ aus:

Import android.os.Bundle Import android.support.v7.app.AppCompatActivity Import kotlinx.android.synthetic.main.activity_second. * Importverarbeitung.android.PFragment Importverarbeitung.core.PApplet Importverarbeitung.core.PConstants Importverarbeitung.core .PShape-Import java.io.File-Klasse SecondActivity: AppCompatActivity () {Spaß beim Erstellen überschreiben (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_second) displayAsset ()} privater Spaß displayAsset () {val canvas3D = Objekt: PApplet () {var polyAsset: PShape? = null Spaßeinstellungen überschreiben () {Vollbild (PConstants.P3D)} Spaßeinstellungen überschreiben () {polyAsset = loadShape (File (filesDir, "globeAsset.obj"). absolutePath)} Spaßzeichnung überschreiben () {Hintergrundskala (0) (-10f) Form (polyAsset) übersetzen (-50f, -100f)}} // Folgendes hinzufügen // val assetView = PFragment (canvas3D) assetView.setView (asset_view, this)}}

Der letzte Schritt ist das Hinzufügen der SecondActivity zu Ihrem Manifest:

// Füge das Folgende hinzu //

Testen Sie Ihr Projekt

Jetzt können wir das fertige Projekt testen! Installieren Sie es auf Ihrem Android-Gerät oder AVD und stellen Sie sicher, dass Sie über eine aktive Internetverbindung verfügen. Sobald die App gestartet wird, lädt sie das Asset herunter und Sie können es anzeigen, indem Sie auf die Schaltfläche "Asset anzeigen" tippen.

Sie können dieses komplette Projekt von GitHub herunterladen.

Einpacken

In diesem Artikel wurde erläutert, wie Sie mit der Poly-API ein 3D-Asset zur Laufzeit abrufen und dieses Asset mithilfe der Processing for Android-Bibliothek anzeigen. Glauben Sie, dass die Poly-API das Potenzial hat, die VR- und AR-Entwicklung für mehr Menschen zugänglich zu machen? Lass es uns in den Kommentaren unten wissen!

verbunden

  • Google wird AR-Apps 2018 auf „Hunderte Millionen“ Android-Geräte bringen
  • Google bringt Ihnen kostenlos Informationen zu KI und maschinellem Lernen bei
  • 15 besten VR-Spiele für Google Cardboard
  • 10 besten VR-Apps für Google Cardboard
  • Was ist Google Fuchsia? Ist das das neue Android?
  • Was ist Google Duplex? - Funktionen, Erscheinungsdatum und mehr
  • So erstellen Sie eine VR-App für Android in nur 7 Minuten
  • Mobile VR-Headsets - Was sind Ihre besten Optionen?

Haben ie ich jemal gefragt, ob e möglich it, Android auf dem PC anzuzeigen? Abolut dank Android für Web. Ähnlich wie bei WhatApp for Web können ie mit for Web Ihren Computer mit ...

Die Vordereite de Telefon wirkt durch die waertropfenartige Einkerbung recht chlicht. Die Einfaungen auf beiden eiten ind minimal, aber da Kinn an der Untereite erregt Ihre Aufmerkamkeit. Ich hät...

Interessant