Poli API: Mengambil aset 3D untuk aplikasi VR dan AR Android Anda

Pengarang: Peter Berry
Tanggal Pembuatan: 14 Lang L: none (month-012) 2021
Tanggal Pembaruan: 4 Boleh 2024
Anonim
3D Scanning from your Smart Phone for free!
Video: 3D Scanning from your Smart Phone for free!

Isi


Apakah Anda memiliki ide bagus untuk aplikasi seluler Virtual Reality (VR) atau Augmented Reality (AR), tetapi tidak tahu cara menghidupkan visi Anda?

Kecuali jika Anda seorang pengembang Android yang kebetulan juga seorang seniman 3D berpengalaman, maka menciptakan semua aset yang diperlukan untuk memberikan pengalaman 360 derajat yang mendalam dan dapat menjadi proses yang menakutkan.

Hanya karena Anda tidak punya waktu, sumber daya, atau pengalaman yang diperlukan untuk membuat model 3D, tidak berarti Anda tidak dapat membuat aplikasi seluler VR atau AR yang hebat! Ada sejumlah besar sumber daya 3D yang tersedia secara bebas di World Wide Web, ditambah semua API, kerangka kerja, dan perpustakaan yang Anda butuhkan untuk mengunduh dan merender aset ini dalam aplikasi Android Anda.

Baca Selanjutnya: Sekarang Anda dapat mengunjungi situs web apa pun menggunakan Daydream VR. Bahkan yang itu.

Di artikel ini, kita akan melihat Poly, repositori online, dan API yang menempatkan ribuan aset 3D di ujung jari Anda. Pada akhir artikel ini, Anda akan membuat aplikasi yang mengambil aset 3D Poly saat runtime, dan kemudian membuatnya menggunakan pustaka Processing for Android yang populer.


Menampilkan aset 3D dengan Poly

Jika Anda pernah mencoba-coba pengembangan Unity, maka repositori Poly mirip dengan Unity Asset Store - kecuali semua yang ada di Poly gratis!

Banyak model 3D Poly diterbitkan di bawah lisensi Creative Commons, jadi Anda bebas untuk menggunakan, memodifikasi, dan mencampur kembali aset-aset ini, selama Anda memberikan kredit yang sesuai kepada pembuatnya.

Semua model 3D Poly dirancang agar kompatibel dengan platform VR dan AR Google, seperti Daydream dan ARCore, tetapi Anda dapat menggunakannya di mana saja dan apa pun yang Anda inginkan - secara potensial, Anda bahkan dapat menggunakannya dengan ARKit Apple!

Ketika datang untuk mengambil dan menampilkan aset Poli, Anda memiliki dua opsi. Pertama, Anda dapat mengunduh aset ke komputer Anda dan kemudian mengimpornya ke Android Studio, sehingga aset tersebut dikirimkan bersama aplikasi Anda dan berkontribusi terhadap ukuran APK-nya, atau Anda dapat mengambil aset ini saat runtime menggunakan Poly API.


Poly API lintas-platform, berbasis REST menyediakan akses terprogram dan hanya-baca ke koleksi besar model 3D Poly. Ini lebih rumit daripada menggabungkan aset dengan APK Anda, tetapi ada beberapa manfaat untuk mengambil aset Poly saat runtime, terutama membantu menjaga ukuran APK Anda di bawah kendali, yang dapat memengaruhi berapa banyak orang yang mengunduh aplikasi Anda.

Anda juga dapat menggunakan Poly API untuk memberi pengguna lebih banyak pilihan, misalnya jika Anda mengembangkan game seluler maka Anda dapat membiarkan pengguna Anda memilih dari berbagai model karakter.

Karena Anda bebas untuk memodifikasi model Poly, Anda bahkan dapat membiarkan pengguna Anda mengubah karakter pilihan mereka, misalnya dengan mengubah warna rambut atau mata, atau dengan menggabungkannya dengan aset Poly lainnya, seperti senjata dan baju besi yang berbeda. Dengan cara ini, Poly API dapat membantu Anda memberikan berbagai aset 3D yang mengesankan, dengan banyak ruang untuk mempersonalisasi pengalaman - dan semuanya untuk pekerjaan yang relatif sedikit. Pengguna Anda akan diyakinkan bahwa Anda telah menghabiskan banyak waktu, dengan cermat membuat semua model 3D ini!

