Google ARCore के साथ एक संवर्धित वास्तविकता Android ऐप बनाएं

लेखक: Laura McKinney
निर्माण की तारीख: 7 अप्रैल 2021
डेट अपडेट करें: 1 जुलाई 2024
Anonim
Create Augmented Reality App in Android Studio | Android App Development Tutorial
वीडियो: Create Augmented Reality App in Android Studio | Android App Development Tutorial

विषय


3 डी मॉडल आयात करना, दृश्य प्लगइन के साथ

आमतौर पर, 3D मॉडल के साथ काम करने के लिए विशेषज्ञ ज्ञान की आवश्यकता होती है, लेकिन Sceneform plugin की रिलीज़ के साथ Google ने जावा और - पर 3D मॉडल प्रस्तुत करना संभव बना दिया है के बिना OpenGL सीखना।

सीनफॉर्म प्लगइन एक उच्च-स्तरीय एपीआई प्रदान करता है जिसका उपयोग आप मानक एंड्रॉइड विजेट्स, आकृतियों या सामग्रियों से या 3 डी संपत्ति, जैसे .OBJ या .FBX फ़ाइलों से रेंडरडबल बनाने के लिए कर सकते हैं।

हमारी परियोजना में, हम एंड्रॉइड स्टूडियो में .OBJ फ़ाइल को आयात करने के लिए दृश्य प्लगइन का उपयोग कर रहे हैं। जब भी आप किसी फ़ाइल को Sceneform का उपयोग करके आयात करते हैं, तो यह प्लगइन स्वचालित रूप से होगा:

  • एसेट फ़ाइल को .sfb फ़ाइल में बदलें। यह एक रनटाइम-अनुकूलित दृश्य-बाइनरी प्रारूप (.sfb) है जो आपके एपीके में जोड़ा जाता है और फिर रनटाइम पर लोड किया जाता है। हम एक Renderable बनाने के लिए इस .sfb फ़ाइल का उपयोग कर रहे हैं, जिसमें मेष, सामग्री और बनावट शामिल हैं, और संवर्धित दृश्य के भीतर कहीं भी रखा जा सकता है।
  • .Sfa फ़ाइल जनरेट करें। यह एक संपत्ति विवरण फ़ाइल है, जो कि .sfb फ़ाइल के मानव-पठनीय विवरण वाली एक पाठ फ़ाइल है। मॉडल के आधार पर, आप .sfa फ़ाइल के अंदर पाठ को संपादित करके इसकी उपस्थिति को बदलने में सक्षम हो सकते हैं।


बस इस बात का ध्यान रखें कि लेखन के समय, दृश्य प्लगइन अभी भी बीटा में था, इसलिए आप इस प्लगइन का उपयोग करते समय बग, त्रुटियों या अन्य अजीब व्यवहार का सामना कर सकते हैं।

दृश्य प्लगइन स्थापित करना

Sceneform प्लगइन को Android स्टूडियो 3.1 या उच्चतर की आवश्यकता है। यदि आप एंड्रॉइड स्टूडियो के किस संस्करण का उपयोग कर रहे हैं, तो यह अनिश्चित है कि टूलबार से "एंड्रॉइड स्टूडियो> एंड्रॉइड स्टूडियो के बारे में" चुनें। बाद के पॉपअप में आपके एंड्रॉइड स्टूडियो इंस्टॉलेशन के बारे में कुछ बुनियादी जानकारी है, जिसमें इसका वर्जन नंबर भी शामिल है।

दृश्य प्लगइन स्थापित करने के लिए:

  • यदि आप मैक पर हैं, तो एंड्रॉइड स्टूडियो टूलबार से "एंड्रॉइड स्टूडियो> प्राथमिकताएं" चुनें, फिर बाएं हाथ के मेनू से "प्लगइन्स" चुनें। यदि आप विंडोज पीसी पर हैं, तो "फाइल> सेटिंग्स> प्लगइन्स> ब्राउज़ रिपॉजिटरी चुनें।"
  • "दृश्य सुधार" के लिए खोजें "Google दृश्य उपकरण" प्रकट होने पर, "इंस्टॉल करें" चुनें।
  • संकेत दिए जाने पर Android स्टूडियो को पुनरारंभ करें, और आपका प्लगइन उपयोग करने के लिए तैयार होगा।


दृश्य UX और Java 8: अपनी परियोजना निर्भरता का अद्यतन करना

