Poly API: Pagkuha ng mga 3D assets para sa iyong VR at AR Android apps

May -Akda: Peter Berry
Petsa Ng Paglikha: 14 Agosto. 2021
I -Update Ang Petsa: 8 Mayo 2024
Anonim
10 Crazy Free AI tools that will BLOW YOUR MIND!
Video.: 10 Crazy Free AI tools that will BLOW YOUR MIND!

Nilalaman


Mayroon ka bang isang mahusay na ideya para sa isang mobile na Virtual Reality (VR) o Augmented Reality (AR) mobile app, ngunit walang ideya kung paano maihatid ang iyong pananaw sa buhay?

Maliban kung ikaw ay isang developer ng Android na nagkakaroon din ng isang bihasang 3D artist, pagkatapos ay lumilikha ng lahat ng mga ari-arian na kinakailangan upang maihatid ang isang nakaka-engganyong, 360 degree na karanasan, ay maaaring maging isang nakakatakot na proseso.

Dahil wala kang oras, mapagkukunan o karanasan na kinakailangan upang lumikha ng mga modelo ng 3D, hindi nangangahulugang hindi ka maaaring magtayo ng isang mahusay na VR o AR mobile app! Mayroong isang malaking hanay ng mga mapagkukunan ng 3D na malayang magagamit sa World Wide Web, kasama ang lahat ng mga API, frameworks at mga aklatan na kailangan mong i-download at ibigay ang mga pag-aari na ito sa iyong mga aplikasyon sa Android.

Basahin ang Susunod: Maaari mo na ngayong bisitahin ang anumang website gamit ang Daydream VR. Kahit na ang isa.


Sa artikulong ito, titingnan namin ang Poly, isang online na lalagyan at API na naglalagay ng libu-libong mga pag-aari ng 3D sa iyong mga kamay. Sa pagtatapos ng artikulong ito, lumikha ka ng isang app na makukuha ang isang 3D Poly asset sa runtime, at pagkatapos ay i-render ito gamit ang tanyag na Pagproseso para sa Android library.

Ang pagpapakita ng mga assets ng 3D na may Poly

Kung na-drew ka sa pag-unlad ng Unity, kung gayon ang polyeto ay pareho sa Unity Asset Store - maliban na ang lahat sa Poly ay libre!

Marami sa mga 3D na modelo ng Poly ay nai-publish sa ilalim ng lisensya ng Creative Commons, kaya libre kang gumamit, magbago at mag-remix ng mga ari-arian na ito, basta bibigyan mo ng angkop na kredito ang tagalikha.

Ang lahat ng mga 3D na modelo ng Poly ay idinisenyo upang maging katugma sa mga platform ng VR at AR ng Google, tulad ng Daydream at ARCore, ngunit maaari mong gamitin ang mga ito saanman at gayunpaman nais mo - potensyal, maaari mo ring gamitin ang mga ito sa ARKit ng Apple!


Pagdating sa pagkuha at pagpapakita ng mga assets ng Poly, mayroon kang dalawang pagpipilian. Una, maaari mong i-download ang mga ari-arian sa iyong computer at pagkatapos ay i-import ang mga ito sa Android Studio, kaya ipinapadala nila ang iyong aplikasyon at nag-ambag patungo sa laki ng APK, o maaari mong makuha ang mga pag-aari na ito sa runtime gamit ang Poly API.

Ang cross-platform, REST-based Poly API ay nagbibigay ng programmatic, read-only access sa malaking koleksyon ng mga 3D na modelo ng Poly. Ito ay mas kumplikado kaysa sa pag-bundle ng mga ari-arian gamit ang iyong APK, ngunit maraming mga benepisyo sa pagkuha ng mga asset ng Poly sa runtime, higit sa lahat na nakakatulong na mapanatili ang kontrol ng iyong laki ng APK, na maaaring makaapekto sa kung ilang mga tao ang nag-download ng iyong aplikasyon.

Maaari mo ring gamitin ang Poly API upang bigyan ang iyong mga gumagamit ng higit na pagpipilian, halimbawa kung ikaw ay pagbuo ng isang mobile na laro pagkatapos ay mapayagan mo ang iyong mga gumagamit na pumili mula sa isang hanay ng mga modelo ng character.