Membuat proyek pemodelan 3D

Kami akan membuat aplikasi yang mengambil aset Poly tertentu ketika aplikasi pertama kali diluncurkan, dan kemudian menampilkan aset itu dalam mode layar penuh, atas permintaan pengguna.

Untuk membantu kami mengambil aset ini, saya akan menggunakan Fuel, yang merupakan pustaka jaringan HTTP untuk Kotlin dan Android. Mulailah dengan membuat proyek baru dengan pengaturan pilihan Anda, tetapi ketika diminta memilih untuk "Sertakan dukungan Kotlin."

Semua panggilan yang Anda lakukan ke Poly API harus menyertakan kunci API, yang digunakan untuk mengidentifikasi aplikasi Anda dan menegakkan batas penggunaan. Selama pengembangan dan pengujian, Anda akan sering menggunakan kunci API yang tidak dibatasi, tetapi jika Anda memiliki rencana untuk merilis aplikasi ini, maka Anda harus menggunakan kunci API yang dibatasi Android.

Untuk membuat kunci terbatas, Anda harus mengetahui sertifikat penandatanganan SHA-1 proyek Anda, jadi mari kita dapatkan informasi ini sekarang:

  • Pilih tab "Gradle" Android Studio (tempat kursor diposisikan di tangkapan layar berikut). Ini membuka panel "Proyek Gradle".

  • Di panel "Proyek bertahap", klik dua kali untuk memperluas ‘root proyek Anda, dan lalu pilih" Tugas> Android> Laporan Penandatanganan. "Ini membuka panel baru di sepanjang bagian bawah jendela Android Studio.
  • Pilih tombol ‘Alihkan eksekusi / mode teks” (di mana kursor diposisikan pada tangkapan layar berikut).

Panel "Jalankan" sekarang akan diperbarui untuk menampilkan banyak informasi tentang proyek Anda, termasuk sidik jari SHA-1-nya.

Buat akun Google Cloud Platform

Untuk memperoleh kunci API yang diperlukan, Anda memerlukan akun Google Cloud Platform (GPC).

Jika Anda tidak memiliki akun, maka Anda dapat mendaftar untuk uji coba gratis 12 bulan dengan menuju ke halaman Coba Cloud Platform gratis, dan mengikuti instruksi. Perhatikan bahwa kartu kredit atau kartu debit diperlukan, tetapi menurut halaman Pertanyaan yang Sering Diajukan, ini hanya digunakan untuk memverifikasi identitas Anda dan "Anda tidak akan dikenakan biaya atau tagihan selama percobaan gratis Anda."

Dapatkan kunci Poly API Anda

Setelah Anda mendaftar, Anda dapat mengaktifkan Poly API dan membuat kunci Anda:

  • Kepala ke Konsol GCP.
  • Pilih ikon berjajar di sudut kiri atas, dan pilih "API & Layanan> Dasbor."
  • Pilih "Aktifkan API dan layanan."
  • Di menu sebelah kiri, pilih "Lainnya."
  • Pilih kartu "Poly API".
  • Klik tombol "Enable".
  • Setelah beberapa saat, Anda akan dibawa ke layar baru; buka menu samping dan pilih "API & Layanan> Kredensial."

  • Di munculan berikutnya, pilih "Batasi tombol."
  • Berikan nama khusus pada kunci Anda.
  • Di bawah "Batasan aplikasi," pilih "Aplikasi Android."
  • Pilih "Tambahkan nama paket dan sidik jari."
  • Salin / rekatkan sidik jari SHA-1 proyek Anda ke dalam bidang “Penandatanganan sidik jari sertifikat”.
  • Masukkan nama paket proyek Anda (itu muncul di Manifest Anda dan di bagian atas setiap file kelas).
  • Klik "Simpan."