इस परियोजना में हम उन सभी निर्भरता को जोड़ते हैं जो हम उपयोग कर रहे हैं। अपनी मॉड्यूल-स्तरीय बिल्ड.ग्रेड फ़ाइल खोलें, और दृश्य UX लाइब्रेरी जोड़ें, जिसमें वह ArFragment है जो हम अपने लेआउट में उपयोग कर रहे हैं:

निर्भरताएँ {कार्यान्वयन fileTree (dir: libs, में शामिल हैं:) कार्यान्वयन androidx.appcompat: appcompat: 1.0.2 कार्यान्वयन androidx.constraintlayout: constraintlayout: 1.1.3 परीक्षण कार्यान्वयन junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.3 androidTestImplementation androidx.test.espresso: एस्प्रेसो-कोर: 3.1.1 // सीनफेफॉर्म UX UX संसाधन प्रदान करता है, जिसमें ArFragment // कार्यान्वयन "com.google.ar.sceneform.ux: sceneform-ux: 1.7.0" कार्यान्वयन "कॉम शामिल है। android.support:appcompat-v7:28.0.0 "}

दृश्य 8 जावा से भाषा निर्माण का उपयोग करता है, इसलिए हमें जावा के लिए हमारी परियोजना के स्रोत संगतता और लक्ष्य संगतता को भी अपडेट करना होगा:

संकलनों {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}

अंत में, हमें दृश्य प्लगइन लागू करने की आवश्यकता है:

प्लगइन लागू करें: com.google.ar.sceneform.plugin

आपकी पूर्ण निर्मित बिल्ड.ग्रेड फ़ाइल कुछ इस तरह दिखनी चाहिए:

प्लगइन लागू करें: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.arcoredemo" minSdkVersion 23 targetSkVersion 28 वर्जनकोड 1 वर्जननाम "1.0" testInstrumentationRunner.nic.in/.test.nic.in पर डाउनलोड करें। JavaVersion.VERSION_1_8} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile (proguard-android-ऑप्टिमाइज़टैक्स), proguard-rules.pro}}} निर्भरताएँ {कार्यान्वयन फ़ाइलट्री (dir: libs, शामिल हैं): कार्यान्वयन androidx.appcompat 1.0। .2 कार्यान्वयन androidx.constraintlayout: constraintlayout: 1.1.3 testImplementation junit: junit: 4.12 AndroidTestImplementation androidx.test.ext: junit: 1.1.0.0TestImplementation androidx.test.espresso: एस्प्रेसो-कोर: 3.1.1 कार्यान्वयन "कॉमकोक" है। ar.sceneform.ux: sceneform-ux: 1.7.0 "कार्यान्वयन" com.android.support :appcompat-v7:28.0.0 "} प्लगइन लागू करें: com.google.ar .sceneform.plugin

ArFragment के साथ अनुमतियों का अनुरोध करना

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

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

ARFragment घटक स्वचालित रूप से जाँचता है कि क्या आपके ऐप में कैमरा अनुमति है और फिर AR सत्र बनाने से पहले, यदि आवश्यक हो, तो अनुरोध करता है। चूंकि हम अपने ऐप में ArFragment का उपयोग कर रहे हैं, इसलिए हमें कैमरा अनुमति के लिए कोई भी कोड लिखने की आवश्यकता नहीं है।

एआर आवश्यक या वैकल्पिक?

एआर कार्यक्षमता का उपयोग करने वाले दो प्रकार के अनुप्रयोग हैं:

1. एआर आवश्यक

यदि आपका एप्लिकेशन एक अच्छा उपयोगकर्ता अनुभव प्रदान करने के लिए Google ARCore पर निर्भर करता है, तो आपको यह सुनिश्चित करने की आवश्यकता है कि ARCore का समर्थन करने वाले उपकरणों पर केवल इसे डाउनलोड किया जाए। यदि आप अपने ऐप को "AR आवश्यक" के रूप में चिह्नित करते हैं, तो यह केवल Google Play स्टोर में दिखाई देगा, यदि डिवाइस ARCore का समर्थन करता है।

हमारे आवेदन के बाद से कर देता है ARCore की आवश्यकता है, मेनिफेस्ट खोलें और निम्नलिखित जोड़ें:

इस बात की भी संभावना है कि आपका एप्लिकेशन किसी उपकरण में डाउनलोड हो सकता है जो सिद्धांत में ARCore का समर्थन करता है, लेकिन वास्तव में ARCore स्थापित नहीं है। एक बार जब हम अपने ऐप को "AR आवश्यक" के रूप में चिह्नित करते हैं, तो Google Play स्वचालित रूप से आपके ऐप के साथ ARCore को डाउनलोड और इंस्टॉल करेगा, अगर यह लक्ष्य डिवाइस पर पहले से मौजूद नहीं है।