Dahil malaya mong baguhin ang mga modelo ng Poly, maaari mo ring hayaang mai-tweak ng iyong mga gumagamit ang kanilang napiling karakter, halimbawa sa pamamagitan ng pagpapalit ng kulay ng buhok o mata, o sa pagsasama nito sa iba pang mga asset ng Poly, tulad ng iba't ibang mga armas at nakasuot. Sa ganitong paraan, makakatulong ang Poly API sa iyo na maghatid ng isang kahanga-hangang hanay ng mga 3D assets, na may maraming saklaw para sa pag-personalize ang karanasan - at lahat para sa medyo maliit na trabaho. Kumbinsido ang iyong mga gumagamit na gumugol ka ng isang tonelada ng oras, maingat na gumawa ng lahat ng mga 3D model!

Lumilikha ng isang proyekto sa pagmomolde ng 3D

Kami ay gagawa ng isang application na makukuha ang isang partikular na asset ng Poly kapag ang application ay unang inilunsad, at pagkatapos ay ipinapakita ang asset na iyon sa fullscreen mode, sa kahilingan ng gumagamit.

Upang matulungan kaming makuha ang asset na ito, gumagamit ako ng Fuel, na isang library ng HTTP networking para sa Kotlin at Android. Magsimula sa pamamagitan ng paglikha ng isang bagong proyekto sa mga setting ng iyong napili, ngunit kapag sinenyasan kang mag-opt sa "Isama ang suporta sa Kotlin."

Ang lahat ng mga tawag na ginagawa mo sa Poly API ay dapat magsama ng isang API key, na ginagamit upang makilala ang iyong app at ipatupad ang mga limitasyon ng paggamit. Sa panahon ng pag-unlad at pagsubok, madalas kang gumagamit ng isang hindi pinigilan na susi ng API, ngunit kung mayroon kang anumang mga plano upang palayain ang app na ito, kailangan mong gumamit ng key na pinigilan ng Android na API.

Upang lumikha ng isang pinigilan na susi, kakailanganin mong malaman ang sertipiko ng paglagda sa SHA-1 ng iyong proyekto, kaya't makuha mo ang impormasyong ito ngayon:

  • Piliin ang tab na "Gradle" ng Android Studio (kung saan nakaposisyon ang cursor sa sumusunod na screenshot). Binubuksan nito ang panel na "Mga proyekto ng Gradle".

  • Sa panel na "Mga proyekto ng Gradle", i-double-click upang mapalawak ang ugat ng iyong proyekto, at pagkatapos ay piliin ang "Mga Gawain> Android> Pag-sign Report." Binubuksan nito ang isang bagong panel sa ilalim ng window ng Android Studio.
  • Piliin ang pindutan ng 'Toggle task / text mode "na pindutan (kung saan nakaposisyon ang cursor sa sumusunod na screenshot).

Mag-update na ngayon ang panel na "Run" upang ipakita ang maraming impormasyon tungkol sa iyong proyekto, kasama na ang SHA-1 fingerprint nito.

Lumikha ng account sa Google Cloud Platform

Upang makuha ang kinakailangang key ng API, kakailanganin mo ang isang account ng Google Cloud Platform (GPC).

Kung wala kang isang account, maaari kang mag-sign up para sa isang 12 buwan na libreng pagsubok sa pamamagitan ng pagpunta sa Try Cloud Platform para sa libreng pahina, at pagsunod sa mga tagubilin. Tandaan na kinakailangan ang isang credit card o debit card, ngunit ayon sa pahina ng Mga Madalas na Itanong, ginagamit lamang ito upang mapatunayan ang iyong pagkakakilanlan at "hindi ka sisingilin o sisingilin sa panahon ng iyong libreng pagsubok."

Kunin ang key ng iyong Poly API

Kapag naka-sign up na ang lahat, maaari mong paganahin ang Poly API at lumikha ng iyong susi:

  • Tumungo sa GCP Console.
  • Piliin ang may linya na may linya sa kaliwang sulok, at piliin ang "Mga API at Serbisyo> Dashboard."
  • Piliin ang "Paganahin ang mga API at serbisyo."
  • Sa kaliwang menu, piliin ang "Iba."
  • Piliin ang card na "Poly API".
  • I-click ang pindutang "Paganahin".
  • Matapos ang ilang sandali, dadalhin ka sa isang bagong screen; buksan ang side-menu at piliin ang "Mga API at Serbisyo> Mga Kredensyal."

  • Sa kasunod na popup, piliin ang "Restrict key."
  • Bigyan ang iyong susi ng isang natatanging pangalan.
  • Sa ilalim ng "Mga paghihigpit sa aplikasyon," piliin ang "Android apps."
  • Piliin ang "Magdagdag ng pangalan ng package at fingerprint."
  • Kopyahin / idikit ang daliri ng SHA-1 ng iyong proyekto sa larangan ng "Pag-sign-sertipiko ng daliri".
  • Ipasok ang pangalan ng package ng iyong proyekto (lilitaw sa iyong Manifest at sa tuktok ng bawat file ng klase).
  • I-click ang "I-save."