Sekarang Anda akan dibawa ke layar "Kredensial" proyek Anda, yang berisi daftar semua kunci API Anda - termasuk kunci API yang diaktifkan dengan Poli yang baru saja Anda buat.

Ketergantungan proyek: Ekstensi bahan bakar, P3D dan Kotlin

Untuk mengambil dan menampilkan aset Poly, kami membutuhkan uluran tangan dari beberapa perpustakaan tambahan:

  • Bahan bakar. Poly saat ini tidak memiliki perangkat Android resmi, jadi Anda harus bekerja dengan API secara langsung menggunakan antarmuka REST-nya. Untuk membuat proses ini lebih sederhana, saya akan menggunakan pustaka jaringan Fuel HTTP.
  • Memproses untuk Android. Saya akan menggunakan renderer P3D perpustakaan ini untuk menampilkan aset Poly.

Buka file build.gradle proyek Anda, dan tambahkan dua pustaka ini sebagai dependensi proyek:

dependencies {implementasi fileTree (termasuk:, dir: libs) implementasi "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" implementasi com.android.support:appcompat-v7:27.1.1 // Tambahkan perpustakaan bahan bakar / / implementasi com.github.kittinunf.fuel: fuel-android: 1.13.0 // Tambahkan Mesin Pemroses untuk Android // implementasi org.p5android: processing-core: 4.0.1}

Untuk membuat kode kami lebih ringkas, saya juga akan menggunakan ekstensi Kotlin Android, jadi mari kita tambahkan plugin ini sementara kita membuka file build.gradle:

terapkan plugin: kotlin-android-extensions

Akhirnya, karena kami mengambil aset dari Internet, aplikasi kami memerlukan izin Internet. Buka Manifestasi Anda dan tambahkan yang berikut:

Menambahkan kunci API Anda

Setiap kali aplikasi kami meminta aset dari Poly, ia harus menyertakan kunci API yang valid. Saya menggunakan teks placeholder, tetapi Anda harus ganti placeholder ini dengan kunci API Anda sendiri jika aplikasi akan bekerja.

Saya juga menambahkan tanda centang, sehingga aplikasi akan menampilkan peringatan jika Anda lupa mengganti teks "INSERT-YOUR-API-KEY":

import android.os.Bundle import android.support.v7.app.AppCompatActivity kelas MainActivity: AppCompatActivity () {objek pendamping {const val APIKey = "INSERT-YOUR-API-KEY"} menimpa kesenangan diCreate (disimpanInstanceState: Bundle?) { super.onCreate (SavedInstanceState) setContentView (R.layout.activity_main) // Jika kunci API dimulai dengan "INSERT" ... // if (APIKey.startsWith ("INSERT")) {// lalu tampilkan roti panggang berikut ... .// Toast.makeText (ini, "Anda belum memperbarui kunci API Anda", Toast.LENGTH_SHORT) .show ()} else {... ... ...

Mengambil aset

Anda dapat memilih aset apa pun di situs Google Poly, tetapi saya akan menggunakan model planet Bumi ini.

Anda mengambil aset menggunakan ID-nya, yang muncul di akhir slug URL (disorot pada tangkapan layar sebelumnya). Kami menggabungkan ID aset ini, dengan host Poly API, yaitu "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 .httpUnduh impor com.github.kittinunf.fuel.httpDapatkan impor kotlinx.android.synthetic.main.activity_main. * import java.io.File kelas MainActivity: AppCompatActivity () {objek pengiring {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} menimpa kesenangan diCreate (saveInstanceState: Bundle?) {Super.onCreate (disimpanInstanceState) setContentView (R.layout.activity_main) jika ( APIKey.startsWith ("INSERT")) {Toast.makeText (ini, "Anda belum memperbarui kunci API Anda", Toast.LENGTH_SHORT) .show ()} else {

Selanjutnya, kita perlu membuat permintaan GET ke URL aset, menggunakan metode httpGet (). Saya juga menetapkan bahwa jenis respons haruslah 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 .httpUnduh impor com.github.kittinunf.fuel.httpDapatkan impor kotlinx.android.synthetic.main.activity_main. * import java.io.File kelas MainActivity: AppCompatActivity () {objek pengiring {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} menimpa kesenangan diCreate (saveInstanceState: Bundle?) {Super.onCreate (disimpanInstanceState) setContentView (R.layout.activity_main) jika ( APIKey.startsWith ("INSERT")) {Toast.makeText (ini, "Anda belum memperbarui kunci API Anda", Toast.LENGTH_SHORT) .show ()} else {// Melakukan panggilan server, dan kemudian meneruskan data menggunakan Metode "listOf" // assetURL.httpGet (listOf ("key" ke APIKey)) responseJson {request, response, result -> // Lakukan sesuatu dengan respon // result.fold ({val as set = it.obj ()

Aset mungkin memiliki beberapa format, seperti OBJ, GLTF, dan FBX. Kita perlu menentukan bahwa aset dalam format OBJ.

Pada langkah ini, saya juga mengambil nama dan URL semua file yang perlu Anda unduh,
termasuk file utama aset ("root"), ditambah file materi dan tekstur yang terkait ("sumber daya").

Jika aplikasi kami tidak dapat mengambil aset dengan benar, maka itu akan ditampilkan bersulang memberitahu pengguna.

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 .httpUnduh impor com.github.kittinunf.fuel.httpDapatkan impor kotlinx.android.synthetic.main.activity_main. * import java.io.File kelas MainActivity: AppCompatActivity () {objek pengiring {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} menimpa kesenangan diCreate (saveInstanceState: Bundle?) {Super.onCreate (disimpanInstanceState) setContentView (R.layout.activity_main) jika ( APIKey.startsWith ("INSERT")) {Toast.makeText (ini, "Anda belum memperbarui kunci API Anda", Toast.LENGTH_SHORT) .show ()} else {// Buat permintaan GET ke URL aset // asetURL. httpGet (listOf ("key" ke APIKey)). responseJson {request, response, result -> // Lakukan sesuatu dengan respons // result.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: String? = null // Periksa format aset, menggunakan array “format” // val assetFormats = asset.getJSONArray ("format") // Ulangi semua format // untuk (i dalam 0 hingga assetFormats.length ()) { val currentFormat = assetFormats.getJSONObject (i) // Gunakan formatType untuk mengidentifikasi tipe format sumber ini. Jika formatnya adalah OBJ… .// if (currentFormat.getString ("formatType") == "OBJ") {//...then ambil file 'root' sumber daya ini, yaitu file OBJ // objectURL = currentFormat. getJSONObject ("root") .getString ("url") // Ambil semua dependensi file root // materialLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("relatifPath") materialLibraryURL = currentFormat.getJSONArray ("resource") .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_, _ -> File (filesDir, "globeAsset.obj")} .response {_ , _, result -> result.fold ({}, {// Jika Anda tidak dapat menemukan atau mengunduh file OBJ, maka tampilkan kesalahan // Toast.makeText (ini, "Tidak dapat mengunduh sumber daya", Toast.LENGTH_SHORT ) .show ()})} materialLibraryURL !!. httpDownload (). destination {_, _ -> File (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast. makeText (ini, "Tidak dapat mengunduh sumber daya", Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (ini, "Tidak dapat mengunduh sumber daya", Toast.LENGTH_SHORT) .show ()})}}}

Pada titik ini, jika Anda menginstal proyek di smartphone atau tablet Android Anda, atau Android Virtual Device (AVD), maka aset akan berhasil diunduh, tetapi aplikasi tidak akan benar-benar menampilkannya. Mari perbaiki ini sekarang!

Membuat layar kedua: Menambahkan navigasi

Kami akan menampilkan aset dalam mode layar penuh, jadi mari perbarui file main_activity.xml kami untuk menyertakan tombol yang, ketika diketuk, akan meluncurkan Aktivitas layar penuh.

Sekarang mari kita tambahkan onClickListener ke akhir file 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 .httpUnduh impor com.github.kittinunf.fuel.httpDapatkan impor kotlinx.android.synthetic.main.activity_main. * import java.io.File kelas MainActivity: AppCompatActivity () {objek pengiring {const val APIKey = "INSERT-YOUR-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} menimpa kesenangan diCreate (saveInstanceState: Bundle?) {Super.onCreate (disimpanInstanceState) setContentView (R.layout.activity_main) jika ( APIKey.startsWith ("INSERT")) {Toast.makeText (ini, "Anda belum memperbarui kunci API Anda", Toast.LENGTH_SHORT) .show ()} else {assetURL.httpGet (listOf ("key" ke 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 ("format") untuk (i dalam 0 sampai 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 ("relatifPath") materialLibraryURL = currentFormat.getJSONArray (sumber "sumber" ) .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_, _ -> File (filesDir, "globeAsset.obj")} .response {_, _, result -> result.fold ({}, {Toast.makeText (ini, "Tidak dapat mengunduh sumber daya", Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!. httpDownload (). tujuan {_, _ -> File (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast.makeText (ini, "Tidak dapat mengunduh sumber daya", Toast.LENGTH_SHORT) .show ()})}},, {Toast.makeText (ini, "Tidak dapat mengunduh sumber daya", Toast.LENGTH_SHORT) .sh ow ()})} // Terapkan tombol // displayButton.setOnClickListener {val intent = Intent (this, SecondActivity :: class.java) startActivity (intent); }}}

Membangun kanvas 3D

Sekarang, mari kita ciptakan Aktivitas tempat kami akan menampilkan aset kami dalam mode layar penuh:

  • Kontrol-klik file MainActivity.kt proyek Anda, dan pilih "Baru> File / Kelas Kotlin."
  • Buka dropdown "Jenis", dan pilih "Kelas."
  • Beri kelas ini nama "SecondActivity," dan kemudian klik "OK."

Untuk menggambar objek 3D, kita membutuhkan kanvas 3D! Saya akan menggunakan renderer P3D pustaka Pemrosesan untuk Android, yang berarti memperluas kelas PApplet, mengganti metode pengaturan () dan meneruskan P3D sebagai argumen ke metode fullScreen (). Kita juga perlu membuat properti yang mewakili aset Poly sebagai objek PShape.

private fun displayAsset () {val canvas3D = objek: PApplet () {var polyAsset: PShape? = null menimpa pengaturan menyenangkan () {fullScreen (PConstants.P3D)}

Selanjutnya, kita perlu menginisialisasi objek PShape, dengan mengganti metode setup (), memanggil metode loadShape (), dan kemudian melewati path absolut dari file .obj:

menimpa pengaturan menyenangkan () {polyAsset = loadShape (File (filesDir, "globeAsset.obj"). absolutePath)}

Menggambar di atas kanvas P3D

Untuk menggambar di kanvas 3D ini, kita perlu mengganti metode draw ():

timpa fun draw () {background (0) bentuk (polyAsset)}}

Secara default, banyak aset yang diambil dari API API berada di sisi yang lebih kecil, jadi jika Anda menjalankan kode ini sekarang, maka Anda bahkan mungkin tidak melihat aset, tergantung pada konfigurasi layar Anda. Saat membuat adegan 3D, Anda biasanya akan membuat kamera khusus sehingga pengguna dapat menjelajahi adegan dan melihat aset 3D Anda dari 360 derajat penuh. Namun, ini berada di luar cakupan artikel ini sehingga saya akan mengubah ukuran dan posisi aset secara manual, untuk memastikannya pas di layar.

Anda dapat meningkatkan ukuran aset, dengan meneruskan nilai negatif ke metode scale ():

skala (-10f)

Anda dapat menyesuaikan posisi aset di ruang 3D virtual menggunakan metode translate () dan koordinat berikut:

  • X. Posisikan aset di sepanjang sumbu horizontal.
  • Y. Posisikan aset di sepanjang sumbu vertikal.
  • Z. Ini adalah sumbu "kedalaman / tinggi", yang mengubah objek 2D menjadi objek 3D. Nilai-nilai positif menciptakan kesan bahwa objek itu mendatangi Anda, dan nilai-nilai negatif menciptakan kesan bahwa objek tersebut bergerak menjauh dari Anda.

Perhatikan bahwa transformasi bersifat kumulatif, jadi semua yang terjadi setelah fungsi mengakumulasikan efek.

Saya menggunakan yang berikut ini:

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

Ini kode yang sudah selesai:

override fun draw () {background (0) skala (-10f) terjemahkan (-50f, -100f) // Gambar aset dengan memanggil shape () metode // shape (polyAsset)}}

Selanjutnya, kita perlu membuat file tata letak yang sesuai, tempat kita akan menambahkan kanvas 3D sebagai widget FrameLayout:

  • Klik kontrol folder "res> layout" proyek Anda.
  • Pilih "Layout resource file."
  • Beri nama file ini "activity_second," dan kemudian klik "OK."

Sekarang kita memiliki "asset_view" FrameLayout kita, kita perlu memberi tahu SecondActivity kita tentang hal itu! Balik kembali ke file SecondActivity.kt, buat instance PFragment baru, dan arahkan ke arah widget "asset_view" kami:

import android.os.Bundle import android.support.v7.app.AppCompatActivity impor kotlinx.android.synthetic.main.activity_second. * import processing.android.PFragment pemrosesan impor.core.PAplet import processing.core.PConstants import processing.core.PConstants import processing.core .Bentuk impor java.io.File class SecondActivity: AppCompatActivity () {override fun onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_second) displayAsset ()} private fun displayAsset () canvas3D = objek: PApplet () {var polyAsset: PShape? = null menimpa pengaturan menyenangkan () {fullScreen (PConstants.P3D)} mengesampingkan pengaturan menyenangkan () {polyAsset = loadShape (File (filesDir, "globeAsset.obj"). absolutePath)} mengesampingkan fun draw () skala {background (0) (-10f) terjemahkan (-50f, -100f) bentuk (polyAsset)}} // Tambahkan berikut // val assetView = PFragment (canvas3D) assetView.setView (asset_view, this)}}

Langkah terakhir, adalah menambahkan SecondActivity ke Manifest Anda:

// Tambahkan berikut //

Menguji proyek Anda

Kami sekarang siap untuk menguji proyek yang sudah selesai! Instal di perangkat Android Anda atau AVD, dan pastikan Anda memiliki koneksi Internet aktif. Segera setelah aplikasi diluncurkan, itu akan mengunduh aset, dan Anda kemudian dapat melihatnya dengan mengetuk tombol "Aset Display".

Anda dapat mengunduh proyek lengkap ini dari GitHub.

Membungkus

Pada artikel ini, kami melihat cara menggunakan API API untuk mengambil aset 3D saat runtime, dan cara menampilkan aset itu menggunakan pustaka Pemrosesan untuk Android. Apakah Anda berpikir bahwa Poly API berpotensi membuat pengembangan VR dan AR dapat diakses oleh lebih banyak orang? Beri tahu kami di komentar di bawah!

Terkait

  • Google akan membawa aplikasi AR ke "ratusan juta" perangkat Android pada 2018
  • Google akan mengajarkan Anda tentang AI dan pembelajaran mesin secara gratis
  • 15 game VR terbaik untuk Google Karton
  • 10 aplikasi VR terbaik untuk Google Karton
  • Apa itu Google Fuchsia? Apakah ini Android baru?
  • Apa itu Google Duplex? - fitur, tanggal rilis, dan banyak lagi
  • Cara membuat aplikasi VR untuk Android hanya dalam 7 menit
  • Headset VR seluler - apa pilihan terbaik Anda?

Keepakatan Verizon ini angat baik untuk orang-orang yang ingin menyimpan ponel yang tidak terkunci yang lebih lama, tetapi ingin mengalihkan telepon dan nomor mereka ke operator. Verizon tidak hanya ...

Dengan jaringan terbear dan pilihan telepon yang angat baik, tidak heran mengapa Verizon ecara lua dianggap ebagai "anjing top" dari emua operator utama A. Bagi mereka yang berada di jaringa...

Publikasi Populer