Poly API: VR ve AR Android uygulamalarınız için 3B varlıkları alma

Yazar: Peter Berry
Yaratılış Tarihi: 14 Lang L: none (month-012) 2021
Güncelleme Tarihi: 4 Mayıs Ayı 2024
Anonim
Poly API: VR ve AR Android uygulamalarınız için 3B varlıkları alma - Uygulamaların
Poly API: VR ve AR Android uygulamalarınız için 3B varlıkları alma - Uygulamaların

İçerik


Sanal Gerçeklik (VR) veya Artırılmış Gerçeklik (AR) mobil uygulaması için harika bir fikriniz var, ancak vizyonunuzu hayata nasıl getireceğiniz hakkında hiçbir fikriniz yok mu?

Ayrıca deneyimli bir 3D sanatçısı olan bir Android geliştiricisi değilseniz, daha sonra sürükleyici, 360 derecelik bir deneyim sunmak için gereken tüm varlıkları yaratmak göz korkutucu bir süreç olabilir.

Sırf 3B modeller oluşturmak için gerekli zamana, kaynağa veya deneyime sahip olmadığınızdan, değil harika bir VR veya AR mobil uygulaması oluşturamazsınız demek! World Wide Web’de ücretsiz olarak bulunan çok çeşitli 3B kaynaklar ve bu varlıkları Android uygulamalarınızda indirmek ve oluşturmak için ihtiyaç duyduğunuz tüm API’ler, çerçeveler ve kütüphaneler var.

İleriyi Oku: Artık Daydream VR kullanarak herhangi bir web sitesini ziyaret edebilirsiniz. Bunu bile.


Bu yazıda, binlerce 3D varlığı parmaklarınızın ucuna getiren çevrimiçi bir depo ve API olan Poly'e bakacağız. Bu makalenin sonunda, çalışma zamanında bir 3D Poly varlık alan ve daha sonra popüler Processing for Android kütüphanesini kullanarak işleyen bir uygulama yaratmış olacaksınız.

Poly ile 3B varlıkları görüntüleme

Eğer Birlik gelişimine hiç uğraşmadıysanız, Poli deposu, Birlik Varlık Mağazasına benzer - Poly içindeki her şey ücretsizdir!

Poly’ın 3B modellerinin çoğu Creative Commons lisansı altında yayınlanmaktadır; bu nedenle, yaratıcınıza uygun krediyi verdiğiniz sürece, bu varlıkları kullanmakta, değiştirmekte ve remikslemekte özgürsünüz.

Poly’ın 3B modellerinin tümü, Daydream ve ARCore gibi Google’ın VR ve AR platformlarıyla uyumlu olacak şekilde tasarlanmıştır, ancak bunları istediğiniz her yerde ve istediğinizde kullanabilirsiniz - potansiyel olarak, onları Apple’ın ARKit!


Poly varlıklarını almak ve görüntülemek söz konusu olduğunda, iki seçeneğiniz vardır. Öncelikle, varlıkları bilgisayarınıza indirebilir ve daha sonra Android Studio'ya aktarabilirsiniz, böylece uygulamanızla birlikte gönderilir ve APK boyutuna katkıda bulunabilir ya da Poly API kullanarak çalışma zamanında bu varlıkları alabilirsiniz.

Platformlar arası, REST tabanlı Poly API, Poly’un devasa 3B model koleksiyonuna programlı, salt okunur erişim sağlar. Bu, APK'nızdaki varlıkları paketlemekten daha karmaşık olmakla birlikte, çalışma zamanında Poly varlıklarını almanın birçok yararı vardır; bu, özellikle, kaç kişinin uygulamanızı indireceğini etkileyebilecek olan APK boyutunu kontrol altında tutmanıza yardımcı olur.

Poly API'yı, kullanıcılarınıza daha fazla seçenek sunmak için de kullanabilirsiniz, örneğin bir mobil oyun geliştiriyorsanız, kullanıcılarınızın çeşitli karakter modelleri arasından seçim yapmasına izin verebilirsiniz.

Poly modellerini değiştirmekte özgür olduğunuzdan, örneğin saç veya göz rengini değiştirerek veya farklı silahlar ve zırhlar gibi diğer Poly varlıklarıyla birleştirerek kullanıcılarınızın seçtikleri karakterde ince ayar yapmasına izin verebilirsiniz. Bu şekilde, Poly API, deneyiminizi kişiselleştirmek için çok fazla alan ve tümüyle nispeten az çalışma için etkileyici bir 3D varlık yelpazesi sunmanıza yardımcı olabilir. Kullanıcılarınız tonlarca zaman harcadığınıza ve bu 3B modelleri titizlikle hazırladığınıza ikna olacak!

