Poly API: Извличане на 3D активи за вашите VR и AR Android приложения

Автор: Peter Berry
Дата На Създаване: 14 Lang L: none (month-012) 2021
Дата На Актуализиране: 4 Може 2024
Anonim
Poly API: Извличане на 3D активи за вашите VR и AR Android приложения - Приложения
Poly API: Извличане на 3D активи за вашите VR и AR Android приложения - Приложения

Съдържание


Имате ли страхотна идея за мобилно приложение Virtual Reality (VR) или Augmented Reality (AR), но нямате идея как да реализирате визията си?

Освен ако не сте разработчик на Android, който също е опитен 3D художник, създаването на всички активи, необходими за потапяне, 360 градусово преживяване, може да бъде обезсърчителен процес.

Само защото нямате време, ресурси или опит, необходими за създаване на 3D модели, не означава, че не можете да създадете страхотно VR или AR мобилно приложение! Има огромна гама от 3D ресурси, свободно достъпни в световната мрежа, плюс всички API, рамки и библиотеки, които трябва да изтеглите и предоставите тези активи във вашите Android приложения.

Прочетете по-нататък: Вече можете да посетите всеки уебсайт, използвайки Daydream VR. Дори и този.

В тази статия ще разгледаме Poly, онлайн хранилище и API, който поставя хиляди 3D активи на една ръка разстояние. В края на тази статия ще създадете приложение, което извлича 3D Poly актив по време на изпълнение и след това ще го рендира с помощта на популярната библиотека Processing for Android.


Показване на 3D активи с Poly

Ако някога сте се занимавали с разработването на Unity, тогава хранилището Poly е подобно на Unity Asset Store - с изключение на това, че всичко в Poly е безплатно!

Много от 3D моделите на Poly са публикувани под лиценза Creative Commons, така че можете да използвате, модифицирате и ремиксирате тези активи, стига да дадете подходящ кредит на създателя.

Всички 3D модели на Poly са проектирани така, че да са съвместими с VR и AR платформите на Google, като Daydream и ARCore, но можете да ги използвате където и където искате - потенциално дори можете да ги използвате с ARKit на Apple!

Когато става дума за извличане и показване на Poly активи, имате две възможности. Първо, можете да изтеглите активите на вашия компютър и след това да ги импортирате в Android Studio, така че те да се доставят с вашето приложение и да допринесат за неговия размер на APK или можете да изтеглите тези активи по време на изпълнение с помощта на Poly API.


Кросплатформеният, базиран на REST Poly API осигурява програмен, достъп само за четене до огромната колекция от 3D модели на Poly. Това е по-сложно от свързването на активи с вашия APK, но има няколко предимства за извличането на Poly активи по време на изпълнение, най-вече това, че помага да поддържате размера на APK под контрол, което може да повлияе на това колко хора изтеглят приложението ви.

Можете също така да използвате Poly API, за да предоставите на потребителите си по-голям избор, например ако разработвате мобилна игра, тогава можете да оставите потребителите си да избират от редица символни модели.

Тъй като вие сте свободни да променяте моделите Poly, можете дори да оставите вашите потребители да оправят избрания от тях характер, например като променят цвета на косата или очите или като го комбинирате с други Poly активи, като различни оръжия и броня. По този начин, Poly API може да ви помогне да доставите впечатляваща гама от 3D активи, с много възможности за персонализиране на опита - и всичко това за сравнително малко работа. Потребителите ви ще бъдат убедени, че сте прекарали един тон време, щателно изработвайки всички тези 3D модели!

Създаване на проект за 3D моделиране

Ще създадем приложение, което извлича конкретен Poly актив при първото стартиране на приложението, след което по желание на потребителя ще покаже този актив в режим на цял екран.

За да ни помогне да извлечем този актив, ще използвам Fuel, което е HTTP мрежова библиотека за Kotlin и Android. Започнете, като създадете нов проект с настройките по ваш избор, но когато бъдете подканени да изберете „Включване на поддръжка на Kotlin“.

Всички обаждания, които правите към Poly API, трябва да включват ключ за API, който се използва за идентифициране на приложението ви и налагане на ограничения за използване. По време на разработката и тестването често ще използвате неограничен ключ за API, но ако имате някакви планове да пуснете това приложение, тогава трябва да използвате ограничен за Android API ключ.