Dadalhin ka na ngayon sa screen ng "Mga Kredensyal" na proyekto, na naglalaman ng isang listahan ng lahat ng iyong mga key sa API - kasama ang Poly key na pinagana ng Poly na nilikha mo lamang.

Mga dependencies ng proyekto: Mga gasolina, P3D at mga extension ng Kotlin

Upang makuha at maipakita ang mga assets ng Poly, kakailanganin namin ang isang tulong na tulong mula sa ilang karagdagang mga aklatan:

  • Fuel. Ang Poly ay kasalukuyang walang isang opisyal na toolkit ng Android, kaya kakailanganin mong gumana sa API nang direkta gamit ang REST interface nito. Upang gawing mas simple ang prosesong ito, gumagamit ako ng Fuel HTTP networking library.
  • Pagproseso para sa Android. Gumagamit ako ng renderer ng library na ito upang ipakita ang asset ng Poly.

Buksan ang file ng build.gradle ng iyong proyekto, at idagdag ang dalawang mga aklatan bilang mga dependant ng proyekto:

dependencies {pagpapatupad fileTree (kabilang ang:, dir: libs) pagpapatupad ng "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" pagpapatupad com.android.support:appcompat-v7:27.1.1 // Idagdag ang Fuel library / / pagpapatupad com.github.kittinunf.fuel: fuel-android: 1.13.0 // Idagdag ang Pagproseso para sa Android engine // pagpapatupad org.p5android: pagproseso-core: 4.0.1}

Upang gawing mas maigsi ang aming code, gumagamit din ako ng mga extension ng Kotlin Android, kaya idagdag mo ang plugin na ito habang binuksan namin ang file na build.gradle:

mag-apply ng plugin: kotlin-android-extension

Sa wakas, dahil nakukuha namin ang asset mula sa Internet, kailangan ng aming app ang pahintulot sa Internet. Buksan ang iyong Manifest at idagdag ang sumusunod:

Pagdaragdag ng iyong key sa API

Sa bawat oras na humihiling ang aming app ng isang asset mula sa Poly, kinakailangang isama ang isang wastong key ng API. Gumagamit ako ng teksto ng placeholder, ngunit ikaw dapat palitan ang placeholder na ito ng iyong sariling API key kung ang application ay kailanman gagana.

Nagdaragdag din ako ng isang tseke, upang ang application ay magpapakita ng babala kung nakalimutan mong palitan ang teksto ng "INSERT-YOUR-API-KEY":

i-import ang android.os.Bundahin ang pag-import ng android.support.v7.app.AppCompatActivity klase MainActivity: AppCompatActivity () {kasamang object {const val APIKey = "INSERT-YOUR-API-KEY"} override masaya onCreate (saveInstanceState: Bundle?) { super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) // Kung ang key ng API ay nagsisimula sa "INSERT" ... // kung (APIKey.startsWith ("INSERT")) {// pagkatapos ay ipakita ang sumusunod na toast ... .// Toast.makeText (ito, "Hindi mo na-update ang iyong key sa API", Toast.LENGTH_SHORT) .show ()} iba pa ... ... ...

Pagkuha ng pag-aari

Maaari kang pumili ng anumang pag-aari sa site ng Google Poly, ngunit gumagamit ako ng modelong ito ng Earth Earth.

Nakakakuha ka ng isang asset gamit ang ID nito, na lumilitaw sa dulo ng URL slug (na naka-highlight sa nakaraang screenshot). Pinagsasama namin ang asset ID na ito, kasama ang host ng Poly API, na "https://poly.googleapis.com/v1."

i-import ang 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 () {kasamang object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} override masaya onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) kung ( APIKey.startsWith ("INSERT")) {Toast.makeText (ito, "Hindi mo na-update ang iyong key sa API", Toast.LENGTH_SHORT) .show ()} iba pa {

Susunod, kailangan nating gumawa ng isang kahilingan sa GET sa asset URL, gamit ang pamamaraan na httpGet (). Tinukoy ko rin na ang uri ng tugon ay dapat na JSON:

i-import ang 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 () {kasamang object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} override masaya onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) kung ( APIKey.startsWith ("INSERT")) {Toast.makeText (ito, "Hindi mo na-update ang iyong key sa API", Toast.LENGTH_SHORT) .show ()} iba pa {// Gumawa ng isang tawag sa server, at pagkatapos ay ipasa ang data gamit ang "ListOf" na pamamaraan // assetURL.httpGet (listOf ("key" sa APIKey)). TugonJson {kahilingan, tugon, resulta -> // Gumawa ng isang bagay na may tugon // result.fold ({val as itakda = it.obj ()

Ang asset ay maaaring magkaroon ng maraming mga format, tulad ng OBJ, GLTF, at FBX. Kailangan naming matukoy na ang pag-aari ay nasa format na OBJ.

Sa hakbang na ito, kinukuha ko rin ang pangalan at URL ng lahat ng mga file na kailangan naming i-download,
kabilang ang pangunahing file ng asset ("ugat"), kasama ang anumang mga nauugnay na materyal at mga file ng texture ("mga mapagkukunan").

Kung hindi makuha ng aming application ang tama nang tama, magpapakita ito ng isang toast na nagpapaalam sa gumagamit.

i-import ang 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 () {kasamang object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} override masaya onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) kung ( APIKey.startsWith ("INSERT")) {Toast.makeText (ito, "Hindi mo na-update ang iyong key sa API", Toast.LENGTH_SHORT) .show ()} iba pa {// Gumawa ng isang kahilingan sa GET sa URL ng asset // assetURL. httpGet (listOf ("key" sa APIKey)) tugonJson {kahilingan, tugon, resulta -> // Gumawa ba ng isang bagay na may tugon // resulta.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: String? = null // Suriin ang format ng asset, gamit ang hanay ng "format" // val assetFormats = asset.getJSONArray ("mga format") // I-Loop ang lahat ng mga format na // para (i sa 0 hanggang assetFormats.length ()) { val kasalukuyangFormat = assetFormats.getJSONObject (i) // Gumamit ng formatType upang matukoy ang uri ng format ng mapagkukunang ito. Kung ang format ay OBJ… .// kung (kasalukuyangFormat.getString ("formatType") == "OBJ") {//... pagkatapos makuha ang 'root' file ng mapagkukunang ito, ibig sabihin ang file na OBJ // objectURL = kasalukuyangFormat. getJSONObject ("ugat") .getString ("url") // Kunin ang lahat ng dependencies ng root file // materialLibraryName = kasalukuyangFormat.getJSONArray ("mga mapagkukunan") .getJSONObject (0) .getString ("kamag-anakPath") materyalLibraryURL = kasalukuyangFormat.getJSONArray ("mapagkukunan") .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). patutunguhan {_, _ -> File (filesDir, "globoAsset.obj")} .response {_ , _, resulta -> resulta.fold ({}, {// Kung hindi mo mahahanap o ma-download ang file ng OBJ, pagkatapos ay magpakita ng isang error na // Toast.makeText (ito, "Hindi mag-download ng mapagkukunan", Toast.LENGTH_SHORT ) .show ()})} materialLibraryURL !!. httpDownload () patutunguhan {_, _ -> File (fileDir, materialLibraryName)} .response {_, _, resulta -> result.fold ({}, {Toast. gawingText (ito, "Hindi ma-download ang mapagkukunan", Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (ito, "Hindi ma-download ang mapagkukunan", Toast.LENGTH_SHORT) .show ()})}}}

Sa puntong ito, kung na-install mo ang proyekto sa iyong Android smartphone o tablet, o Android Virtual Device (AVD), pagkatapos ay matagumpay na i-download ang asset, ngunit hindi talaga ito maipakita ng app. Ayusin natin ito ngayon!

Lumilikha ng isang pangalawang screen: Pagdaragdag ng nabigasyon

Ipakita namin ang asset sa fullscreen mode, kaya i-update ang aming main_activity.xml file upang isama ang isang pindutan na, kapag na-tap, ay ilulunsad ang Aktibidad ng fullscreen.

Ngayon ay idagdag ang onClickListener sa dulo ng MainActivity.kt file:

pag-import ng 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 () {kasamang object {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} override masaya onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) kung ( APIKey.startsWith ("INSERT")) {Toast.makeText (ito, "Hindi mo na-update ang iyong key sa API", Toast.LENGTH_SHORT) .show ()} iba pa {assetURL.httpGet (listOf ("key" sa APIKey)). tugonJson {kahilingan, tugon, resulta -> resulta.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: Str ing? = null val assetFormats = asset.getJSONArray ("mga format") para sa (i sa 0 hanggang assetFormats.length ()) {val kasalukuyangFormat = assetFormats.getJSONObject (i) kung (kasalukuyangFormat.getString ("formatType") == "OBJ" ) {objectURL = kasalukuyangFormat.getJSONObject ("ugat") .getString ("url") materialLibraryName = kasalukuyangFormat.getJSONArray ("mapagkukunan") .getJSONObject (0) .getString ("kamag-anakPath") materyalLibraryURL = kasalukuyangFormat.getJSONArray ("mapagkukunan") ) .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload () patutunguhan {_, _ -> File (filesDir, "globeAsset.obj")} .response {_, _, resulta -> resulta.fold ({}, {Toast.makeText (ito, "Hindi ma-download ang mapagkukunan", Toast.LENGTH_SHORT) .show ()})} materyalLibraryURL !!. httpDownload () patutunguhan {_, _ -> File (fileDir, materialLibraryName)} .response {_, _, resulta -> resulta.fold ({}, {Toast.makeText (ito, "Hindi ma-download ang mapagkukunan", Toast.LENGTH_SHORT) .show ()})}}, {Toast.makeText (ito, "Hindi ma-download ang mapagkukunan", Toast.LENGTH_SHORT) .sh ow ()})} // Magpatupad ng isang pindutan // display Button.setOnClickListener {val layunin = Intent (ito, SecondActivity :: class.java) pagsisimulaActivity (intensyon); }}}

Ang pagbuo ng isang 3D na canvas

Ngayon, lumikha ng Aktibidad kung saan ipapakita namin ang aming asset sa fullscreen mode:

  • Kontrol-click ang MainActivity.kt file ng iyong proyekto, at piliin ang "Bago> File / Klase ng Kotlin."
  • Buksan ang "Mabait" na pagbagsak, at piliin ang "Class."
  • Bigyan ang klase na ito ng pangalang "SecondActivity," at pagkatapos ay i-click ang "OK."

Upang gumuhit ng isang 3D na bagay, kailangan namin ng isang 3D na canvas! Gagamitin ko ang Pagproseso para sa P3D ng render ng aklatan ng Android, na nangangahulugang pagpapalawak ng klase ng PApplet, overriding the setting () na pamamaraan at pagkatapos ay ipasa ang P3D bilang isang argumento sa fullScreen () na pamamaraan. Kailangan din nating lumikha ng isang ari-arian na kumakatawan sa asset ng Poly bilang isang bagay na PShape.

pribadong masaya na displayAsset () {val canvas3D = object: PApplet () {var polyAsset: PShape? = null override fun setting () {fullScreen (PConstants.P3D)}

Susunod, kailangan nating simulan ang object ng PShape, sa pamamagitan ng overriding na paraan ng pag-setup (), pagtawag sa paraan ng loadShape (), at pagkatapos ay maipasa ang ganap na landas ng file na .obj:

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

Pagguhit sa canvas ng P3D

Upang gumuhit sa 3D na canvas na ito, kailangan nating i-override ang draw () na paraan:

override fun draw () {background (0) hugis (polyAsset)}}

Bilang default, marami sa mga assets na nakuha mula sa Poly API ay nasa maliit na bahagi, kaya kung pinapatakbo mo ang code na ito ngayon, kung hindi mo maaaring makita ang asset, depende sa pagsasaayos ng iyong screen. Kapag lumilikha ng mga eksena sa 3D, karaniwang lilikha ka ng isang pasadyang camera upang ang gumagamit ay maaaring galugarin ang eksena at tingnan ang iyong mga pag-aari ng 3D mula sa buong 360 degree. Gayunpaman, ito ay lampas sa saklaw ng artikulong ito upang baguhin nang manu-mano ang laki at posisyon ng pag-aari, upang matiyak na naaangkop ito nang kumportable sa onscreen.

Maaari mong taasan ang laki ng pag-aari, sa pamamagitan ng pagpasa ng isang negatibong halaga sa pamamaraan () na pamamaraan:

scale (-10f)

Maaari mong ayusin ang posisyon ng asset sa virtual 3D space gamit ang translate () na pamamaraan at ang mga sumusunod na coordinate:

  • X. Posisyon ang asset sa kahabaan ng pahalang na axis.
  • Y. Ang mga posisyon sa asset kasama ang vertical axis.
  • Z. Ito ang "lalim / taas" axis, na nagbabago ng isang bagay na 2D sa isang 3D na bagay. Ang mga positibong halaga ay lumikha ng impresyon na ang bagay ay darating sa iyo, at ang mga negatibong halaga ay lumikha ng impresyon na ang bagay ay lumayo sa iyo.

Tandaan na ang mga pagbabagong-anyo ay pinagsama-sama, kaya lahat ng nangyayari pagkatapos ng pag-andar ay naiipon ang epekto.

Gumagamit ako ng mga sumusunod:

isalin (-50f, -100f, 10f)

Narito ang nakumpletong code:

override fun draw () {background (0) scale (-10f) translate (-50f, -100f) // Iguhit ang asset sa pamamagitan ng pagtawag sa hugis () paraan // hugis (polyAsset)}}

Susunod, kailangan naming lumikha ng kaukulang file ng layout, kung saan idaragdag namin ang 3D canvas bilang isang FrameLayout widget:

  • Kontrol-click ang folder ng "res> layout" ng iyong proyekto.
  • Piliin ang "file na mapagkukunan ng layout."
  • Bigyan ang file na ito ng pangalan na "activity_second," at pagkatapos ay i-click ang "OK."

Ngayon mayroon kaming aming "asset_view" FrameLayout, kailangan nating ipaalam sa aming SecondActivity tungkol dito! I-flip pabalik sa SecondActivity.kt file, lumikha ng isang bagong halimbawa ng PFragment, at ituro ito sa direksyon ng aming "asset_view" na widget:

pag-import ng android.os.Bundle import android.support.v7.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_second. * pagproseso ng pagproseso.android.PFragment pagproseso ng pag-import.core.PApplet import processing.core.PConstants import processing.core .PShape import java.io.File class SecondActivity: AppCompatActivity () {override fun onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_second) displayAsset ()} private valentAsset () canvas3D = object: PApplet () {var polyAsset: PShape? = null override fun setting () {fullScreen (PConstants.P3D)} override fun setup () {polyAsset = loadShape (File (filesDir, "globeAsset.obj"). absolutePath)} override fun draw () {background (0) scale (-10f) isalin (-50f, -100f) hugis (polyAsset)}} // Idagdag ang sumusunod na // val assetView = PFragment (canvas3D) assetView.setView (asset_view, this)}}

Ang pangwakas na hakbang, ay pagdaragdag ng SecondActivity sa iyong Manifest:

// Idagdag ang sumusunod na //

Pagsubok sa iyong proyekto

Handa na kaming subukan ang natapos na proyekto! I-install ito sa iyong Android device o AVD, at tiyakin na mayroon kang isang aktibong koneksyon sa Internet. Sa sandaling ilunsad ang app, mai-download nito ang asset, at maaari mo itong tingnan sa pamamagitan ng pagbibigay ng pindutang "Ipakita ang Asset" na isang tap.

Maaari mong i-download ang kumpletong proyekto mula sa GitHub.

Pagputol

Sa artikulong ito, tiningnan namin kung paano gamitin ang Poly API upang makuha ang isang 3D asset sa runtime, at kung paano ipakita ang asset na iyon gamit ang Processing para sa Android library. Sa palagay mo, ang Poly API ay may potensyal na gawing ma-access ang pag-unlad ng VR at AR sa mas maraming tao? Ipaalam sa amin sa mga komento sa ibaba!

Kaugnay

  • Dadalhin ng Google ang mga AR app sa "daan-daang milyong" ng mga Android device sa 2018
  • Tuturuan ka ng Google tungkol sa AI at pag-aaral ng machine nang libre
  • 15 pinakamahusay na mga laro ng VR para sa Google Cardboard
  • 10 pinakamahusay na VR apps para sa Google Cardboard
  • Ano ang Google Fuchsia? Ito ba ang bagong Android?
  • Ano ang Google Duplex? - mga tampok, petsa ng paglabas, at higit pa
  • Paano lumikha ng isang VR app para sa Android sa loob lamang ng 7 minuto
  • Mga headset ng Mobile VR - ano ang iyong pinakamahusay na mga pagpipilian?

Nai bang gumawa ng iang laro a Android?a ngayon, ang Google Play tore ay pinalamanan na puno ng pay-to-win na baura, habang tinatamaa ng iO ang iang morgabord ng mahuay na mga pamagat ng indie. Kailan...

Anuman ang pipiliin mong ipahayag ang alita, ang iang GIF ay madala na perpekto na paraan upang maipahayag ang mga emoyon. Ang mga animated na imahe na ito ay maaaring abihin ng higit a 1,000 mga alit...

Mga Kagiliw-Giliw Na Artikulo