Poly API: Načítání 3D aktiv pro vaše VR a AR Android aplikace

Autor: Peter Berry
Datum Vytvoření: 14 Lang L: none (month-012) 2021
Datum Aktualizace: 4 Smět 2024
Anonim
Poly API: Načítání 3D aktiv pro vaše VR a AR Android aplikace - Aplikace
Poly API: Načítání 3D aktiv pro vaše VR a AR Android aplikace - Aplikace

Obsah


Máte skvělý nápad pro mobilní aplikaci Virtuální realita (VR) nebo Augmented Reality (AR), ale netušíte, jak oživit svou vizi?

Pokud nejste vývojář systému Android, který se také stane zkušeným umělcem 3D, může být vytváření veškerých aktiv potřebných k tomu, aby vám poskytl pohlcující zážitek 360 stupňů, skličující.

Jen proto, že nemáte čas, zdroje ani zkušenosti potřebné k vytváření 3D modelů, ne znamená, že nemůžete vytvořit skvělou mobilní aplikaci VR nebo AR! Na World Wide Web je volně k dispozici obrovská řada 3D zdrojů, plus všechna rozhraní API, rámce a knihovny, které je třeba stáhnout a vykreslit v aplikacích pro Android.

Přečtěte si další: Nyní můžete navštívit jakýkoli web pomocí Daydream VR. I tenhle.

V tomto článku se podíváme na Poly, online úložiště a API, které dává tisíce 3D aktiv na dosah ruky. Na konci tohoto článku vytvoříte aplikaci, která za běhu načte dílo 3D Poly a poté jej vykreslí pomocí populární knihovny Zpracování pro Android.


Zobrazení 3D děl pomocí Poly

Pokud jste se někdy věnovali vývoji Unity, pak je úložiště Poly podobné jako Unity Asset Store - kromě toho, že vše v Poly je zdarma!

Mnoho 3D modelů Poly je zveřejněno na základě licence Creative Commons, takže můžete tyto prostředky používat, upravovat a remixovat, pokud tvůrci udělíte odpovídající kredit.

Všechny 3D modely Poly jsou navrženy tak, aby byly kompatibilní s platformami VR a AR společnosti Google, jako jsou Daydream a ARCore, ale můžete je používat kdekoli a jakkoli chcete - potenciálně je můžete dokonce použít s Apple ARKit!

Pokud jde o vyhledávání a zobrazování položek Poly, máte dvě možnosti. Nejprve si můžete stáhnout data do svého počítače a poté je importovat do Android Studio, aby se dodávaly s vaší aplikací a přispívaly k velikosti APK, nebo je můžete načíst za běhu pomocí rozhraní Poly API.


Rozhraní Poly API založené na REST poskytuje programový přístup k obrovské sbírce 3D modelů Poly, jen pro čtení. To je komplikovanější než sdružování aktiv s APK, ale existuje několik výhod při načítání Poly aktiv za běhu, zejména to, že to pomáhá udržet vaši APK velikost pod kontrolou, což může ovlivnit, kolik lidí stahuje vaši aplikaci.

Můžete také použít rozhraní Poly API a dát tak uživatelům větší výběr, například pokud vyvíjíte mobilní hru, mohli byste si nechat uživatele vybrat si z řady znakových modelů.

Vzhledem k tomu, že máte možnost modifikovat modely Poly, můžete dokonce uživatelům umožnit vylepšit jejich vybraný charakter, například změnou barvy vlasů nebo očí, nebo jejich kombinací s jinými aktivy Poly, jako jsou různé zbraně a brnění. Tímto způsobem vám Poly API pomůže dodat působivou škálu 3D aktiv, se spoustou prostoru pro přizpůsobení zážitku - a to vše pro poměrně malou práci. Vaši uživatelé budou přesvědčeni, že jste strávili spoustu času a pečlivě vytvořili všechny tyto 3D modely!

Vytvoření projektu 3D modelování

Chystáme se vytvořit aplikaci, která při prvním spuštění aplikace načte konkrétní dílo Poly a poté na žádost uživatele zobrazí dané dílo v režimu celé obrazovky.

K získání tohoto díla použiji Fuel, což je síťová knihovna HTTP pro Kotlin a Android. Začněte vytvořením nového projektu s nastavením podle vašeho výběru, ale po zobrazení výzvy zvolte „Zahrnout podporu Kotlin.“

