पॉली एपीआई: अपने वीआर और एआर एंड्रॉइड ऐप के लिए 3 डी परिसंपत्तियों को पुनर्प्राप्त करना

लेखक: Peter Berry
निर्माण की तारीख: 14 अगस्त 2021
डेट अपडेट करें: 8 मई 2024
Anonim
पॉली एपीआई: अपने वीआर और एआर एंड्रॉइड ऐप के लिए 3 डी परिसंपत्तियों को पुनर्प्राप्त करना - क्षुधा
पॉली एपीआई: अपने वीआर और एआर एंड्रॉइड ऐप के लिए 3 डी परिसंपत्तियों को पुनर्प्राप्त करना - क्षुधा

विषय


क्या आपके पास एक आभासी वास्तविकता (वीआर) या संवर्धित वास्तविकता (एआर) मोबाइल ऐप के लिए एक महान विचार है, लेकिन कोई विचार नहीं है कि आपकी दृष्टि को कैसे जीवन में लाया जाए?

जब तक आप एक एंड्रॉइड डेवलपर नहीं होते हैं जो एक अनुभवी 3 डी कलाकार भी होता है, तो एक इमर्सिव, 360 डिग्री अनुभव देने के लिए आवश्यक सभी संपत्ति बनाना एक कठिन प्रक्रिया हो सकती है।

सिर्फ इसलिए कि आपके पास 3D मॉडल बनाने के लिए आवश्यक समय, संसाधन या अनुभव नहीं है, नहीं है आप एक महान वीआर या एआर मोबाइल एप्लिकेशन का निर्माण नहीं कर सकते हैं! वर्ल्ड वाइड वेब पर स्वतंत्र रूप से 3 डी संसाधनों की एक विशाल रेंज उपलब्ध है, साथ ही सभी एपीआई, फ्रेमवर्क और लाइब्रेरी जिन्हें आपको अपने एंड्रॉइड एप्लिकेशन में इन परिसंपत्तियों को डाउनलोड और प्रस्तुत करना होगा।

आगे पढ़िए: अब आप Daydream VR का उपयोग करके किसी भी वेबसाइट पर जा सकते हैं। वह भी एक।

इस लेख में, हम एक ऑनलाइन रिपॉजिटरी और एपीआई पॉली को देखने जा रहे हैं, जो आपकी उंगलियों पर हजारों 3D संपत्ति रखता है। इस लेख के अंत तक, आपने एक ऐप बनाया होगा जो रनटाइम के दौरान एक 3D पॉली एसेट प्राप्त करता है, और फिर एंड्रॉइड लाइब्रेरी के लिए लोकप्रिय प्रोसेसिंग का उपयोग करके इसे रेंडर करता है।


Poly के साथ 3D संपत्ति प्रदर्शित करना

यदि आपने कभी एकता के विकास में बाधा डाली है, तो Poly रिपॉजिटरी Unity Asset Store के समान है - सिवाय इसके कि Poly में सब कुछ मुफ्त है!

पॉली के 3 डी मॉडल में से कई क्रिएटिव कॉमन्स लाइसेंस के तहत प्रकाशित होते हैं, इसलिए जब तक आप निर्माता को उपयुक्त क्रेडिट नहीं देते हैं, तब तक आप इन परिसंपत्तियों का उपयोग, संशोधन और रीमिक्स करने के लिए स्वतंत्र हैं।

पॉली के सभी 3 डी मॉडल Google के VR और AR प्लेटफॉर्म के साथ संगत करने के लिए डिज़ाइन किए गए हैं, जैसे कि Daydream और ARCore, लेकिन आप उन्हें जहाँ चाहे उपयोग कर सकते हैं और फिर भी - संभवतः, आप उन्हें Apple के ARKit के साथ भी उपयोग कर सकते हैं!

जब पॉली एसेट्स को पुनः प्राप्त करने और प्रदर्शित करने की बात आती है, तो आपके पास दो विकल्प होते हैं। सबसे पहले, आप परिसंपत्तियों को अपने कंप्यूटर पर डाउनलोड कर सकते हैं और फिर उन्हें एंड्रॉइड स्टूडियो में आयात कर सकते हैं, इसलिए वे आपके आवेदन के साथ जहाज करते हैं और इसके एपीके आकार की ओर योगदान करते हैं, या आप पॉली एपीआई का उपयोग करके इन परिसंपत्तियों को रनटाइम पर पुनः प्राप्त कर सकते हैं।