3B modelleme projesi oluşturma

Uygulama ilk başlatıldığında belirli bir Poly varlığını alan ve daha sonra kullanıcının isteğine göre bu varlığı tam ekran modunda görüntüleyen bir uygulama oluşturacağız.

Bu varlığı almamıza yardımcı olmak için Kotlin ve Android için bir HTTP ağ kitaplığı olan Fuel'yi kullanacağım. İstediğiniz ayarlarla yeni bir proje oluşturarak başlayın, ancak istendiğinde “Kotlin desteğini dahil et” seçeneğini belirtin.

Poly API'ye yaptığınız tüm çağrılar, uygulamanızı tanımlamak ve kullanım sınırlarını zorlamak için kullanılan bir API anahtarı içermelidir. Geliştirme ve test sırasında, genellikle kısıtlamasız bir API anahtarı kullanırsınız, ancak bu uygulamayı serbest bırakma planınız varsa Android kısıtlı bir API anahtarı kullanmanız gerekir.

Kısıtlı bir anahtar oluşturmak için projenizin SHA-1 imzalama sertifikasını bilmeniz gerekir, bu nedenle şu bilgileri alalım:

  • Android Studio’nun “Gradle” sekmesini seçin (imleci aşağıdaki ekran görüntüsünde konumlandırın). Bu bir “Gradle projeleri” paneli açar.

  • “Gradle projeleri” panelinde, projenizin ‘kökünü’ genişletmek için çift tıklayın ve ardından “Görevler> Android> İmzalama Raporu” nu seçin. Bu, Android Studio penceresinin alt kısmında yeni bir panel açar.
  • Tasks Görevlerin yerine getirilmesi / metin modunu değiştir ”düğmesini seçin (imlecin aşağıdaki ekran görüntüsünde konumlandırıldığı yer).

“Çalıştır” paneli şimdi SHA-1 parmak izi de dahil olmak üzere projeniz hakkında birçok bilgi görüntülemek için güncellenecektir.

Bir Google Cloud Platform hesabı oluşturun

Gerekli API anahtarını edinmek için bir Google Cloud Platform (GPC) hesabına ihtiyacınız olacak.

Hesabınız yoksa, ücretsiz deneme için Cloud Cloud Platform’a gidip talimatları izleyerek 12 aylık ücretsiz denemeye kaydolabilirsiniz. Kredi kartı veya banka kartı gerekli olduğunu unutmayın, ancak Sıkça Sorulan Sorular sayfasına göre, bu yalnızca kimliğinizi doğrulamak için kullanılır ve “ücretsiz denemeniz sırasında borçlandırılmayacak veya faturalandırılmayacaksınız”.

Poly API anahtarınızı alın