За да създадете ограничен ключ, ще трябва да знаете сертификата за подписване на SHA-1 на вашия проект, така че нека да получите тази информация сега:

  • Изберете раздела „Gradle“ на Android Studio (където курсорът е разположен на следната екранна снимка). Това отваря панел „Проекти на Gradle“.

  • В панела „Проекти на Gradle“ щракнете двукратно, за да разширите „root“ на вашия проект, след което изберете „Задачи> Android> Подписване на отчета.“ Това отваря нов панел в долната част на прозореца на Android Studio.
  • Изберете бутона „Превключване на изпълнение на задачи / текстов режим“ (където курсорът е разположен на следната екранна снимка).

Сега панелът „Изпълнение“ ще се актуализира, за да показва много информация за вашия проект, включително неговия пръстов отпечатък SHA-1.

Създайте акаунт в Google Cloud Platform

За да придобиете необходимия ключ за API, ще ви трябва акаунт в Google Cloud Platform (GPC).

Ако нямате акаунт, тогава можете да се регистрирате за 12-месечна безплатна пробна версия, като отидете на безплатна страница „Опитайте облачната платформа“ и следвайте инструкциите. Имайте предвид, че е необходима кредитна карта или дебитна карта, но според страницата с често задавани въпроси, тя се използва само за проверка на самоличността ви и „няма да бъдете таксувани или таксувани по време на безплатната ви пробна версия“.

Вземете вашия ключ за API API

След като всички сте се регистрирали, можете да активирате Poly API и да създадете своя ключ:

  • Преминете към конзолата на GCP.
  • Изберете иконата на облицовката в горния ляв ъгъл и изберете „APIs & Services> Dashboard“.
  • Изберете „Активиране на API и услуги.“
  • В менюто отляво изберете „Друго“.
  • Изберете картата „Poly API“.
  • Кликнете върху бутона „Активиране“.
  • След няколко минути ще бъдете преместени на нов екран; отворете страничното меню и изберете „APIs & Services> Credentials“.

  • В последващото изскачащо меню изберете „Ограничи ключ“.
  • Дайте на вашия ключ отличително име.
  • Под „Ограничения за приложения“ изберете „Приложения за Android“.
  • Изберете „Добавяне на име на пакета и пръстов отпечатък.“
  • Копирайте / поставете пръстовия отпечатък на вашия проект на SHA-1 в полето „Отпечатък на сертификат за подписване“.
  • Въведете името на пакета на вашия проект (той се появява във вашия Манифест и в горната част на всеки клас на файла)
  • Кликнете върху „Запазване“.

Сега ще бъдете отведени до екрана „Поверителни данни“ на вашия проект, който съдържа списък на всички ваши API ключове - включително активирания за многократно API API ключ, който току-що създадохте.

Зависимости на проекта: разширения за гориво, P3D и Kotlin

За да извлечем и покажем Poly активите, ще ни е необходима помощна помощ от някои допълнителни библиотеки:

  • Гориво. Понастоящем Poly няма официален инструментариум за Android, така че ще трябва да работите директно с API, използвайки неговия REST интерфейс. За да направя този процес по-лесен, ще използвам мрежовата библиотека Fuel HTTP.
  • Обработка за Android. Ще използвам P3D визуализатора на тази библиотека за показване на Poly актив.

Отворете файла build.gradle на вашия проект и добавете тези две библиотеки като зависимост на проекта:

зависимости {изпълнение fileTree (включва:, реж .: libs) внедряване "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" изпълнение com.android.support:appcompat-v7:27.1.1 // Добавяне на библиотеката на горивото / / изпълнение com.github.kittinunf.fuel: гориво-android: 1.13.0 // Добавяне на Processing for Android engine // внедряване org.p5android: обработка-ядро: 4.0.1}

За да направим нашия код по-сбит, ще използвам и Kotlin разширения за Android, така че нека добавим тази приставка, докато имаме отворения файл build.gradle:

прилагам плъгин: kotlin-android-extensions

И накрая, тъй като извличаме актива от интернет, нашето приложение се нуждае от разрешение за интернет. Отворете своя Манифест и добавете следното:

Добавяне на вашия API ключ

Всеки път, когато нашето приложение изисква актив от Poly, то трябва да включва валиден API ключ. Използвам текст на заместител, но вие трябва да заменете този заместител със собствен ключ за API, ако приложението някога работи.

Добавям и чек, така че приложението да показва предупреждение, ако забравите да замените текста „INSERT-YOUR-API-KEY“:

import android.os.Bundle import android.support.v7.app.AppCompatActivity клас MainActivity: AppCompatActivity () {придружител обект {const val APIKey = "INSERT-YOUR-API-KEY"} отмени забавлението onCreate (saveInstanceState: Bundle?) { super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) // Ако ключът на API започва с „INSERT“ ... // if (APIKey.startsWith („INSERT“)) {// след това показва следния тост… .// Toast.makeText (това „Вие не сте актуализирали вашия ключ за API“, Toast.LENGTH_SHORT) .show ()} else {... ... ...

Извличане на актива

Можете да изберете всеки актив на сайта на Google Poly, но аз ще използвам този модел на планетата Земя.

Извличате актив, използвайки неговия идентификационен номер, който се появява в края на служебния URL адрес (подчертан в предишната екранна снимка). Комбинираме този идентификационен номер на актива с хоста на Poly API, който е „https://poly.googleapis.com/v1.“

import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.widget.Toast import com.github.kittinunf.fuel.android.extension.responseJson import com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet импортиране kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {придружител обект {const val APIKey = "ВЪВЕЖДАЙТЕ СВОЙ-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} отмени забавлението onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT")) {Toast.makeText (това, "Вие не сте актуализирали вашия API ключ", Toast.LENGTH_SHORT) .show ()} else {

След това трябва да направим GET заявка към URL адреса на актива, използвайки метода httpGet (). Посочвам също, че типът отговор трябва да бъде 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.httpGet импортиране kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {придружител обект {const val APIKey = "ВЪВЕЖДАЙТЕ СВОЙ-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} отмени забавлението onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT")) {Toast.makeText (това, "Вие не сте актуализирали вашия ключ за API", Toast.LENGTH_SHORT) .show ()} else {// Осъществете сървър и след това предайте данните, като използвате Метод „listOf“ // активURL.httpGet (listOf („ключ“ към APIKey)). ReplyJson {заявка, отговор, резултат -> // Направете нещо с отговора // result.fold ({val as set = it.obj ()

Активът може да има няколко формата, като OBJ, GLTF и FBX. Трябва да определим, че активът е във формат OBJ.

В тази стъпка извличам също името и URL адреса на всички файлове, които трябва да изтеглим,
включително основния файл на актива („root“), плюс всички свързани материали и текстурни файлове („ресурси“).

Ако нашето приложение не е в състояние да извлече правилно актива, тогава ще се покаже тост, информиращ потребителя.

import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.widget.Toast import com.github.kittinunf.fuel.android.extension.responseJson import com.github.kittinunf.fuel .httpDownload import com.github.kittinunf.fuel.httpGet импортиране kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {придружител обект {const val APIKey = "ВЪВЕЖДАЙТЕ СВОЙ-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} отмени забавлението onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT")) {Toast.makeText (това, "Вие не сте актуализирали вашия API ключ", Toast.LENGTH_SHORT) .show ()} else {// Направете GET заявка към URL адреса на актива // активURL. httpGet (listOf ("ключ" към APIKey)). replyJson {заявка, отговор, резултат -> // Направете нещо с отговора // result.fold ({val актив = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: String? = null // Проверете формата на актива, използвайки масива „формати“ // val assetFormats = imovina.getJSONArray („формати“) // Прегледайте всички формати // за (i в 0 до актива Formats.length ()) { val currentFormat = assetFormats.getJSONObject (i) // Използвайте formatType, за да идентифицирате типа на формата на този ресурс. Ако форматът е OBJ… .// if (currentFormat.getString („formatType“) == „OBJ“) {//... тогава извлечете файла „root“ на този ресурс, т.е. OBJ файла // objectURL = currentFormat. getJSONObject ("root") .getString ("url") // Извличане на всички зависимости на кореновия файл // materialLibraryName = currentFormat.getJSONArray ("ресурси") .getJSONObject (0) .getString ("relaPath") materialLibraryURL = currentFormat.getJSON ("ресурси") .getJSONObject (0) .getString ("url") почивка}} обектURL !!. httpDownload (). дестинация {_, _ -> Файл (filesDir, "globeAsset.obj")} .отговор {_ , _, резултат -> result.fold ({}, {// Ако не можете да намерите или изтеглите OBJ файла, тогава покажете грешка // Toast.makeText (това "Невъзможно изтегляне на ресурс", Toast.LENGTH_SHORT ) .show ()})} materialLibraryURL !!. httpDownload (). местоназначение {_, _ -> файл (filesDir, materialLibraryName)}. Response {_, _, резултат -> result.fold ({}, {Toast. makeText (това "Невъзможно изтегляне на ресурс", Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (това „Невъзможно изтегляне на ресурс“, Toast.LENGTH_SHORT) .show ()})}}}

В този момент, ако инсталирате проекта на вашия смартфон или таблет с Android или виртуално устройство Android (AVD), активът ще се изтегли успешно, но приложението всъщност няма да го покаже. Нека да поправим това сега!

Създаване на втори екран: Добавяне на навигация

Ще покажем актива в режим на цял екран, така че нека актуализираме нашия файл main_activity.xml, за да включим бутон, който при натискане ще стартира дейността на цял екран.

Сега нека добавим onClickListener в края на файла 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.httpGet импортиране kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {придружител обект {const val APIKey = "ВЪВЕЖДАЙТЕ СВОЙ-API -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} отмени забавлението onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) if ( APIKey.startsWith ("INSERT")) {Toast.makeText (това, "Вие не сте актуализирали вашия API ключ", Toast.LENGTH_SHORT) .show ()} else {imovURL.httpGet (listOf ("ключ" към APIKey)). responseJson {заявка, отговор, резултат -> result.fold ({val актив = it.obj () var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: Str ING? = нула вал активFormats = imovina.getJSONArray ("формати") за (i в 0 до активност на Formats.length ()) {val currentFormat = активFormats.getJSONObject (i) ако (currentFormat.getString ("formatType") == "OBJ" ) {objectURL = currentFormat.getJSONObject ("корен") .getString ("URL адрес") ) .getJSONObject (0) .getString ("url") почивка}} обектURL !!. httpDownload (). местоназначение {_, _ -> файл (filesDir, "globeAsset.obj")} .отговор {_, _, резултат -> result.fold ({}, {Toast.makeText (това, "Невъзможно изтегляне на ресурс", Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!. httpDownload (). местоназначение {_, _ -> Файл (filesDir, materialLibraryName)}. Response {_, _, result -> result.fold ({}, {Toast.makeText (това, "Невъзможно изтегляне на ресурс", Toast.LENGTH_SHORT) .show ()})}}, {Toast.makeText (това "Невъзможно изтегляне на ресурс", Toast.LENGTH_SHORT) .sh ow ()})} // Реализиране на бутон // displayButton.setOnClickListener {val intent = Намерение (това, SecondActivity :: class.java) startActivity (намерение); }}}

Изграждане на 3D платно

Сега, нека създадем Дейността, където ще показваме нашия актив в режим на цял екран:

  • Щракнете върху контролния бутон върху файла MainActivity.kt на вашия проект и изберете „New> Kotlin File / Class“.
  • Отворете падащото меню „Kind“ и изберете „Class“.
  • Дайте на този клас име „SecondActivity“ и натиснете „OK“.

За да нарисуваме 3D обект, се нуждаем от 3D платно! Ще използвам P3D визуализатора на библиотеката на Processing for Android, което означава разширяване на класа PApplet, отмяна на метода settings () и след това предаване на P3D като аргумент на метода fullScreen (). Също така трябва да създадем свойство, което представя актива Poly като PShape обект.

private fun displayAsset () {val canvas3D = обект: PApplet () {var polyAsset: PShape? = нула отмяна на забавните настройки () {fullScreen (PConstants.P3D)}

След това трябва да инициализираме обекта PShape, като отменим метода setup (), извикаме метод loadShape () и след това преминем абсолютния път на .obj файла:

замени забавната настройка () {polyAsset = loadShape (Файл (filesDir, "globeAsset.obj"). absolPath)}

Рисуване на платното на P3D

За да нарисуваме това 3D платно, трябва да отменим метода draw ():

замени забавно рисуване () {фон (0) форма (polyAsset)}}

По подразбиране много от активите, получени от Poly API, са от по-малката страна, така че ако стартирате този код сега, може дори да не видите актива, в зависимост от вашата конфигурация на екрана. Когато създавате 3D сцени, обикновено създавате персонализирана камера, така че потребителят да може да изследва сцената и да преглежда вашите 3D активи от пълните 360 градуса. Това обаче е извън обхвата на тази статия, така че ще променя ръчно размера и позицията на актива, за да се уверя, че той удобно се вписва на екрана.

Можете да увеличите размера на актива, като прехвърлите отрицателна стойност към метода scale ():

скала (-10f)

Можете да коригирате позицията на актива във виртуалното 3D пространство с помощта на метода translate () и следните координати:

  • Х. Позиционира актива по хоризонталната ос.
  • Y. Позиционира актива по вертикалната ос.
  • Z. Това е оста „дълбочина / височина“, която трансформира 2D обект в 3D обект. Положителните стойности създават впечатлението, че обектът се приближава към вас, а отрицателните създават впечатлението, че обектът се отдалечава от вас.

Обърнете внимание, че трансформациите са кумулативни, така че всичко, което се случва след функцията, натрупва ефекта.

Използвам следното:

превод (-50f, -100f, 10f)

Ето завършения код:

замени забавно draw () {background (0) scale (-10f) translate (-50f, -100f) // Начертайте актива, като извикате метода shape () // shape (polyAsset)}}

След това трябва да създадем съответния файл на оформлението, където ще добавим 3D платно като джаджа FrameLayout:

  • Кликнете върху папката „res> оформление“ на вашия проект.
  • Изберете „Ресурсен файл на оформлението.“
  • Дайте на този файл името „activity_second“ и след това щракнете върху „OK“.

Сега ние имаме нашия FrameLayout „resource_view“, трябва да уведомим за това SecondActivity! Обърнете се обратно към файла SecondActivity.kt, създайте нов екземпляр на PFragment и го насочете в посоката на нашата джаджа „активиране на активи“:

import android.os.Bundle import android.support.v7.app.AppCompatActivity импортиране kotlinx.android.synthetic.main.activity_second. * импортиране обработка.android.PFragment импортиране обработка.core.PApplet импортиране обработка.core.PConstants импортиране обработка.core .PShape импортиране java.io.File клас SecondActivity: AppCompatActivity () {отмяна на забавление onCreate (saveInstanceState: Bundle?) {Super.onCreate (saveInstanceState) setContentView (R.layout.activity_second) displayAsset ()} private private displayAsset () {val canvas3D = обект: PApplet () {var polyAsset: PShape? = null override fun settings () {fullScreen (PConstants.P3D)} настройка за забавление на настройките () {polyAsset = loadShape (File (filesDir, "globeAsset.obj". absolPath)} отмяна на забавно рисуване () {background (0) мащаб (-10f) преобразуване (-50f, -100f) форма (polyAsset)}} // Добавяне на следното // val assetView = PFragment (canvas3D) drugView.setView (актив_преглед, това)}}

Последната стъпка е добавянето на SecondActivity към вашия манифест:

// Добавете следното //

Тестване на вашия проект

Вече сме готови да тестваме готовия проект! Инсталирайте го на устройството си с Android или AVD и се уверете, че имате активна интернет връзка. След като приложението се стартира, то ще изтегли актива и след това можете да го видите, като натиснете бутона „Display Asset“.

Можете да изтеглите този пълен проект от GitHub.

Обобщавайки

В тази статия разгледахме как да използваме API API за извличане на 3D актив по време на изпълнение и как да го покажем чрез библиотеката Processing for Android. Мислите ли, че Poly API има потенциал да направи развитието на VR и AR достъпни за повече хора? Уведомете ни в коментарите по-долу!

Свързани

  • Google ще внесе AR приложения на „стотици милиони“ устройства с Android през 2018 г.
  • Google ще ви научи за AI и машинно обучение безплатно
  • 15 най-добри VR игри за Google Cardboard
  • 10 най-добри VR приложения за Google Cardboard
  • Какво е Google Fuchsia? Това новият Android ли е?
  • Какво е Google Duplex? - функции, дата на издаване и други
  • Как да създадете VR приложение за Android само за 7 минути
  • Мобилни VR слушалки - кои са най-добрите ви възможности?

Актуализация, 14 февруари 2019 г. (7:12 ч.): Мислехте ли, че ще трябва да изчакате известно време, за да видите Mi 9 в по-голямата си слава? Е, старши вицепрезидентът на Xiaomi Wang Xiang е публикувал...

От Пабло Фрейле, директор на Екосистемите за разработчици на игри, ArmВидеоигрите съществуват близо 40 години, но преминаването му към професионално спортно състезание се случи едва наскоро. Сега в св...

Пресни Публикации