क्रॉस-प्लेटफ़ॉर्म, आरईएसटी-आधारित पॉली एपीआई प्रोग्राम प्रदान करता है, केवल 3 डी मॉडल के विशाल संग्रह के लिए रीड-ओनली एक्सेस। यह आपके एपीके के साथ परिसंपत्तियों को बंडल करने की तुलना में अधिक जटिल है, लेकिन रनटाइम पर पॉली परिसंपत्तियों को प्राप्त करने के कई लाभ हैं, सबसे विशेष रूप से यह आपके एपीके के आकार को नियंत्रण में रखने में मदद करता है, जो प्रभावित कर सकता है कि कितने लोग आपके एप्लिकेशन को डाउनलोड करते हैं।

आप अपने उपयोगकर्ताओं को अधिक विकल्प देने के लिए पॉली एपीआई का उपयोग भी कर सकते हैं, उदाहरण के लिए यदि आप एक मोबाइल गेम विकसित कर रहे हैं तो आप अपने उपयोगकर्ताओं को कई प्रकार के चरित्र मॉडल से चुन सकते हैं।

चूंकि आप पॉली मॉडल को संशोधित करने के लिए स्वतंत्र हैं, इसलिए आप अपने उपयोगकर्ताओं को उनके चुने हुए चरित्र को ट्विस्ट करने दे सकते हैं, उदाहरण के लिए बालों या आंखों के रंग में बदलाव करके, या अन्य पॉली परिसंपत्तियों, जैसे कि विभिन्न हथियारों और कवच के साथ संयोजन करके। इस तरह, पॉली एपीआई आपको 3 डी परिसंपत्तियों की एक प्रभावशाली श्रेणी प्रदान करने में मदद कर सकता है, अनुभव को निजीकृत करने के लिए बहुत गुंजाइश है - और सभी तुलनात्मक रूप से छोटे काम के लिए। आपके उपयोगकर्ताओं को यह विश्वास हो जाएगा कि आपने इन 3 डी मॉडल का सावधानीपूर्वक उपयोग करते हुए, एक टन समय व्यतीत किया है!

3 डी मॉडलिंग प्रोजेक्ट बनाना

हम एक ऐसा एप्लिकेशन बनाने जा रहे हैं जो किसी विशेष पॉली एसेट को पुनः प्राप्त करता है जब एप्लिकेशन पहली बार लॉन्च होता है, और फिर उपयोगकर्ता के अनुरोध पर फुलस्क्रीन मोड में उस एसेट को प्रदर्शित करता है।

इस संपत्ति को पुनः प्राप्त करने में हमारी मदद करने के लिए, मैं फ्यूल का उपयोग करूंगा, जो कोटलिन और एंड्रॉइड के लिए एक HTTP नेटवर्किंग लाइब्रेरी है। अपनी पसंद की सेटिंग के साथ एक नया प्रोजेक्ट बनाकर शुरू करें, लेकिन जब "कोटलिन समर्थन शामिल करें" का विकल्प चुना जाए।

पॉली एपीआई में आपके द्वारा की जाने वाली सभी कॉलों में एक एपीआई कुंजी शामिल होनी चाहिए, जिसका उपयोग आपके ऐप की पहचान करने और उपयोग की सीमाओं को लागू करने के लिए किया जाता है। विकास और परीक्षण के दौरान, आप अक्सर अप्रतिबंधित API कुंजी का उपयोग करते हैं, लेकिन यदि आपके पास इस एप्लिकेशन को रिलीज़ करने की कोई योजना है, तो आपको Android-प्रतिबंधित API कुंजी का उपयोग करना होगा।

प्रतिबंधित कुंजी बनाने के लिए, आपको अपने प्रोजेक्ट के SHA-1 हस्ताक्षर प्रमाणपत्र को जानना होगा, इसलिए अब यह जानकारी प्राप्त करें:

  • एंड्रॉइड स्टूडियो के "ग्रैडल" टैब का चयन करें (जहां कर्सर निम्नलिखित स्क्रीनशॉट में स्थित है)। यह एक "ग्रेड प्रोजेक्ट" पैनल खोलता है।

  • "ग्रैडल प्रोजेक्ट्स" पैनल में, अपनी परियोजना की ’रूट का विस्तार करने के लिए डबल-क्लिक करें, और फिर" कार्य> एंड्रॉइड> साइनिंग रिपोर्ट "चुनें। यह एंड्रॉइड स्टूडियो विंडो के नीचे एक नया पैनल खोलता है।
  • The टॉगल कार्य निष्पादित / पाठ मोड ”बटन का चयन करें (जहां कर्सर निम्नलिखित स्क्रीनशॉट में तैनात है)।