बस इस बात से अवगत रहें कि भले ही आपका ऐप एंड्रॉइड है: आवश्यक = "सही" है फिर भी यह जाँचने की आवश्यकता है कि ARCore रनटाइम पर मौजूद है, क्योंकि एक मौका है कि उपयोगकर्ता ने आपके ऐप को डाउनलोड करने के बाद से ARCore की स्थापना रद्द कर दी है, या यह कि ARCore का उनका संस्करण पुराना हो चुका है।

अच्छी खबर यह है कि हम ArFragment का उपयोग कर रहे हैं, जो स्वचालित रूप से जाँचता है कि ARCore स्थापित होने से पहले और अद्यतित है से प्रत्येक एआर सत्र - तो एक बार फिर, यह कुछ ऐसा है जिसे हमें मैन्युअल रूप से लागू नहीं करना है।

2. एआर वैकल्पिक

यदि आपके ऐप में AR सुविधाएँ शामिल हैं जो अच्छी हैं, लेकिन इसकी मुख्य कार्यक्षमता प्रदान करने के लिए आवश्यक नहीं हैं, तो आप इस एप्लिकेशन को "AR वैकल्पिक" के रूप में चिह्नित कर सकते हैं। आपका ऐप तब जांच सकता है कि Google ARCore रनटाइम पर मौजूद है या नहीं, और इसे अक्षम करें AR उपकरणों पर AR सुविधाएँ जो ARCore का समर्थन नहीं करती हैं।

यदि आप "AR वैकल्पिक" ऐप बनाते हैं, तो ARCore करेगा नहीं अपने आवेदन के साथ स्वचालित रूप से स्थापित किया जा सकता है, भले ही डिवाइस में एआरकोर का समर्थन करने के लिए आवश्यक सभी हार्डवेयर और सॉफ़्टवेयर हों। आपके "AR ऑप्शनल" ऐप को फिर से जाँचना होगा कि ARCore मौजूद है या अप-टू-डेट है, और आवश्यकता होने पर नवीनतम संस्करण डाउनलोड करें।

यदि ARCore आपके एप्लिकेशन के लिए महत्वपूर्ण नहीं है, तो आप अपने घोषणापत्र में निम्न जोड़ सकते हैं:

जबकि मेरे पास मेनिफेस्ट खुला है, मैं एंड्रॉइड: कॉन्फिगरेशंस और एंड्रॉइड: स्क्रीनऑरिएशन भी जोड़ रहा हूं, यह सुनिश्चित करने के लिए कि मेनएक्टिविटी हैंडल ओरिएंटेशन परिवर्तनों को इनायत से संभालता है।

अपने मेनिफेस्ट में यह सब जोड़ने के बाद, पूरी की गई फ़ाइल कुछ इस तरह दिखनी चाहिए:

अपने लेआउट में ArFragment जोड़ें

मैं ARCore के ArFragment का उपयोग कर रहा हूं, क्योंकि यह प्रत्येक AR सत्र की शुरुआत में स्वचालित रूप से कई प्रमुख ARCore कार्यों को संभालता है। सबसे विशेष रूप से, ArFragment जाँचता है कि ARCore का एक संगत संस्करण डिवाइस पर स्थापित है, और इस ऐप में वर्तमान में कैमरा अनुमति है।

एक बार जब ArFragment ने सत्यापित किया है कि डिवाइस आपके ऐप की AR सुविधाओं का समर्थन कर सकता है, तो यह ArSceneView ARCore सत्र बनाता है, और आपके ऐप का AR अनुभव जाने के लिए तैयार है!

आप एक नियमित रूप से Android Fragment की तरह, एक लेआउट फ़ाइल में ArFragment टुकड़ा जोड़ सकते हैं, इसलिए अपनी गतिविधि_main.xml फ़ाइल खोलें और एक "com.google.ar.sceneform.ux.ArFragment" घटक जोड़ें।

Google के Poly का उपयोग करके 3D मॉडल डाउनलोड करना

कई अलग-अलग तरीके हैं जिनसे आप Renderables बना सकते हैं, लेकिन इस लेख में हम 3D संपत्ति फ़ाइल का उपयोग करेंगे।

Sceneform, .OBJ, .glTF और .FBX स्वरूपों में 3D संपत्तियों का समर्थन करता है, एनिमेशन के साथ या बिना। ऐसे बहुत से स्थान हैं जहाँ आप इनमें से किसी एक समर्थित प्रारूप में 3D मॉडल प्राप्त कर सकते हैं, लेकिन इस ट्यूटोरियल में मैं एक .OBJ फ़ाइल का उपयोग कर रहा हूँ, जो Google के पॉली भंडार से डाउनलोड की जाती है।