Hepiniz kaydolduktan sonra Poly API'yi etkinleştirebilir ve anahtarınızı oluşturabilirsiniz:

  • GCP Konsoluna gidin.
  • Sol üst köşedeki çizgili simgeyi seçin ve “API'ler ve Hizmetler> Kontrol Paneli” ni seçin.
  • “API'leri ve hizmetleri etkinleştir” i seçin.
  • Soldaki menüden “Diğer” i seçin.
  • “Poly API” kartını seçin.
  • “Etkinleştir” düğmesine tıklayın.
  • Birkaç dakika sonra, yeni bir ekrana yönlendirileceksiniz; Yan menüyü açın ve “API'ler ve Hizmetler> Kimlik Bilgileri” ni seçin.

  • Sonraki açılır pencerede, “Anahtarı kısıtla” yı seçin.
  • Anahtarınıza farklı bir ad verin.
  • “Uygulama kısıtlamaları” altında, “Android uygulamaları” öğesini seçin.
  • “Paket adı ve parmak izi ekle” yi seçin.
  • Projenizin SHA-1 parmak izini “İmzalama sertifikası parmak izi” alanına kopyalayın / yapıştırın.
  • Projenizin paket adını girin (Belge'nizde ve her sınıf dosyasının en üstünde görünür).
  • “Kaydet” i tıklayın.

Şimdi, yeni oluşturduğunuz Poly-etkin API anahtarı da dahil olmak üzere tüm API anahtarlarınızın bir listesini içeren projenizin “Kimlik Bilgileri” ekranına yönlendirileceksiniz.

Proje bağımlılıkları: Yakıt, P3D ve Kotlin eklentileri

Poly varlıklarını almak ve görüntülemek için, bazı ek kitaplıklardan yardım eline ihtiyacımız var:

  • Yakıt. Poly şu anda resmi bir Android araç setine sahip değil, bu yüzden doğrudan REST arayüzünü kullanarak API ile çalışmanız gerekecek. Bu işlemi kolaylaştırmak için, Yakıt HTTP ağ kütüphanesini kullanacağım.
  • Android için işleme. Poly varlığını görüntülemek için bu kütüphanenin P3D oluşturucusunu kullanıyorum.

Projenizin build.gradle dosyasını açın ve bu iki kütüphaneyi proje bağımlılığı olarak ekleyin:

bağımlılıklar {application fileTree (dahil:, dir: libs) uygulama "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" uygulama com.android.support:appcompat-v7:27.1.1 // Yakıt kütüphanesini ekleyin / / application com.github.kittinunf.fuel: fuel-android: 1.13.0 // Android motoru için İşleme Ekleme // uygulama org.p5android: processing-core: 4.0.1}

Kodumuzu daha kısa yapmak için, Kotlin Android uzantılarını da kullanacağım. Bu yüzden build.gradle dosyasını açarken bu eklentiyi ekleyelim:

eklenti uygulayın: kotlin-android-extensions

Son olarak, İnternet'ten varlık aldığımız için uygulamamızın İnternet iznine ihtiyacı var. Bildiriminizi açın ve aşağıdakileri ekleyin:

API anahtarınızı ekleme

Uygulamamız Poly'den bir varlık istediğinde, geçerli bir API anahtarı içermesi gerekir. Yer tutucu metni kullanıyorum, ancak siz zorunluluk Uygulama işe yarayacaksa bu yer tutucuyu kendi API anahtarınızla değiştirin.

Ayrıca bir çek ekliyorum, böylece “INSERT-YOUR-API-KEY” metnini değiştirmeyi unutursanız uygulama bir uyarı görüntüleyecektir:

android.os.Bundle alma android.support.v7.app.AppCompatActivity sınıfı içe aktarma MainActivity: AppCompatActivity () {tamamlayıcı nesne {const val APIKey = "INSERT-YOUR-API-KEY"} eğlenceyi geçersiz kıl onCreate (savedInstanceState: Bundle?) { super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) // Eğer API anahtarı “INSERT” ... // ile başlıyorsa, eğer (APIKey.startsWith ("INSERT"))) {// sonra aşağıdaki tostu göster ... .// Toast.makeText (bu, "API anahtarınızı güncellemediniz", Toast.LENGTH_SHORT) .show ()} else {... ... ...

Varlığı alma

Google Poly sitesinde herhangi bir varlığı seçebilirsiniz, ancak bu Dünya gezegeni modelini kullanıyorum.

URL bağlantısının sonunda görünen kimliğini kullanarak bir öğeyi alırsınız (önceki ekran görüntüsünde vurgulanır). Bu varlık kimliğini, "https://poly.googleapis.com/v1" olan Poly API ana bilgisayarıyla birleştiririz.

android.content.Intent içe aktarma android.os.Bundle içe aktar android.support.v7.app.AppCompatActivity içe aktarma android.widget.Toplam ithalat com.github.kittinunf.fuel.android.extension.responseJson ithalat com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet ithalat kotlinx.android.synthetic.main.activity_main. * import java.io.File sınıfı MainActivity: AppCompatActivity () {tamamlayıcı nesne {const val APIKey = "INSERT-YOUR-YOUR-APUR -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} eğlenceli geçersiz kılma onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main (eğer) APIKey.startsWith ("INSERT")) {Toast.makeText (bu, "API anahtarınızı güncellemediniz", Toast.LENGTH_SHORT) .show ()} else {

Daha sonra, httpGet () yöntemini kullanarak varlık URL’sine bir GET isteği yapmamız gerekiyor. Ayrıca, yanıt türünün JSON olması gerektiğini de belirtiyorum:

android.content.Intent içe aktarma android.os.Bundle içe aktar android.support.v7.app.AppCompatActivity içe aktarma android.widget.Toplam ithalat com.github.kittinunf.fuel.android.extension.responseJson ithalat com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet ithalat kotlinx.android.synthetic.main.activity_main. * import java.io.File sınıfı MainActivity: AppCompatActivity () {tamamlayıcı nesne {const val APIKey = "INSERT-YOUR-YOUR-APUR -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} eğlenceli geçersiz kılma onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main (eğer) APIKey.startsWith ("INSERT")) {Toast.makeText (bu, "API anahtarınızı güncellemediniz", Toast.LENGTH_SHORT) .show ()} else {// Bir sunucu çağrısı yapın ve ardından verileri kullanarak verileri iletin “ListOf” yöntemi // assetURL.httpGet (listOf (APIKey'e "anahtar")). ResponseJson {istek, yanıt, sonuç -> // Yanıtla bir şey yapın // result.fold ({val as set = it.obj ()

Varlığın OBJ, GLTF ve FBX gibi çeşitli biçimleri olabilir. Varlığın OBJ biçiminde olduğunu belirlememiz gerekir.

Bu adımda, indirmemiz gereken tüm dosyaların adını ve URL’sini de alıyorum.
varlığın birincil dosyası (“kök”) ve ayrıca ilgili malzeme ve doku dosyaları (“kaynaklar”) dahil.

Uygulamamız varlığı doğru şekilde alamıyorsa, kullanıcıyı bilgilendiren bir tost görüntüler.

android.content.Intent içe aktarma android.os.Bundle içe aktar android.support.v7.app.AppCompatActivity içe aktarma android.widget.Toplam ithalat com.github.kittinunf.fuel.android.extension.responseJson ithalat com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet ithalat kotlinx.android.synthetic.main.activity_main. * import java.io.File sınıfı MainActivity: AppCompatActivity () {tamamlayıcı nesne {const val APIKey = "INSERT-YOUR-YOUR-APUR -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} eğlenceli geçersiz kılma onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main (eğer) APIKey.startsWith ("INSERT")) {Toast.makeText (bu, "API anahtarınızı güncellemediniz", Toast.LENGTH_SHORT) .show ()} else {// Bir varlık URL'si için bir GET isteği yapın // assetURL. httpGet (listOf ("anahtar" için APIKey))) responseJson {istek, yanıt, sonuç -> // Yanıtla bir şeyler yapın // result.fold ({val asset = it.obj () var objectURL: String?) = null var materialLibraryName: String? = null var materialLibraryURL: String? = null // “formatları” dizisini kullanarak valet biçimini kontrol edin // val assetFormats = asset.getJSONArray ("formatlar") // için tüm formatları içine alın (i, 0'a kadar, varFormats.length ()) { val currentFormat = assetFormats.getJSONObject (i) // Bu kaynağın format türünü tanımlamak için formatType kullanın. Eğer format OBJ… .// eğer (currentFormat.getString ("formatType") == "OBJ") {//...bu kaynağın 'root' dosyasını alın, yani OBJ dosyası // objectURL = currentFormat. getJSONObject ("root") .getString ("url") // Tüm kök dosya bağımlılıklarını al // // MaddiLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("relatifPath"). ("kaynaklar") .getJSONObject (0) .getString ("url") sonu}} objectURL !!. httpDownload (). destination {_, _ -> Dosya (filesDir, "globeAsset.obj")} .response {_ , _, result -> result.fold ({}, {// OBJ dosyasını bulamıyorsanız veya indiremiyorsanız, bir hata gösterin // Toast.makeText (bu, "Kaynak indirilemiyor", Toast.LENGTH_SHORT ) .show ()})} materialLibraryURL !!. httpDownload (). destination {_, _ -> Dosya (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast. makeText (bu, "Kaynak indirilemiyor", Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (bu, "kaynak indirilemiyor", Toast.LENGTH_SHORT) .show ()})}}}

Bu noktada, projeyi Android akıllı telefonunuza veya tabletinize veya Android Sanal Aygıtınıza (AVD) yüklerseniz, varlık başarılı bir şekilde indirilir, ancak uygulama gerçekte görüntülenmez. Şimdi bunu düzeltelim!

İkinci bir ekran oluşturma: Gezinme ekleme

Varlığı tam ekran modunda göstereceğiz, bu nedenle, main_activity.xml dosyamızı, dokunulduğunda tam ekran Aktivitesini başlatacak bir düğme içerecek şekilde güncelleyelim.

Şimdi onClickListener'ı MainActivity.kt dosyasının sonuna ekleyelim:

android.content.Intent içe aktarma android.os.Bundle içe aktar android.support.v7.app.AppCompatActivity içe aktarma android.widget.Toplam ithalat com.github.kittinunf.fuel.android.extension.responseJson ithalat com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet ithalat kotlinx.android.synthetic.main.activity_main. * import java.io.File sınıfı MainActivity: AppCompatActivity () {tamamlayıcı nesne {const val APIKey = "INSERT-YOUR-YOUR-APUR -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} eğlenceli geçersiz kılma onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_main (eğer) APIKey.startsWith ("INSERT")) {Toast.makeText (bu, "API anahtarınızı güncellemediniz", Toast.LENGTH_SHORT) .show ()} else {assetURL.httpGet (listOf ("key", 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 ("formatlar") için (i, 0'a kadar 0: ActiveFormats.length ()) ) {objectURL = currentFormat.getJSONObject ("root") .getString ("url") materialLibraryName = currentFormat.getJSONArray ("kaynaklar") .getJSONObject (0) .getString ("relatPath") materialLibraryURL = currentFor " ) .getJSONObject (0) .getString ("url") sonu}} objectURL !!. httpDownload (). destination {_, _ -> Dosya (filesDir, "globeAsset.obj")} .response {_, _, sonuç -> result.fold ({}, {Toast.makeText (bu, "Kaynak indirilemiyor", Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!. httpDownload (). destination {_, _ -> Dosya (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast.makeText (bu, "Kaynak indirilemiyor", Toast.LENGTH_SHORT) .show ()})}}, {Toast.makeText (bu, "kaynak indirilemiyor", Toast.LENGTH_SHORT) .sh ow ()})} // Bir düğme uygulayın // displayButton.setOnClickListener {val intent = Amaç (bu, SecondActivity :: class.java) startActivity (intent); }}}

3B tuval oluşturma

Şimdi, varlığımızı tam ekran modunda göstereceğimiz Aktivite'yi oluşturalım:

  • Projenizin MainActivity.kt dosyasına tıklayın ve “Yeni> Kotlin Dosyası / Sınıfı” seçeneğini seçin.
  • “Kind” açılır menüsünü açın ve “Class” öğesini seçin.
  • Bu sınıfa “SecondActivity” adını verin ve ardından “Tamam” ı tıklayın.

3B nesne çizmek için 3B tuvale ihtiyacımız var! Android için İşlem Yapma'nın kütüphanesinin P3D oluşturucusunu kullanacağım, bu da PApplet sınıfını genişletmek, settings () yöntemini geçersiz kılmak ve ardından P3D'yi fullScreen () yöntemine argüman olarak iletmek anlamına gelir. Ayrıca Poly varlığını bir PShape nesnesi olarak temsil eden bir özellik yaratmamız gerekiyor.

özel eğlence displayAsset () {val canvas3D = nesne: PApplet () {var polyAsset: PShape? = null eğlence ayarları geçersiz kıl () {fullScreen (PConstants.P3D)}

Ardından, setup () yöntemini geçersiz kılarak, loadShape () yöntemini çağırarak ve .obj dosyasının mutlak yolunu geçerek PShape nesnesini başlatmamız gerekiyor:

eğlenceli ayarları geçersiz kıl () {polyAsset = loadShape (Dosya (filesDir, "globeAsset.obj"). absolutePath)}

P3D’nin tuvalinde çizim yapma

Bu 3B tuval üzerine çizim yapmak için draw () yöntemini geçersiz kılmamız gerekir:

eğlenceli çizim geçersiz kıl () {background (0) shape (polyAsset)}}

Varsayılan olarak, Poly API'den alınan varlıkların çoğu daha küçük taraftadır, bu nedenle bu kodu şimdi çalıştırırsanız, ekran yapılandırmanıza bağlı olarak varlığı bile göremeyebilirsiniz. 3B sahneler oluştururken, kullanıcının sahneyi araştırabilmesi ve 3B varlıklarınızı 360 dereceden tam olarak görebilmesi için genellikle özel bir kamera oluşturursunuz. Ancak bu, bu makalenin kapsamı dışında olduğundan, ekrana rahatça uyduğundan emin olmak için varlığın boyutunu ve konumunu el ile değiştireceğim.

Scale () yöntemine negatif bir değer ileterek varlığın boyutunu artırabilirsiniz:

ölçek (-10f)

Translate () yöntemini ve aşağıdaki koordinatları kullanarak, varlığın sanal 3B alandaki konumunu ayarlayabilirsiniz:

  • X. Varlığı yatay eksen boyunca konumlandırır.
  • Y. Varlığı dikey eksen boyunca konumlandırır.
  • Z. Bu, 2D nesneyi 3D nesneye dönüştüren “derinlik / yükseklik” eksenidir. Pozitif değerler, nesnenin size doğru geldiği izlenimini yaratır ve negatif değerler nesnenin sizden uzağa hareket ettiği izlenimini yaratır.

Dönüşümlerin birikimli olduğuna dikkat edin, bu nedenle işlevden sonra gerçekleşen her şey efekti toplar.

Aşağıdakileri kullanıyorum:

çeviri (-50f, -100f, 10f)

İşte tamamlanan kod:

eğlenceli çizmek geçersiz kıl () {background (0) ölçek (-10f) translate (-50f, -100f) // Varlığı çizerek shape () yöntemini çağırarak // şekil (polyAsset)}}

Sonra, 3B tuvali FrameLayout widget'ı olarak ekleyeceğimiz ilgili düzen dosyasını oluşturmamız gerekiyor:

  • Projenizin “res> layout” klasörünü Control-tıklayın.
  • “Düzen kaynak dosyası” seçeneğini seçin.
  • Bu dosyaya “activity_second” adını verin ve ardından “Tamam” ı tıklayın.

Şimdi “asset_view” FrameLayout'umuz var, SecondActivity'ye bunun hakkında bilgi vermemiz gerekiyor! SecondActivity.kt dosyasına geri dönün, yeni bir PFragment örneği oluşturun ve onu “asset_view” widget'ımızın yönünde tutun:

android.os.Bundle import android.support.v7.app.AppCompatActivity içeri aktarma ithalat kotlinx.android.synthetic.main.activity_second. * import processing.android.PFragment import processing.core.PApplet import processing.core.PConstants ithalat işlem .PShape import java.io.File sınıfı SecondActivity: AppCompatActivity () {eğlenceli geçersiz kıl onCreate (savedInstanceState: Bundle?) {Super.onCreate (savedInstanceState) setContentView (R.layout.activity_second) displayAsset ()} canvas3D = nesne: PApplet () {var polyAsset: PShape? = null eğlence ayarları geçersiz kıl () {fullScreen (PConstants.P3D)} eğlence ayarını geçersiz kıl () {polyAsset = loadShape (Dosya (filesDir, "globeAsset.obj"). (-10f) tercüme (-50f, -100f) şekli (polyAsset)}} // Aşağıdakileri ekleyin // val assetView = PFragment (canvas3D) assetView.setView (asset_view, this)}}

Son adım, SecondActivity'yi Metin Listenize eklemektir:

// Aşağıdakileri ekleyin //

Projenizi test etmek

Artık bitmiş projeyi test etmeye hazırız! Android cihazınıza veya AVD'ye kurun ve aktif bir İnternet bağlantınız olduğundan emin olun. Uygulama açılır açılmaz varlığı indirir ve “Varlığı Göster” düğmesine dokunarak görüntüleyebilirsiniz.

Bu projeyi GitHub'dan indirebilirsiniz.

Sarma

Bu makalede, Poly API'nin çalışma zamanında 3B bir öğeyi almak için nasıl kullanıldığını ve bu varlığın Android için İşlemci kütüphanesini kullanarak nasıl görüntüleneceğini inceledik. Poly API'nin, VR ve AR gelişimini daha fazla insan için erişilebilir kılma potansiyeli olduğunu düşünüyor musunuz? Aşağıdaki yorumlarda bize bildirin!

İlgili

  • Google, AR uygulamalarını 2018’deki “yüz milyonlarca” Android cihazına getirecek
  • Google size AI ve makine öğrenmesi hakkında ücretsiz bilgi verecek
  • Google Karton için en iyi 15 VR oyunu
  • Google Karton için en iyi 10 VR uygulaması
  • Google Fuşya Nedir? Bu yeni Android mi?
  • Google Dubleks nedir? - özellikler, çıkış tarihi ve daha fazlası
  • Sadece 7 dakikada Android için bir VR uygulaması nasıl oluşturulur
  • Mobil VR kulaklıkları - en iyi seçenekleriniz nelerdir?

Razer, mevcut oyun telefonu trendini 2017'de orijinal Razer Phone'un lanmanıyla başlattı ve bir yıldan kıa bir üre onra şirket halefi Razer Phone 2 ile geri döndü. Şimdi, orjina...

Android Pie'nin dün Razer Phone 2'ye geçmeinin ardından, şirket el cihazına önemli bir fiyat indirimi ağlamak için hazırlanıyor GMArena). 1 Mart yarından itibaren Razer Pho...

Popüler Makaleler