"रन" पैनल अब आपके प्रोजेक्ट के बारे में बहुत सारी जानकारी प्रदर्शित करने के लिए अपडेट करेगा, जिसमें उसका SHA-1 फिंगरप्रिंट भी शामिल है।

Google क्लाउड प्लेटफ़ॉर्म खाता बनाएँ

आवश्यक API कुंजी प्राप्त करने के लिए, आपको Google क्लाउड प्लेटफ़ॉर्म (GPC) खाते की आवश्यकता होगी।

यदि आपके पास कोई खाता नहीं है, तो आप निशुल्क पेज के लिए ट्राई क्लाउड प्लेटफॉर्म पर जाकर और निर्देशों का पालन करके 12 महीने के निशुल्क परीक्षण के लिए साइन अप कर सकते हैं। ध्यान दें कि क्रेडिट कार्ड या डेबिट कार्ड की आवश्यकता होती है, लेकिन अक्सर पूछे जाने वाले प्रश्न पृष्ठ के अनुसार, यह केवल आपकी पहचान को सत्यापित करने के लिए उपयोग किया जाता है और "आपके निशुल्क परीक्षण के दौरान आपसे शुल्क नहीं लिया जाएगा या बिल नहीं लिया जाएगा।"

अपनी पाली एपीआई कुंजी प्राप्त करें

एक बार जब आप सभी साइन अप कर लेते हैं, तो आप Poly API को सक्षम कर सकते हैं और अपनी कुंजी बना सकते हैं:

  • GCP कंसोल पर प्रमुख।
  • ऊपरी-बाएँ कोने में पंक्तिबद्ध आइकन का चयन करें, और "API और सेवाएँ> डैशबोर्ड" चुनें।
  • "एपीआई और सेवाओं को सक्षम करें" चुनें।
  • बाएं हाथ के मेनू में, "अन्य" चुनें।
  • "Poly API" कार्ड चुनें।
  • "सक्षम करें" बटन पर क्लिक करें।
  • कुछ क्षणों के बाद, आपको एक नई स्क्रीन पर ले जाया जाएगा; साइड-मेनू खोलें और "API & Services> क्रेडेंशियल्स" चुनें।

  • बाद के पॉपअप में, "कुंजी को प्रतिबंधित करें" चुनें।
  • अपनी कुंजी को एक विशिष्ट नाम दें।
  • "एप्लिकेशन प्रतिबंध" के तहत, "Android ऐप्स" चुनें।
  • "पैकेज नाम और फ़िंगरप्रिंट जोड़ें" चुनें।
  • अपने प्रोजेक्ट के SHA-1 फ़िंगरप्रिंट को "हस्ताक्षर-प्रमाणपत्र फ़िंगरप्रिंट" फ़ील्ड में कॉपी / पेस्ट करें।
  • अपनी परियोजना का पैकेज नाम दर्ज करें (यह आपके मैनिफेस्ट में और हर वर्ग फ़ाइल के शीर्ष पर दिखाई देता है)।
  • "सहेजें" पर क्लिक करें।

अब आपको अपनी परियोजना की "क्रेडेंशियल्स" स्क्रीन पर ले जाया जाएगा, जिसमें आपकी सभी एपीआई कुंजियों की एक सूची है - जिसमें पॉली-सक्षम एपीआई कुंजी भी शामिल है जिसे आपने अभी बनाया था।

परियोजना निर्भरताएँ: ईंधन, पी 3 डी और कोटलिन एक्सटेंशन

पॉली एसेट्स को पुनः प्राप्त करने और प्रदर्शित करने के लिए, हमें कुछ अतिरिक्त पुस्तकालयों से मदद की आवश्यकता होगी:

  • ईंधन। पॉली में वर्तमान में एक आधिकारिक एंड्रॉइड टूलकिट नहीं है, इसलिए आपको इसके REST इंटरफ़ेस का उपयोग करके सीधे API के साथ काम करना होगा। इस प्रक्रिया को सरल बनाने के लिए, मैं फ्यूल एचटीटीपी नेटवर्किंग लाइब्रेरी का उपयोग करूंगा।
  • Android के लिए प्रसंस्करण। मैं पॉली एसेट प्रदर्शित करने के लिए इस लाइब्रेरी के P3D रेंडरर का उपयोग करूंगा।

अपनी परियोजना की बिल्ड.ग्रेड फ़ाइल खोलें, और प्रोजेक्ट निर्भरता के रूप में इन दो पुस्तकालयों को जोड़ें:

निर्भरताएँ {कार्यान्वयन फ़ाइलट्री (शामिल करें: dir: libs) कार्यान्वयन "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" कार्यान्वयन com.android.support.appcompat-v7:27.1.1 // ईंधन पुस्तकालय जोड़ें / / कार्यान्वयन com.github.kittinunf.fuel: ईंधन-एंड्रॉइड: 1.13.0 // एंड्रॉइड इंजन के लिए प्रसंस्करण जोड़ें // कार्यान्वयन org.p5android: प्रसंस्करण-कोर: 4.0.1}

हमारे कोड को और अधिक संक्षिप्त बनाने के लिए, मैं कोटलिन एंड्रॉइड एक्सटेंशन का भी उपयोग करूंगा, इसलिए बिल्ड -ग्रेड फ़ाइल खोलने के दौरान हम इस प्लगइन को जोड़ दें।

प्लगइन लागू करें: कोटलिन-एंड्रॉइड-एक्सटेंशन

अंत में, चूंकि हम इंटरनेट से संपत्ति को पुनः प्राप्त कर रहे हैं, हमारे ऐप को इंटरनेट की अनुमति की आवश्यकता है। अपना मेनिफेस्ट खोलें और निम्नलिखित जोड़ें:

अपनी एपीआई कुंजी जोड़ना

हर बार जब हमारा ऐप पॉली से परिसंपत्ति का अनुरोध करता है, तो उसे वैध एपीआई कुंजी को शामिल करना होगा। मैं प्लेसहोल्डर पाठ का उपयोग कर रहा हूं, लेकिन आप जरूर यदि एप्लिकेशन कभी भी काम करने जा रहा हो तो इस प्लेसहोल्डर को अपनी API कुंजी से बदल दें।

मैं एक चेक भी जोड़ रहा हूं, ताकि यदि आप "INSERT-YOUR-API-KEY" पाठ को बदलना भूल जाएं तो एप्लिकेशन एक चेतावनी प्रदर्शित करेगा:

import android.os.Bundle import android.support.v7.app.AppCompatActivity class MainActivity: AppCompatActivity () {साथी वस्तु {const val APIKey = "INSERT-YOUR-API-KEY"} ओवरराइड फन ऑनक्रीट (saveInstanceState: बंडल?) super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) // अगर API कुंजी "INSERT" से शुरू होती है ... // अगर (APIKey.startsWith ("INSERT") {// तो निम्नलिखित टोस्ट प्रदर्शित करें ... .// Toast.makeText (यह, "आपने अपनी API कुंजी अपडेट कर दी है", Toast.LENGTH_SHORT) .show ()} और {... ... ...

संपत्ति को पुनः प्राप्त करना

आप Google Poly साइट पर कोई भी संपत्ति चुन सकते हैं, लेकिन मैं इस ग्रह के मॉडल का उपयोग कर रहा हूं।

आप इसकी आईडी का उपयोग करके एक परिसंपत्ति प्राप्त करते हैं, जो URL स्लग (पिछले स्क्रीनशॉट में हाइलाइट किया गया) के अंत में दिखाई देता है। हम इस एसेट आईडी को पॉली एपीआई होस्ट के साथ जोड़ते हैं, जो कि "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 आयात com.github.kittinunf.fuel.httpGet आयात kotlinx.android.synthetic.main.activity_main आयात करता है। * आयात java.io.io.For क्लास MainActivity: AppCompatActivity () {साथी वस्तु {const val APIKey = "INSERT =" INSERT = "। -KEY "वैल एसेटअर्ल =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} ओवररिएड पर मज़ा को ओवरराइड करें (saveInstanceState: बंडल?) एक सुपर .onCreate (saveInstanceState) setContentView (R.layout.activity) APIKey.startsWith ("INSERT") {Toast.makeText (यह, "आपने अपनी API कुंजी अपडेट की है", Toast.LENGTH_SHORT) .show ()} और {

अगला, हमें httpGet () पद्धति का उपयोग करते हुए एसेट URL पर GET अनुरोध करना होगा। मैं यह भी निर्दिष्ट कर रहा हूं कि प्रतिक्रिया प्रकार 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 आयात com.github.kittinunf.fuel.httpGet आयात kotlinx.android.synthetic.main.activity_main आयात करता है। * आयात java.io.io.For क्लास MainActivity: AppCompatActivity () {साथी वस्तु {const val APIKey = "INSERT =" INSERT = "। -KEY "वैल एसेटअर्ल =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} ओवररिएड पर मज़ा को ओवरराइड करें (saveInstanceState: बंडल?) एक सुपर .onCreate (saveInstanceState) setContentView (R.layout.activity) APIKey.startsWith ("INSERT") {Toast.makeText (यह, "आपने अपनी API कुंजी अपडेट कर दी है", Toast.LENGTH_SHORT) .show ()} और {} सर्वर कॉल करें, और फिर डेटा का उपयोग करके डेटा पास करें। "ListOf" विधि // परिसंपत्तिLL.httpGet (listOf ("APIKey के लिए कुंजी")। responseJson {अनुरोध, प्रतिक्रिया, परिणाम -> // प्रतिक्रिया के साथ कुछ करें // result.fold ({val) सेट = it.obj ()

संपत्ति के कई प्रारूप हो सकते हैं, जैसे ओबीजे, जीएलटीएफ, और एफबीएक्स। हमें यह निर्धारित करने की आवश्यकता है कि परिसंपत्ति ओबीजे प्रारूप में है।

इस चरण में, मुझे उन सभी फ़ाइलों के नाम और URL को पुनः प्राप्त करना होगा जिन्हें हमें डाउनलोड करने की आवश्यकता है
संपत्ति की प्राथमिक फ़ाइल ("रूट"), साथ ही किसी भी संबंधित सामग्री और बनावट की फाइलें ("संसाधन")।

यदि हमारा आवेदन संपत्ति को सही ढंग से प्राप्त करने में असमर्थ है, तो यह उपयोगकर्ता को सूचित करने वाला एक टोस्ट प्रदर्शित करेगा।

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 आयात com.github.kittinunf.fuel.httpGet आयात kotlinx.android.synthetic.main.activity_main आयात करता है। * आयात java.io.io.For क्लास MainActivity: AppCompatActivity () {साथी वस्तु {const val APIKey = "INSERT =" INSERT = "। -KEY "वैल एसेटअर्ल =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} ओवररिएड पर मज़ा को ओवरराइड करें (saveInstanceState: बंडल?) एक सुपर .onCreate (saveInstanceState) setContentView (R.layout.activity) APIKey.startsWith ("INSERT") {Toast.makeText (यह, "आपने अपनी API कुंजी अपडेट कर दी है", Toast.LENGTH_SHORT) .show ()} {} {/> एसेट URL // परिसंपत्तिL से GET अनुरोध करें। httpGet (listOf ("key" to APIKey))। responseJson {अनुरोध, प्रतिक्रिया, परिणाम -> // प्रतिक्रिया के साथ कुछ करें // result.fold ({वैल एसेट = it.obj) (var objectURL): स्ट्रिंग? = null var materialLibraryName: स्ट्रिंग? = शून्य var materialLibraryURL: स्ट्रिंग? = null // "फॉरमेट" ऐरे // वैल एसेटफार्म का उपयोग करके एसेट के फॉर्मेट को चेक करें। Val currentFormat = wealthFormats.getJSONObject (i) // इस संसाधन के प्रारूप प्रकार की पहचान करने के लिए formatType का उपयोग करें। यदि प्रारूप OBJ है। .// यदि (currentFormat.getString ("formatType") == "OBJ") {//.then इस संसाधन की 'रूट' फ़ाइल, अर्थात् OBJ फ़ाइल / objectURL = currentFormat को पुनः प्राप्त करते हैं। getJSONObject ("root") .getString ("url") // सभी रूट फ़ाइल की निर्भरताएँ प्राप्त करें // materialLibraryName = currentFormat.getJSONArray ("रिसोर्स") .getJSONObject (0) .getString ("रिश्तेदारपत्थर") MaterialLibraryURLL = वर्टफ़ॉर्म करें। ("रिसोर्स") .getJSONObject (0) .getString ("url") ब्रेक}} ऑब्जेक्टURL !! httpDownload ()। डेस्टिनेशन {_, _ -> फाइल (filesDir, "ग्लोबएरससेट .obj")} .response {_। , _, परिणाम -> result.fold ({}, {// यदि आप OBJ फ़ाइल को ढूँढ या डाउनलोड नहीं कर सकते, तो एक त्रुटि प्रदर्शित करें // Toast.makeText (यह, "संसाधन डाउनलोड करने में असमर्थ है", Toast.LENGTH_MORTORT ) .show ()})} materialLibraryURL !!। httpDownload ()। डेस्टिनेशन {_, _ -> फाइल (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast)। makeText (यह, "संसाधन डाउनलोड करने में असमर्थ", Toast.LENGTH_SHORT) .show ()})}, {{ Toast.makeText (यह, "संसाधन डाउनलोड करने में असमर्थ", Toast.LENGTH_SHORT) .show ()})}}}

इस बिंदु पर, यदि आप अपने एंड्रॉइड स्मार्टफोन या टैबलेट, या एंड्रॉइड वर्चुअल डिवाइस (AVD) पर प्रोजेक्ट स्थापित करते हैं, तो संपत्ति सफलतापूर्वक डाउनलोड हो जाएगी, लेकिन ऐप वास्तव में इसे प्रदर्शित नहीं करेगा। अब इसे ठीक करने दो!

दूसरी स्क्रीन बनाना: नेविगेशन जोड़ना

हम एसेट को फ़ुलस्क्रीन मोड में प्रदर्शित करने जा रहे हैं, इसलिए एक बटन को शामिल करने के लिए हमारी main_activity.xml फ़ाइल को अपडेट करें, जिसे टैप करने पर फ़ुलस्क्रीन एक्टिविटी लॉन्च होगी।

अब MainActivity.kt फ़ाइल के अंत में onClickListener जोड़ें।

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 आयात com.github.kittinunf.fuel.httpGet आयात kotlinx.android.synthetic.main.activity_main आयात करता है। * आयात java.io.io.For क्लास MainActivity: AppCompatActivity () {साथी वस्तु {const val APIKey = "INSERT =" INSERT = "। -KEY "वैल एसेटअर्ल =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} ओवररिएड पर मज़ा को ओवरराइड करें (saveInstanceState: बंडल?) एक सुपर .onCreate (saveInstanceState) setContentView (R.layout.activity) APIKey.startsWith ("INSERT") {Toast.makeText (यह, "आपने अपनी API कुंजी को अपडेट किया है", Toast.LENGTH_SHORT) .show ()} और {{propertyURL .httpGet (listOf ("कुंजी to APIKey))। responseJson {रिक्वेस्ट, रिस्पॉन्स, रिजल्ट -> result.fold ({वैल एसेट = it.obj () var objectURL: स्ट्रिंग। = null var materialLibraryName: String? = null var materialLibraryURL: Str? आईएनजी? = null वैल एसेटफार्मेट्स = एसेट.गेटजॉनएयर ("फॉरमेट") (i in 0 के लिए) जब तक एसेटफॉर्मेट्स.लगाव ()) {वैल करंटफॉर्मेट = एसेटफॉर्मेट्स.गेटजोनऑब्जेक्ट (i) अगर (currentFormat.getString ("formatType") == "OBJ" ) {objectURL = currentFormat.getJSONObject ("root") .getString ("url") materialLibraryName = currentFormat.getJSONArray ("संसाधन") .getSSONObject (0) .getString ("रिश्तेदारपार्ट") materialLibraryURL = currentFormat ) .getJSONObject (0) .getString ("url") ब्रेक}} ऑब्जेक्टUR !!। httpDownload ()। डेस्टिनेशन {_, _ -> फाइल (filesDir, "ग्लोबएरेसेटसेट.ओबज")}} .response {_, _, परिणाम। -> result.fold ({}, {Toast.makeText (यह, "संसाधन डाउनलोड करने में असमर्थ", Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!। httpDownload (); गंतव्य {_, _ -> फ़ाइल (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast.makeText (यह, "संसाधन डाउनलोड करने में असमर्थ", Toast.LENGTH_MORT) .show ())})}}। {Toast.makeText (यह, "संसाधन डाउनलोड करने में असमर्थ", Toast.LENGTH_SHORT_sh ow ()})} // एक बटन को लागू करें // displayButton.setOnClickListener {वैल आशय = इरादे (यह, दूसरीता :: class.java) startActivity (इरादा); }}}

एक 3 डी कैनवास का निर्माण

अब, वह गतिविधि बनाएँ जहाँ हम अपनी संपत्ति को फ़ुलस्क्रीन मोड में प्रदर्शित करेंगे:

  • अपनी परियोजना के MainActivity.kt फ़ाइल को नियंत्रित करें और "नया> कोटलिन फ़ाइल / क्लास" चुनें।
  • "तरह" ड्रॉपडाउन खोलें, और "क्लास" चुनें।
  • इस कक्षा को "सेकंडअक्टिविटी" नाम दें और फिर "ओके" पर क्लिक करें।

3D ऑब्जेक्ट को खींचने के लिए, हमें एक 3D कैनवास की आवश्यकता है! मैं एंड्रॉइड की लाइब्रेरी के P3D रेंडरर के लिए प्रोसेसिंग का उपयोग करने जा रहा हूं, जिसका मतलब है कि सेटिंग और () विधि से आगे बढ़कर पीएपीएसडी को फुलस्क्रीन () विधि के तर्क के रूप में पारित करना। हमें एक संपत्ति बनाने की भी ज़रूरत है जो पॉली संपत्ति का प्रतिनिधित्व एक पीएसएपीई वस्तु के रूप में करती है।

निजी मज़ेदार डिस्प्लेएसेट्स () {वैल कैनवस 3 डी = ऑब्जेक्ट: पीएप्लेट () {var पॉलीएसेटसेट: PShape? = null ओवरराइड मजेदार सेटिंग्स () {फुलस्क्रीन (PConstants.P3D)}

इसके बाद, हमें सेटअप () विधि को ओवरराइड करके, लोडशैप () विधि को कॉल करके, और फिर .obj फ़ाइल के पूर्ण पथ को पास करके, PShape ऑब्जेक्ट को इनिशियलाइज़ करना होगा।

ओवरराइड फन सेटअप () {पॉलीएसेट = लोडशैप (फाइल (फाइलडायर, "ग्लोबएसेटसेट.जे.जे।)। निरपेक्षपत्)}।

P3D के कैनवास पर आरेखण

इस 3D कैनवास को खींचने के लिए, हमें ड्रा () विधि को ओवरराइड करना होगा:

ओवरराइड फन ड्रा () {बैकग्राउंड (0) शेप (पॉलीएसेट)}}

डिफ़ॉल्ट रूप से, पॉली एपीआई से प्राप्त की गई कई संपत्तियां छोटी तरफ होती हैं, इसलिए यदि आप अभी इस कोड को चलाते हैं, तो हो सकता है कि आपको अपने स्क्रीन कॉन्फ़िगरेशन के आधार पर भी संपत्ति दिखाई न दे। 3D दृश्यों का निर्माण करते समय, आप आमतौर पर एक कस्टम कैमरा बनाते हैं ताकि उपयोगकर्ता दृश्य का पता लगा सके और आपकी 3D संपत्ति को पूर्ण 360 डिग्री से देख सके। हालाँकि, यह इस लेख के दायरे से परे है, इसलिए मैं संपत्ति के आकार और स्थिति को मैन्युअल रूप से बदलूंगा, ताकि यह सुनिश्चित हो सके कि यह आराम से स्क्रीन पर फिट हो।

पैमाने () विधि के लिए एक नकारात्मक मान पारित करके, आप संपत्ति का आकार बढ़ा सकते हैं:

पैमाने (-10f)

आप ट्रांसलेट () विधि और निम्न निर्देशांकों का उपयोग करके वर्चुअल 3D स्पेस में एसेट की स्थिति को समायोजित कर सकते हैं:

  • एक्स। क्षैतिज अक्ष के साथ परिसंपत्तियों को इंगित करता है।
  • वाई ऊर्ध्वाधर अक्ष के साथ परिसंपत्तियों को इंगित करता है।
  • जेड यह "गहराई / ऊंचाई" धुरी है, जो 2 डी ऑब्जेक्ट को 3 डी ऑब्जेक्ट में बदल देती है। सकारात्मक मूल्य यह धारणा बनाते हैं कि वस्तु आपकी ओर आ रही है, और नकारात्मक मूल्य यह धारणा बनाते हैं कि वस्तु आपसे दूर जा रही है।

ध्यान दें कि रूपांतरण संचयी हैं, इसलिए फ़ंक्शन के बाद होने वाली हर चीज प्रभाव को जमा करती है।

मैं निम्नलिखित का उपयोग कर रहा हूं:

अनुवाद (-50 एफ, -100 एफ, 10 एफ)

यहाँ पूरा कोड है:

ओवरराइड फन ड्रा () {बैकग्राउंड (0) स्केल (-10 एफ) ट्रांसलेशन (-50 एफ, -100 एफ) // शेप () विधि // शेप (पॉलीसेटसेट)} पर कॉल करके एसेट ड्रा करें

इसके बाद, हमें संबंधित लेआउट फ़ाइल बनाने की आवश्यकता है, जहां हम 3D कैनवास को फ्रेमलेआउट विजेट के रूप में जोड़ेंगे:

  • अपनी परियोजना के "रेस> लेआउट" फ़ोल्डर को नियंत्रित करें।
  • "लेआउट संसाधन फ़ाइल" चुनें।
  • इस फ़ाइल को "activity_second" नाम दें, और फिर "ओके" पर क्लिक करें।

अब हमारे पास अपना "एसेट_व्यू" फ्रेमलैटआउट है, हमें इसके बारे में अपनी सेकंडएक्टिविटी बताने की जरूरत है! SecondActivity.kt फ़ाइल पर वापस जाएं, एक नया PFragment इंस्टेंस बनाएं, और इसे हमारे "एसेट_व्यू" विजेट की दिशा में इंगित करें:

आयात android.os.Bundle आयात android.support.v7.app.AppCompatActivity आयात kotlinx.android.synthetic.main.activity_second आयात करता है। * आयात प्रसंस्करण। .PShape आयात java.io। फ़ाइल क्लास सेकंडएक्टिविटी: AppCompatActivity () {ओवरराइड फ़न ऑनक्रिएट (saveInstanceState: बंडल?) {Super.onCreate (saveInstanceateate) setContentView (R.layout.activity_second) डिस्प्लेएसेट ()} का निजी प्रदर्शन ()? कैनवस 3 डी = ऑब्जेक्ट: पीएप्लेट () {var पॉलीएसेटसेट: PShape? = null ओवरराइड फन सेटिंग्स () {फुलस्क्रीन (PConstants.P3D)} ओवरराइड फन सेटअप () {पॉलीअर्ससेट = लोडशैप (फाइल (फाइल, "ग्लोबएसेटसेट.बोज")। (-10 एफ) अनुवाद (-50 एफ, -100 एफ) आकार (पॉलीएसेट)}} // // निम्नलिखित जोड़ें / वैल एसेटव्यू = पीएफआरगमेंट (कैनवास 3 डी) एसेट व्यू.सेट व्यू (एसेट_व्यू, यह)}}

अंतिम चरण, आपके मैनिफेस्ट में SecondActivity जोड़ रहा है:

// निम्नलिखित जोड़ें //

अपने प्रोजेक्ट का परीक्षण

अब हम तैयार परियोजना का परीक्षण करने के लिए तैयार हैं! इसे अपने Android डिवाइस या AVD पर स्थापित करें, और सुनिश्चित करें कि आपके पास एक सक्रिय इंटरनेट कनेक्शन है। जैसे ही ऐप लॉन्च होता है, वह एसेट डाउनलोड नहीं करेगा, और फिर आप "डिस्प्ले एसेट" बटन को टैप करके देख सकते हैं।

आप इस पूरी परियोजना को GitHub से डाउनलोड कर सकते हैं।

समेट रहा हु

इस लेख में, हमने देखा कि रनटाइम पर एक 3D संपत्ति को पुनः प्राप्त करने के लिए पॉली एपीआई का उपयोग कैसे किया जाता है, और एंड्रॉइड लाइब्रेरी के लिए प्रसंस्करण का उपयोग करके उस संपत्ति को कैसे प्रदर्शित किया जाए। क्या आपको लगता है कि पॉली एपीआई में अधिक लोगों के लिए वीआर और एआर विकास को सुलभ बनाने की क्षमता है? नीचे टिप्पणी करके हमें बताएं!

सम्बंधित

  • Google 2018 में एंड्रॉइड डिवाइसों के "सैकड़ों लाखों" में एआर ऐप लाएगा
  • Google आपको AI और मशीन सीखने के बारे में मुफ्त में सिखाएगा
  • Google कार्डबोर्ड के लिए 15 सर्वश्रेष्ठ वीआर गेम
  • Google कार्डबोर्ड के लिए 10 सर्वश्रेष्ठ वीआर ऐप्स
  • Google Fuchsia क्या है? क्या यह नया एंड्रॉइड है?
  • Google डुप्लेक्स क्या है? - सुविधाएँ, रिलीज की तारीख, और अधिक
  • सिर्फ 7 मिनट में Android के लिए VR ऐप कैसे बनाएं
  • मोबाइल वीआर हेडसेट - आपके सबसे अच्छे विकल्प क्या हैं?

यदि आप अनुबंधों पर फोन खरीदने के विचार की तरह नहीं हैं, तो अनलॉक किए गए एंड्रॉइड फोन आपके लिए हैं। वे विभिन्न खुदरा विक्रेताओं से उपलब्ध हैं और उन्हें पसंद के वाहक के साथ इस्तेमाल किया जा सकता है। अनल...

डेटा इन दिनों एक कीमती वस्तु है। मोबाइल वेब सेवाओं का उपयोग करने की लागत अधिक हो सकती है। यहां तक ​​कि अगर आपके पास कई विकल्प उपलब्ध हैं, तो आपको उपलब्ध असीमित डेटा योजनाओं में सर्वश्रेष्ठ चुनने के बा...

लोकप्रिय