पाली वेबसाइट पर जाएं और उस संपत्ति को डाउनलोड करें, जिसे आप .OBJ प्रारूप में उपयोग करना चाहते हैं (मैं इस टी-री-मॉडल का उपयोग कर रहा हूं)।

  • फ़ोल्डर को अनज़िप करें, जिसमें आपके मॉडल की स्रोत संपत्ति फ़ाइल (.OBJ, .FBX, या .glTF) होनी चाहिए। मॉडल के आधार पर, इस फ़ोल्डर में कुछ मॉडल निर्भरताएं भी हो सकती हैं, जैसे कि .mtl, .bin, .png, या .jpeg प्रारूपों में फाइलें।

Android स्टूडियो में 3D मॉडल आयात करना

एक बार जब आपकी संपत्ति हो जाती है, तो आपको Sceneform प्लगइन का उपयोग करके इसे Android Studio में आयात करना होगा। यह एक बहु-चरण प्रक्रिया है जिसकी आपको आवश्यकता है:

  • एक "नमूना" फ़ोल्डर बनाएँ। समोडेटा डिज़ाइन टाइम सैंपल डेटा के लिए एक नया फ़ोल्डर प्रकार है जो आपके एपीके में शामिल नहीं किया जाएगा, लेकिन एंड्रॉइड स्टूडियो एडिटर में उपलब्ध होगा।
  • मूल .OBJ संपत्ति फ़ाइल को अपने "नमूना" फ़ोल्डर में खींचें और छोड़ें।
  • .OBJ फ़ाइल पर दृश्य आयात और रूपांतरण करें, जो .sfa और .sfb फ़ाइलों को जनरेट करेगा।

हालांकि यह अधिक सरल लग सकता है, नहीं ड्रैग करें और .OBJ फ़ाइल को सीधे अपने प्रोजेक्ट के "रेस" डायरेक्टरी में छोड़ दें, क्योंकि इससे मॉडल आपके एपीके में अनावश्यक रूप से शामिल हो जाएगा।

एंड्रॉइड स्टूडियो प्रोजेक्ट्स में डिफ़ॉल्ट रूप से "नमूना" फ़ोल्डर नहीं होता है, इसलिए आपको मैन्युअल रूप से एक बनाने की आवश्यकता होगी:

  • अपनी परियोजना के "ऐप" फ़ोल्डर को नियंत्रित करें।
  • "नया> नमूना डेटा निर्देशिका" चुनें और "नमूना" नामक एक फ़ोल्डर बनाएं।
  • पहले डाउनलोड किए गए 3D मॉडल फ़ाइलों पर नेविगेट करें। स्रोत परिसंपत्ति फ़ाइल (.OBJ, .FBX, या .glTF) का पता लगाएं और फिर "नमूना" निर्देशिका में खींचें और छोड़ें।
  • जांचें कि क्या आपके मॉडल में कोई निर्भरता है (जैसे कि .mtl, .bin, .png, या .jpeg प्रारूपों में फाइलें)। यदि आपको इनमें से कोई भी फाइल नहीं मिलती है, तो उन्हें "नमूना" फ़ोल्डर में खींचें और छोड़ें।
  • Android Studio में, अपनी 3D मॉडल स्रोत फ़ाइल (.OBJ, .FBX, या .glTF) को नियंत्रित करें और फिर "आयात दृश्य एसेट" चुनें।

  • बाद की विंडो उन फ़ाइलों के बारे में कुछ जानकारी प्रदर्शित करती है, जो दृश्यरूप उत्पन्न करने जा रही हैं, जिसमें परिणामी .sfa फ़ाइल आपके प्रोजेक्ट में संग्रहीत की जाएगी; मैं "कच्ची" निर्देशिका का उपयोग करने जा रहा हूँ।
  • जब आप दर्ज की गई जानकारी से खुश होते हैं, तो "समाप्त करें" पर क्लिक करें।

यह आयात आपकी परियोजना में कुछ बदलाव करता है। यदि आप अपनी बिल्ड.ग्रेड फ़ाइल खोलते हैं, तो आप देखेंगे कि दृश्य निर्भरता को प्रोजेक्ट निर्भरता के रूप में जोड़ा गया है:

निर्भरताएँ {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform: plugin: 1.7.0 // NOTE: अपने आवेदन की निर्भरता यहां न रखें; वे व्यक्तिगत मॉड्यूल build.gradle फाइलों में} //} से संबंधित हैं}}

अपनी मॉड्यूल-स्तर build.gradle फ़ाइल खोलें, और आपको अपने आयातित 3D मॉडल के लिए एक नया दृश्यरूप मिलेगा। () प्रविष्टि

प्लगइन लागू करें: com.google.ar.sceneform.plugin // "सोर्स एसेट पाथ" जिसे आपने आयात के दौरान निर्दिष्ट किया था / दृश्यरूप। कैसेट (नमूना / डायनोसोर.बोज, // "आयात के दौरान आपके द्वारा निर्दिष्ट" सामग्री पथ) - डिफ़ॉल्ट , // ".sfa आउटपुट पाथ" जिसे आपने आयात के दौरान निर्दिष्ट किया है / sampedata / डायनासौर.sfa, // ".sfb आउटपुट पाथ" जिसे आपने आयात के दौरान निर्दिष्ट किया है / src / main / आस्तियों / डायनासोर)

यदि आप अपने "नमूना" और "कच्चे" फ़ोल्डरों को देखते हैं, तो आप देखेंगे कि उनमें क्रमशः .sfa और .sfb फाइलें हैं।

आप एंड्रॉइड स्टूडियो के नए दृश्य दर्शक में .sfa फ़ाइल का पूर्वावलोकन कर सकते हैं:

  • Android स्टूडियो मेनू बार से "व्यू> टूल विंडोज> व्यूअर" चुनें।
  • बाएं हाथ के मेनू में, अपनी .sfa फ़ाइल चुनें। आपका 3D मॉडल अब व्यूअर विंडो में दिखाई देना चाहिए।

अपना 3D मॉडल प्रदर्शित करें

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

इसके लिए हमें निम्नलिखित कार्य करने होंगे:

1. एक ArFragment सदस्य चर बनाएँ

ARFragment AR सत्र बनाने में शामिल भारी-भारोत्तोलन का बहुत प्रदर्शन करता है, इसलिए हम पूरे MainActivity class में इस खंड का संदर्भ देंगे।

निम्नलिखित स्निपेट में, मैं ArFragment के लिए एक सदस्य चर बना रहा हूं और फिर इसे ऑनक्रिएट () विधि में शुरू कर रहा हूं:

निजी सशस्त्रीकरण arCoreFragment; @Override संरक्षित शून्य onCreate (बंडल सहेजी गई InstanceState) {super.onCreate (saveInstanceState); ... ... ...} setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // टुकड़े का पता लगाएं, टुकड़ा प्रबंधक का उपयोग करें // getSupportFragmentManager ()। FindFragmentById (R.id.main_fragment);

2. एक ModelRenderable बनाएँ

अब हमें अपनी .sfb फाइल को एक ModelRenderable में बदलने की जरूरत है, जो अंततः हमारी 3D ऑब्जेक्ट को रेंडर करेगी।

यहाँ, मैं अपने प्रोजेक्ट के Res / कच्चे / डायनासोर से एक ModelRenderable बना रहा हूँ ।sfb फ़ाइल:

निजी ModelRenderable dinoRenderable; ... ... ... ModelRenderable.builder () .setSource (यह, R.raw.din डायनासौर) .build () .thenAccept (रेंडरटेबल -> dinoRenderable = रेंडरटेबल) .exceptively (throwable)> {Log.e टैग, "रेंडर करने में असमर्थ"); वापसी नल;}); }

3. उपयोगकर्ता इनपुट का जवाब दें

ArFragment में टैप, ड्रैग, पिंच और ट्विस्ट जेस्चर के लिए बिल्ट-इन सपोर्ट है।

हमारे ऐप में, उपयोगकर्ता ARCore प्लेन में एक 3D मॉडल जोड़ देगा, उस प्लेन को टैप करके।

इस कार्यक्षमता को देने के लिए, हमें एक कॉलबैक रजिस्टर करना होगा जो किसी प्लेन के टैप होने पर लागू किया जाएगा:

arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, विमान सम्‍मिलित करना, गति गति रोकना) -> {if (dinoRenderable == अशक्त) {return};

4. अपने मॉडल को एंकर करें

इस चरण में, हम एक ArSceneView को पुनः प्राप्त करने जा रहे हैं और इसे एक AnchorNode के साथ संलग्न करते हैं, जो सीन के मूल नोड के रूप में काम करेगा।

ArSceneView कई महत्वपूर्ण ARCore कार्यों को करने के लिए ज़िम्मेदार है, जिसमें डिवाइस के कैमरे की छवियों को प्रस्तुत करना, और एक Sceneform UX एनीमेशन प्रदर्शित करना है जो प्रदर्शित करता है कि AR अनुभव शुरू करने के लिए उपयोगकर्ता को अपने डिवाइस को कैसे रखना और स्थानांतरित करना चाहिए। ArSceneView किसी भी विमानों को उजागर करता है जो इसे पता लगाता है, उपयोगकर्ता को दृश्य के भीतर अपने 3 डी मॉडल रखने के लिए तैयार करता है।

ARSceneView घटक में एक दृश्य जुड़ा हुआ है, जो एक अभिभावक-बच्चा डेटा संरचना है जिसमें सभी नोड्स हैं जिन्हें प्रदान करने की आवश्यकता है।

हम AnchorNode का नोड बनाकर शुरू करने जा रहे हैं, जो हमारे ArSceneView के मूल नोड के रूप में कार्य करेगा।

सभी एंकर नोड्स वास्तविक दुनिया की स्थिति में रहते हैं, इसलिए एंकर नोड बनाकर हम यह सुनिश्चित करते हैं कि हमारे 3D मॉडल संवर्धित दृश्य के भीतर जगह में बने रहेंगे।

चलो हमारे लंगर नोड बनाएँ:

AnchorNode anchorNode = नया AnchorNode (लंगर);

फिर हम एक ArSceneView प्राप्त कर सकते हैं, getArSceneView () का उपयोग कर, और इसे AnchorNode में संलग्न कर सकते हैं:

anchorNode.setParent (arCoreFragment.getArSceneView () getScene ()।);

5. मूविंग, स्केलिंग और रोटेटिंग के लिए सपोर्ट जोड़ें

अगला, मैं एक प्रकार का नोड बनाने जा रहा हूँ TransformableNode। TransformableNode उपयोगकर्ता के इशारों के आधार पर नोड्स को स्थानांतरित करने, स्केल करने और घुमाने के लिए जिम्मेदार है।

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

TransformableNode transformableNode = नया TransformableNode (arCoreFragment.getTransformationSystem ()); // कनेक्ट करने योग्यNode को anchorNode से जोड़ें // transformableNode.setParent (anchorNode); transformableNode.setRenderable (dinoRenderable); // नोड का चयन करें // transformableNode.select (); }); }

पूरा किया हुआ MainActivity

उपरोक्त सभी प्रदर्शन करने के बाद, आपकी मुख्यता कुछ इस तरह दिखनी चाहिए:

आयात android.app.Activity; आयात android.app.ActivityManager; import androidx.appcompat.app.AppCompatActivity; आयात android.content.Context; आयात android.net.Uri; आयात android.os.Build; आयात android.os.Build.VERSION_CODES; आयात android.os.Bundle; import android.util.Log; आयात android.view.MotionEvent; आयात androidx.annotation.RequiresApi; आयात com.google.ar.core.Anchor; आयात com.google.ar.core.itResult; आयात com.google.ar.core.Plane; आयात com.google.ar.sceneform.AnchorNode; आयात com.google.ar.sceneform.rendering.ModelRenderable; आयात com.google.ar.sceneform.ux.ArFragment; आयात com.google.ar.sceneform.ux.ransformableNode; सार्वजनिक वर्ग MainActivity का विस्तार AppCompatActivity {निजी स्टेटिक फाइनल स्ट्रिंग TAG = MainActivity.class.getSimpleName (); निजी स्थिर अंतिम डबल MIN_OPENGL_VERSION = 3.0; // ModelRenderable के लिए एक सदस्य चर बनाएं // निजी ModelRenderable dinoRenderable; // ArFragment के लिए एक सदस्य चर बनाएं // निजी ArFragment arCoreFragment; @RequiresApi (एपीआई = VERSION_CODES.N) @ ऑवरराइड संरक्षित शून्य onCreate (बंडल सहेजी गई InstanceState) {super.onCreate (saveInstanceState); अगर (checkDevice ((यह))) {वापसी; } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // टुकड़े का पता लगाएं, टुकड़ा प्रबंधक का उपयोग करें // getSupportFragmentManager ()। FindFragmentById (R.id.main_fragment); if (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// ModelRenderable // ModelRenderable.builder () .setSource (यह, R.raw.din डायनासौर) बनाएँ।) () .thenAccept (रेंडर योग्य -> ​​dinoRenderable = renderable)। )। जाहिरा तौर पर (// यदि कोई त्रुटि होती है ... // फेंकने योग्य -> ​​{//... तो निम्नलिखित को Logcat // Log.e पर प्रिंट करें (TAG, "रेंडर करने में असमर्थ"); वापसी null;} ); } // सुनो onTap इवेंट्स // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Plane plane, MotionEvent motionEvent) -> {if (dinoRadable == null) {return;} एंकर = hitResult.createAnchor ()। नोड का प्रकार AnchorNode // AnchorNode anchorNode = new AnchorNode (anchor); // AnchorNode को Scene से जोड़ें // anchorNode.setParent (arCoreNragment.getArSceneView ())। getScene ()); TransformableNode transformableNode = new TransformableNode (arCoreFragment.getTransformationSS ()); // TransformableNode को AnchorNode से कनेक्ट करें। transformableNode.setParent (anchorNode); // Renderable // transformableNode.setRenderable (dinoRenderable) को जोड़ें। / transformableNode.select ();}); } सार्वजनिक स्थैतिक बूलियन चेकडाइसिस (अंतिम गतिविधि गतिविधि) {// यदि डिवाइस एंड्रॉइड मार्शमैलो या इससे पहले चल रहा है ... // अगर (Build.VERSION.SDK_INT <VERSION_CODES.N) {//..then निम्नलिखित को प्रिंट करें Logcat // Log.e (TAG, "Sceneform को Android N या उच्चतर की आवश्यकता है"); activity.finish (); विवरण झूठा है; } स्ट्रिंग OpenGlVersionString = ((एक्टिविटी मैनजर) गतिविधि.getSystemService (Context.ACTIVITY_SERVICE)) .getDeviceConfigurationInfo () // ओपनजीएल ES के संस्करण की जांच करें // .getGlEsVersion (); // यदि डिवाइस OpenGL ES 3.0 से कम कुछ भी चला रहा है ... // (Double.parseDouble (OpenGlVersionString) <MIN_OPENGL_VERSION) {//.then निम्न को Logcat - Log.e (TAG, "से प्रिंट करें OpenGL ES 3.0 या उच्चतर की आवश्यकता है); activity.finish (); विवरण झूठा है; } सच लौटना; }}

आप पूरा प्रोजेक्ट GitHub से डाउनलोड कर सकते हैं।

अपने Google ARCore संवर्धित वास्तविकता ऐप का परीक्षण करना

अब आप भौतिक, समर्थित Android डिवाइस पर अपने एप्लिकेशन का परीक्षण करने के लिए तैयार हैं। यदि आप ARCore को सपोर्ट करने वाले डिवाइस के मालिक नहीं हैं, तो एंड्रॉइड एमुलेटर में आपके एआर ऐप का परीक्षण करना संभव है (थोड़े अतिरिक्त कॉन्फ़िगरेशन के साथ, जिसे हम अगले भाग में कवर करेंगे)।

अपने प्रोजेक्ट का परीक्षण करने के लिए a भौतिक Android डिवाइस:

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

  • एक बार जब आप इन डॉट्स की स्थिति से खुश हो जाते हैं, तो उन्हें एक टैप दें - आपका 3 डी मॉडल अब आपके चुने हुए विमान पर दिखाई देना चाहिए!

  • मॉडल के आसपास शारीरिक रूप से आगे बढ़ने की कोशिश करें; अपने परिवेश के आधार पर, आप इसके चारों ओर पूर्ण 360 डिग्री करने में सक्षम हो सकते हैं। आपको यह भी देखना चाहिए कि ऑब्जेक्ट एक छाया डाल रहा है जो वास्तविक विश्व प्रकाश स्रोतों के अनुरूप है।

Android वर्चुअल डिवाइस पर ARCore का परीक्षण

Android वर्चुअल डिवाइस (AVD) में अपने ARCore ऐप्स का परीक्षण करने के लिए, आपको Android Emulator संस्करण 27.2.9 या उच्चतर की आवश्यकता होगी। आपको अपने AVD पर Google Play स्टोर में भी साइन इन होना चाहिए, और OpenGL ES 3.0 या उच्चतर सक्षम होना चाहिए।

यह जांचने के लिए कि क्या OpenGL ES 3.0 या उच्चतर वर्तमान में आपके AVD पर सक्षम है:

  • अपने AVD को सामान्य रूप में लॉन्च करें।
  • एक नई टर्मिनल विंडो (मैक) या एक कमांड प्रॉम्प्ट (विंडोज) खोलें।
  • परिवर्तन निर्देशिका ("सीडी") इसलिए टर्मिनल / कमांड प्रॉम्प्ट आपके एंड्रॉइड एसडीके के "एडीबी" कार्यक्रम के स्थान पर इंगित कर रहा है, उदाहरण के लिए मेरी कमान इस तरह दिखती है:

सीडी / उपयोगकर्ता / jessicathornsby / पुस्तकालय / Android / sdk / मंच-उपकरण

  • अपने कीबोर्ड पर "एंटर" कुंजी दबाएं।
  • टर्मिनल में अगले कमांड को कॉपी / पेस्ट करें, और फिर "एंटर" कुंजी दबाएं:

./adb logcat | grep eglMakeCurrent

यदि टर्मिनल "ver 3 0" या उच्चतर देता है, तो OpenGL ES सही तरीके से कॉन्फ़िगर किया गया है। यदि टर्मिनल या कमांड प्रॉम्प्ट 3.0 से पहले कुछ भी प्रदर्शित करता है, तो आपको OpenGL ES 3.0 सक्षम करना होगा।

  • अपने AVD पर वापस जाएँ।
  • एंड्रॉइड एमुलेटर के साथ तैरने वाले "विस्तारित नियंत्रण" बटन की पट्टी का पता लगाएं, और फिर "सेटिंग्स> उन्नत" चुनें।
  • "OpenGL ES API स्तर> रेंडरर अधिकतम (OpenGL ES 3.1 तक) पर नेविगेट करें।"
  • एमुलेटर को फिर से चालू करें।

टर्मिनल / कमांड प्रॉम्प्ट विंडो में, निम्न कमांड कॉपी / पेस्ट करें और फिर "एंटर" कुंजी दबाएं।

./adb logcat | grep eglMakeCurrent

अब आपको "ver 3 0" या उच्चतर परिणाम प्राप्त करना चाहिए, जिसका अर्थ है OpenGL ES सही तरीके से कॉन्फ़िगर किया गया है।

अंत में, सुनिश्चित करें कि आपका AVD ARCore का नवीनतम संस्करण चला रहा है:

  • ARCore के GitHub पृष्ठ पर जाएं, और एमुलेटर के लिए ARCore की नवीनतम रिलीज़ को डाउनलोड करें। उदाहरण के लिए, सबसे हालिया रिलीज़ लिखने के समय "ARCore_1.7.0.x86_for_emulator.apk" था
  • अपने चलने वाले AVD पर एपीके को ड्रैग और ड्रॉप करें।

किसी AVD पर अपनी परियोजना का परीक्षण करने के लिए, अपना एप्लिकेशन इंस्टॉल करें और संकेत दिए जाने पर AVD के "कैमरा" तक पहुंच प्रदान करें।

अब आपको एक नकली कमरे का एक कैमरा दृश्य देखना चाहिए। अपने एप्लिकेशन का परीक्षण करने के लिए, इस आभासी स्थान पर घूमें, एक नकली सपाट सतह ढूंढें, और इस सतह पर एक मॉडल लगाने के लिए क्लिक करें।

आप "विकल्प" (macOS) या "Alt" (लिनक्स या विंडोज) कुंजियों को दबाकर और दबाकर, और फिर निम्नलिखित कीबोर्ड शॉर्टकट में से किसी का उपयोग करके वर्चुअल कैमरे को वर्चुअल रूम के चारों ओर ले जा सकते हैं:

  • बाएँ या दाएँ ले जाएँ। प्रेस ए या डी।
  • नीचे या ऊपर जाना। Q या E दबाएं।
  • आगे या पीछे हटना। प्रेस डब्ल्यू या एस।

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

समेट रहा हु

इस लेख में, हमने ARCore और Sceneform प्लगइन का उपयोग करके एक सरल संवर्धित वास्तविकता ऐप बनाया।

यदि आप Google ARCore को अपनी परियोजनाओं में उपयोग करने का निर्णय लेते हैं, तो नीचे दिए गए टिप्पणियों में अपनी कृतियों को साझा करना सुनिश्चित करें!

फैक्स करना अनिवार्य रूप से ईमेल का भौतिक संस्करण है। आप एक मशीन में कुछ सामान डालते हैं और यह एक मशीन पर कहीं और प्रिंट करता है। यह मरने की तकनीक है क्योंकि ईमेल बेहतर है। हालाँकि, इसके कुछ उपयोग हैं...

संभावना है कि आप यहाँ हैं क्योंकि यह आपके पसंदीदा खेल के लिए अपना मौसम शुरू करने का समय है। आप एक्शन और फंतासी खेल में जाने के लिए एक मजेदार तरीका ढूंढ रहे हैं, यह एक अच्छा विकल्प है। यह मज़ेदार, प्र...

लोकप्रिय पोस्ट