Všechna volání na rozhraní Poly API musí obsahovat klíč API, který se používá k identifikaci aplikace a vynucení omezení využití. Během vývoje a testování často používáte neomezený klíč API, ale pokud máte nějaké plány na vydání této aplikace, musíte použít klíč API s omezením Android.

Chcete-li vytvořit omezený klíč, musíte znát podpisový certifikát SHA-1 svého projektu, takže si nyní získáme tyto informace:

  • Vyberte kartu „Gradle“ aplikace Android Studio (kde je kurzor umístěn na následující obrazovce). Otevře se panel „Gradle projects“.

  • Na panelu Přepracovat projekty poklepáním rozbalte kořen vašeho projektu a poté vyberte Úkoly> Android> Zpráva o podpisu. Tímto se otevře nový panel ve spodní části okna aplikace Android Studio.
  • Vyberte tlačítko „Přepnout provádění úkolů / textový režim“ (kde je kurzor umístěn na následující obrazovce).

Panel „Spustit“ se nyní aktualizuje a zobrazí spoustu informací o vašem projektu, včetně jeho otisků prstů SHA-1.

Vytvořte si účet Google Cloud Platform

K získání potřebného klíče API budete potřebovat účet Google Cloud Platform (GPC).

Pokud nemáte účet, můžete se zaregistrovat na 12měsíční bezplatnou zkušební verzi tak, že přejdete na stránku Vyzkoušejte Cloud Platform zdarma a postupujte podle pokynů. Nezapomeňte, že je vyžadována kreditní karta nebo debetní karta, ale podle stránky Často kladené otázky se používá pouze k ověření vaší identity a „během bezplatné zkušební doby vám nebudeme účtovat ani fakturovat.“

Získejte klíč Poly API

Jakmile se všichni zaregistrujete, můžete povolit rozhraní Poly API a vytvořit svůj klíč:

  • Vydejte se do konzole GCP.
  • V levém horním rohu vyberte podšívku a zvolte „API a služby> Dashboard“.
  • Vyberte možnost „Povolit rozhraní API a služby“.
  • V nabídce vlevo vyberte možnost „Jiné“.
  • Vyberte kartu „Poly API“.
  • Klikněte na tlačítko „Povolit“.
  • Po chvíli se dostanete na novou obrazovku; otevřete postranní nabídku a zvolte „API a služby> Pověření“.

  • V následujícím vyskakovacím okně vyberte možnost „Omezit klíč“.
  • Dejte svému klíči výrazný název.
  • V části Omezení aplikací vyberte možnost Aplikace pro Android.
  • Vyberte „Přidat název balíčku a otisk prstu“.
  • Zkopírujte / vložte otisk prstu SHA-1 projektu do pole „Otisk podpisu“.
  • Zadejte název balíčku projektu (zobrazí se ve vašem manifestu a v horní části každého souboru třídy).
  • Klikněte na tlačítko Uložit.

Nyní se dostanete na obrazovku „Pověření“ vašeho projektu, která obsahuje seznam všech vašich klíčů API - včetně klíče API s aktivovaným poly, které jste právě vytvořili.

Závislosti projektu: Rozšíření paliv, P3D a Kotlin

K načtení a zobrazení aktiv Poly potřebujeme pomocnou ruku od některých dalších knihoven:

  • Palivo. Poly v současné době nemá oficiální sadu nástrojů pro Android, takže s rozhraním REST budete muset pracovat přímo s rozhraním API. Pro zjednodušení tohoto procesu budu používat síťovou knihovnu Fuel HTTP.
  • Zpracování pro Android. Budu používat zobrazovač P3D této knihovny k zobrazení díla Poly.

Otevřete soubor build.gradle projektu a přidejte tyto dvě knihovny jako závislosti projektu:

závislosti {implementace fileTree (zahrnují:, dir: libs) implementace "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" implementace com.android.support:appcompat-v7:27.1.1 // Přidat knihovnu Fuel / / implementace com.github.kittinunf.fuel: Fuel-android: 1.13.0 // Přidat procesor pro Android engine // implementace org.p5android: processing-core: 4.0.1}

Aby byl náš kód stručnější, budu také používat rozšíření Kotlin pro Android, takže přidáme tento plugin, zatímco budeme mít otevřený soubor build.gradle:

použít plugin: kotlin-android-extensions

A konečně, protože získáváme aktivum z internetu, naše aplikace potřebuje povolení k internetu. Otevřete Manifest a přidejte následující:

Přidání klíče API

Pokaždé, když naše aplikace požádá o dílo od společnosti Poly, musí obsahovat platný klíč API. Používám zástupný text, ale ty musí Pokud aplikace někdy bude fungovat, nahraďte tento zástupný symbol vlastním klíčem API.

Přidávám také šek, aby aplikace zobrazila varování, pokud zapomenete nahradit text „VLOŽIT-VAŠE-API-KEY“:

import android.os.Bundle import android.support.v7.app.AppCompatActivity class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API-KEY"} přepíše zábavu onCreate (uloženoInstanceState: Bundle?) { super.onCreate (uloženoInstanceState) setContentView (R.layout.activity_main) // Pokud klíč API začíná „INSERT“ ... // if (APIKey.startsWith („INSERT“)) {// pak zobrazte následující přípitek… .// Toast.makeText (toto: „Aktualizovali jste klíč API“, Toast.LENGTH_SHORT) .show ()} else {... ... ...

Načítání aktiva

Na webu Google Poly si můžete vybrat libovolné dílo, ale budu používat tento model planety Země.

Dílo načtete pomocí jeho ID, které se objeví na konci sluchu adresy URL (zvýrazněno v předchozím snímku). Toto ID díla kombinujeme s hostitelem Poly API, který je „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.httpZískejte import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} přepíše zábavu onCreate (uloženéInstanceState: Bundle?) {Super.onCreate (uloženéInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT")) {Toast.makeText (toto: "Aktualizovali jste klíč API", Toast.LENGTH_SHORT) .show ()} else {

Dále musíme provést požadavek GET na adresu URL díla pomocí metody httpGet (). Také uvádím, že typ odpovědi musí být JSON:

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.httpZískejte import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} přepíše zábavu onCreate (uloženéInstanceState: Bundle?) {Super.onCreate (uloženéInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT")) {Toast.makeText (toto: "Aktualizovali jste klíč API", Toast.LENGTH_SHORT) .show ()} else {// Proveďte serverové volání a poté předejte data pomocí Metoda „listOf“ // assetURL.httpGet (listOf („key“ pro APIKey)). ResponseJson {request, response, result -> // Udělej něco s odpovědí // result.fold ({val as set = it.obj ()

Díla může mít několik formátů, například OBJ, GLTF a FBX. Musíme určit, zda je aktivum ve formátu OBJ.

V tomto kroku také získávám název a adresu URL všech souborů, které potřebujeme stáhnout,
včetně primárního souboru díla („kořen“) a všech přidružených souborů materiálů a textur („zdroje“).

Pokud naše aplikace nedokáže správně načíst dílo, zobrazí se přípitek informující uživatele.

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.httpZískejte import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} přepíše zábavu onCreate (uloženéInstanceState: Bundle?) {Super.onCreate (uloženéInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT")) {Toast.makeText (toto: "Aktualizovali jste klíč API", Toast.LENGTH_SHORT) .show ()} else {// Vytvořte žádost GET na adresu URL // assetURL. httpGet (listOf ("key" to APIKey)). responseJson {request, response, result -> // Udělejte něco s odpovědí // result.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: String? = null // Zkontrolujte formát díla pomocí pole „formates“ // val assetFormats = asset.getJSONArray ("formates") // Procházejte všemi formáty // pro (i v 0 do assetFormats.length ()) { val currentFormat = assetFormats.getJSONObject (i) // Použijte formatType k identifikaci typu formátu tohoto zdroje. Pokud je formát OBJ… .// if (currentFormat.getString ("formatType") == "OBJ") {//...then načte soubor 'root' tohoto zdroje, tj. Soubor OBJ // objectURL = currentFormat. getJSONObject ("root") .getString ("url") // Načte všechny závislosti kořenového souboru // materialLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("relativníPath") materialLibraryURL = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_, _ -> File (filesDir, "globeAsset.obj")} .response {_ , _, result -> result.fold ({}, {// Pokud nemůžete najít nebo stáhnout soubor OBJ, pak zobrazte chybu // Toast.makeText (toto „Nelze stáhnout zdroj“, Toast.LENGTH_SHORT) ) .show ()})} materialLibraryURL !!. httpDownload (). destination {_, _ -> File (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast.) makeText (toto: „Nelze stáhnout zdroj“, Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (toto: „Nelze stáhnout zdroj“, Toast.LENGTH_SHORT) .show ()})}}}

Pokud v tuto chvíli nainstalujete projekt do smartphonu nebo tabletu Android nebo virtuálního zařízení Android (AVD), bude dílo staženo úspěšně, ale aplikace jej ve skutečnosti nezobrazí. Opravme to hned!

Vytvoření druhé obrazovky: Přidání navigace

Chystáme se zobrazit dílo v režimu celé obrazovky, takže aktualizujme náš soubor main_activity.xml tak, aby obsahoval tlačítko, které po klepnutí spustí aktivitu na celou obrazovku.

Nyní přidáme onClickListener na konec souboru MainActivity.kt:

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.httpZískejte import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} přepíše zábavu onCreate (uloženéInstanceState: Bundle?) {Super.onCreate (uloženéInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("VLOŽIT")) {Toast.makeText (toto: "Aktualizovali jste klíč API", 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 ("formates") pro (i v 0 do 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 ("relatedPath") materialLibraryURL = currentFormat.getJSONArray ("resources" ) .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_, _ -> File (filesDir, "globeAsset.obj")} .response {_, _, result -> result.fold ({}, {Toast.makeText (this, "Nelze stáhnout zdroj", Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!. httpDownload (). destination {_, _ -> File (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast.makeText (this, "Nelze stáhnout zdroj", Toast.LENGTH_SHORT) .show ()})}}, {Toast.makeText (toto: „Nelze stáhnout zdroj“, Toast.LENGTH_SHORT) .sh ow ()})} // Implementovat tlačítko // displayButton.setOnClickListener {val záměr = Záměr (this, SecondActivity :: class.java) startActivity (záměr); }}}

Vytváření 3D plátna

Nyní vytvořme aktivitu, kde zobrazíme naše dílo v režimu celé obrazovky:

  • Control-klikněte na soubor MainActivity.kt vašeho projektu a vyberte „Nový> Soubor / třída Kotlin.“
  • Otevřete rozbalovací nabídku „Druh“ a vyberte „Třída“.
  • Pojmenujte tuto třídu „SecondActivity“ a klikněte na „OK“.

K nakreslení 3D objektu potřebujeme 3D plátno! Budu používat vykreslovací modul P3D knihovny Zpracování pro Android, což znamená rozšíření třídy PApplet, přepsání metody settings () a poté předání P3D jako argumentu metody fullScreen (). Musíme také vytvořit vlastnost, která představuje prvek Poly jako objekt PShape.

private fun displayAsset () {val canvas3D = objekt: PApplet () {var polyAsset: PShape? = null přepsat zábavné nastavení () {fullScreen (PConstants.P3D)}

Dále musíme inicializovat objekt PShape přepsáním metody setup (), voláním metody loadShape () a poté předáním absolutní cesty k souboru .obj:

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

Kreslení na plátně P3D

Abychom mohli kreslit na tomto 3D plátně, musíme přepsat metodu draw ():

přepsat zábavný draw () {tvar pozadí (0) (polyAsset)}}

Ve výchozím nastavení je mnoho prostředků načtených z rozhraní Poly API na menší straně, takže pokud nyní spustíte tento kód, nemusí se vám aktiva v závislosti na konfiguraci obrazovky zobrazit. Při vytváření 3D scén obvykle vytvoříte vlastní kameru, aby uživatel mohl prozkoumat scénu a zobrazit vaše 3D prvky z plných 360 stupňů. Toto však přesahuje rozsah tohoto článku, takže velikost a polohu díla budu měnit ručně, aby se zajistilo, že se na obrazovku vejde pohodlně.

Velikost díla můžete zvětšit předáním záporné hodnoty metodě scale ():

měřítko (-10f)

Pozici díla ve virtuálním 3D prostoru můžete upravit pomocí metody translate () a následujících souřadnic:

  • X. Umístí dílo podél vodorovné osy.
  • Y. Umístí dílo podél svislé osy.
  • Z. Toto je osa „hloubka / výška“, která transformuje 2D objekt na 3D objekt. Pozitivní hodnoty vytvářejí dojem, že objekt k vám přichází, a záporné hodnoty vytvářejí dojem, že se objekt pohybuje od vás.

Všimněte si, že transformace jsou kumulativní, takže všechno, co se stane po této funkci, akumuluje účinek.

Používám následující:

překládat (-50f, -100f, 10f)

Zde je vyplněný kód:

override fun draw () {background (0) scale (-10f) translate (-50f, -100f) // Nakreslete dílo voláním metody shape () // shape (polyAsset)}}

Dále musíme vytvořit odpovídající soubor rozvržení, do kterého přidáme 3D plátno jako widget FrameLayout:

  • Control-klikněte na složku „res> layout“ vašeho projektu.
  • Vyberte „Rozvržení souboru prostředků“.
  • Pojmenujte tento soubor „activity_second“ a klikněte na „OK“.

Nyní máme náš „asset_view“ FrameLayout, musíme o tom vědět naši SecondActivity! Překlopte zpět do souboru SecondActivity.kt, vytvořte novou instanci PFragmentu a nasměrujte ji ve směru k našemu widgetu „asset_view“:

import android.os.Bundle import android.support.v7.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_second. * import processing.android.PFragment import processing.core.PAppl import import.core.PCentants import processing.core .PShape import java.io.File class SecondActivity: AppCompatActivity () {override fun onCreate (uloženéInstanceState: Bundle?) {Super.onCreate (uloženéInstanceState) setContentView (R.layout.activity_second) displayAsset ()} soukromá zábava displayAsset () {val canvas3D = objekt: PApplet () {var polyAsset: PShape? = null přepsání zábavných nastavení () {fullScreen (PConstants.P3D)} přepsání zábavných nastavení () {polyAsset = loadShape (Soubor (filesDir, "globeAsset.obj"). absolutePath)} přepsání zábavných draw () {pozadí (0) měřítko (-10f) přeložit tvar (-50f, -100f) (polyAsset)}} // Přidejte následující // val assetView = PFragment (canvas3D) assetView.setView (asset_view, this)}}

Posledním krokem je přidání SecondActivity do vašeho manifestu:

// Přidejte následující //

Testování vašeho projektu

Nyní jsme připraveni otestovat hotový projekt! Nainstalujte jej do zařízení Android nebo AVD a ujistěte se, že máte aktivní připojení k internetu. Jakmile se aplikace spustí, aktivum se stáhne a poté jej můžete zobrazit klepnutím na tlačítko „Zobrazovat aktivum“.

Tento kompletní projekt si můžete stáhnout z GitHubu.

Zabalení

V tomto článku jsme se zabývali tím, jak použít rozhraní Poly API k načtení 3D díla za běhu a jak zobrazit toto dílo pomocí knihovny Zpracování pro Android. Myslíte si, že Poly API má potenciál zpřístupnit vývoj VR a AR více lidem? Dejte nám vědět v komentářích níže!

Příbuzný

  • Google přinese v roce 2018 aplikace AR na „stovky milionů“ zařízení Android
  • Google vás zdarma naučí o umělé inteligenci a strojovém učení
  • 15 nejlepších her VR pro Google Cardboard
  • 10 nejlepších VR aplikací pro Google Cardboard
  • Co je Google Fuchsia? Je to nový Android?
  • Co je Google Duplex? - funkce, datum vydání a další
  • Jak vytvořit aplikaci VR pro Android za pouhých 7 minut
  • Náhlavní soupravy Mobile VR - jaké jsou vaše nejlepší možnosti?

Aktualizace, 30. května 2019 (11:57 ET): Anker Roav Bolt je v prodeji protřednictvím Bet Buy za pouhých 39,99 $ (10 0 $). Nejedná e o obrovkou levu, ale je to ta první, kterou jme ...

amung vytáhl všechny zatávky řadou Galaxy 10 a 10e nabízí většinu tejných funkcí jako jeho větší bratři, ale za přijatelnější cenu....

Naše Rada