Poly API: استرداد الأصول ثلاثية الأبعاد لتطبيقات VR و AR Android

مؤلف: Peter Berry
تاريخ الخلق: 14 Lang L: none (month-012) 2021
تاريخ التحديث: 4 قد 2024
Anonim
Poly API: استرداد الأصول ثلاثية الأبعاد لتطبيقات VR و AR Android - التطبيقات
Poly API: استرداد الأصول ثلاثية الأبعاد لتطبيقات VR و AR Android - التطبيقات

المحتوى


هل لديك فكرة رائعة عن تطبيق جوال Virtual Reality (VR) أو الواقع المعزز (AR) ، ولكن ليس لديك فكرة عن كيفية تحقيق رؤيتك في الحياة؟

ما لم تكن أحد مطوري Android الذين تصادف أنك فنان ثلاثي الأبعاد من ذوي الخبرة ، فإن إنشاء كل الأصول المطلوبة لتقديم تجربة غامرة بزاوية 360 درجة ، قد يكون عملية شاقة.

لمجرد أنك لا تملك الوقت أو الموارد أو الخبرة اللازمة لإنشاء نماذج ثلاثية الأبعاد ، لا يعني أنه لا يمكنك إنشاء تطبيق جوال VR أو AR رائع! هناك مجموعة كبيرة من الموارد ثلاثية الأبعاد متوفرة مجانًا على شبكة الويب العالمية ، بالإضافة إلى جميع واجهات برمجة التطبيقات والأطر والمكتبات التي تحتاجها لتنزيل هذه الأصول وعرضها في تطبيقات Android.

قراءة التالي: يمكنك الآن زيارة أي موقع إلكتروني باستخدام Daydream VR. حتى هذا واحد.

في هذه المقالة ، سننظر إلى Poly ، وهو مستودع عبر الإنترنت وواجهة برمجة التطبيقات التي تضع آلاف الأصول ثلاثية الأبعاد في متناول يدك. بحلول نهاية هذه المقالة ، ستكون قد أنشأت تطبيقًا يسترد أصلًا ثلاثي الأبعاد Poly في وقت التشغيل ، ثم يعرضه باستخدام مكتبة المعالجة الشائعة لنظام Android.


عرض الأصول ثلاثية الأبعاد باستخدام Poly

إذا كنت مهتمًا في أي وقت مضى بتطوير Unity ، فسيكون مستودع Poly مشابهًا لمتجر Unity Asset - باستثناء أن كل شيء في Poly مجاني!

يتم نشر العديد من طرز Poly 3D ثلاثية الأبعاد بموجب ترخيص المشاع الإبداعي ، لذا فأنت حر في استخدام هذه الأصول وتعديلها وإعادة خلطها ، طالما أنك تمنح المنشئ رصيدًا مناسبًا.

تم تصميم جميع الطرز ثلاثية الأبعاد من Poly لتكون متوافقة مع منصات VR و AR من Google ، مثل Daydream و ARCore ، ولكن يمكنك استخدامها أينما شئت وبالرغم من ذلك - يمكنك حتى استخدامها مع ARKit من Apple!

عندما يتعلق الأمر باسترداد وعرض الأصول Poly ، لديك خياران. أولاً ، يمكنك تنزيل الأصول على جهاز الكمبيوتر الخاص بك ثم استيرادها إلى Android Studio ، بحيث يتم شحنها مع التطبيق الخاص بك والمساهمة في حجم ملف APK الخاص به ، أو يمكنك استرداد هذه الأصول في وقت التشغيل باستخدام واجهة برمجة تطبيقات Poly.

يوفر Poly API القائم على REST القائم على النظام الأساسي وصولًا برمجيًا للقراءة فقط إلى مجموعة Poly الضخمة من النماذج ثلاثية الأبعاد. هذا الأمر أكثر تعقيدًا من تجميع الأصول مع ملف APK الخاص بك ، ولكن هناك العديد من الفوائد لاسترداد أصول Poly في وقت التشغيل ، وأهمها أنه يساعد في الحفاظ على حجم ملف APK الخاص بك تحت السيطرة ، مما قد يؤثر على عدد الأشخاص الذين يقومون بتنزيل تطبيقك.


يمكنك أيضًا استخدام Poly API لإعطاء المستخدمين المزيد من الخيارات ، على سبيل المثال إذا كنت تقوم بتطوير لعبة محمولة ، فيمكنك السماح للمستخدمين بالاختيار من بين مجموعة من نماذج الشخصيات.

نظرًا لأنك حر في تعديل طرازات Poly ، يمكنك حتى أن تسمح للمستخدمين بتعديل طابعهم المختار ، على سبيل المثال عن طريق تغيير لون الشعر أو العين ، أو عن طريق الجمع بينه وبين أصول Poly الأخرى ، مثل الأسلحة المختلفة والدروع. وبهذه الطريقة ، يمكن أن يساعدك Poly API في تقديم مجموعة رائعة من الأصول ثلاثية الأبعاد ، مع وجود مجال واسع لتخصيص التجربة - وكل ذلك من أجل القليل من العمل نسبيا. سيكون المستخدمون مقتنعين بأنك قضيت الكثير من الوقت ، وصياغة جميع هذه النماذج ثلاثية الأبعاد بدقة!

إنشاء مشروع نمذجة ثلاثية الأبعاد

سننشئ تطبيقًا يسترجع مادة بولي معينة عند تشغيل التطبيق لأول مرة ، ثم يعرض تلك المادة في وضع ملء الشاشة ، بناءً على طلب المستخدم.

لمساعدتنا في استرداد هذا الأصل ، سأستخدم Fuel ، وهي مكتبة شبكات HTTP لـ Kotlin و Android. ابدأ بإنشاء مشروع جديد بالإعدادات التي تختارها ، ولكن عندما يُطلب منك اختيار "تضمين دعم Kotlin".

يجب أن تتضمن جميع المكالمات التي تجريها على Poly API مفتاح API ، والذي يُستخدم لتحديد التطبيق الخاص بك وفرض حدود الاستخدام. أثناء التطوير والاختبار ، ستستخدم غالبًا مفتاح API غير مقيد ، ولكن إذا كان لديك أي خطط لإصدار هذا التطبيق ، فيجب عليك استخدام مفتاح API المقيد من Android.

لإنشاء مفتاح مقيد ، ستحتاج إلى معرفة شهادة توقيع SHA-1 لمشروعك ، لذلك دعونا نحصل على هذه المعلومات الآن:

  • حدد علامة التبويب "Gradle" في Android Studio (حيث يتم وضع المؤشر في لقطة الشاشة التالية). هذا يفتح لوحة "مشاريع Gradle".

  • في لوحة "مشاريع Gradle" ، انقر نقرًا مزدوجًا لتوسيع "مشروع الجذر" الخاص بمشروعك ، ثم حدد "المهام> Android> توقيع التقرير". يفتح هذا لوحة جديدة على طول نافذة Android Studio.
  • حدد زر "تبديل تنفيذ المهام / وضع النص" (حيث يتم وضع المؤشر في لقطة الشاشة التالية).

سيتم الآن تحديث لوحة "Run" لعرض الكثير من المعلومات حول مشروعك ، بما في ذلك بصمة SHA-1.

أنشئ حساب Google Cloud Platform

للحصول على مفتاح API الضروري ، ستحتاج إلى حساب Google Cloud Platform (GPC).

إذا لم يكن لديك حساب ، فيمكنك الاشتراك في نسخة تجريبية مجانية مدتها 12 شهرًا من خلال الانتقال إلى صفحة Try Cloud Platform المجانية ، واتباع التعليمات. لاحظ أنه يلزم وجود بطاقة ائتمان أو بطاقة خصم ، لكن وفقًا لصفحة الأسئلة المتداولة ، يتم استخدام هذا فقط للتحقق من هويتك و "لن يتم تحصيل رسوم منك أو إصدار فاتورة لك خلال فترة التجربة المجانية".

احصل على مفتاح Poly API

بمجرد التسجيل ، يمكنك تمكين واجهة برمجة تطبيقات Poly وإنشاء المفتاح الخاص بك:

  • رئيس لأكثر من وحدة التحكم GCP.
  • حدد الرمز المبطن في الزاوية العلوية اليسرى ، واختر "واجهات برمجة التطبيقات والخدمات> لوحة المعلومات".
  • حدد "تمكين واجهات برمجة التطبيقات والخدمات".
  • في القائمة اليسرى ، اختر "غير ذلك".
  • اختر بطاقة "واجهة برمجة تطبيقات بولي".
  • انقر فوق الزر "تمكين".
  • بعد لحظات قليلة ، سيتم نقلك إلى شاشة جديدة ؛ افتح القائمة الجانبية واختر "واجهات برمجة التطبيقات والخدمات> بيانات الاعتماد".

  • في النافذة المنبثقة التالية ، حدد "تقييد المفتاح".
  • إعطاء مفتاحك اسم مميز.
  • ضمن "قيود التطبيق" ، حدد "تطبيقات Android".
  • حدد "إضافة اسم الحزمة وبصمة الإصبع".
  • قم بنسخ / لصق بصمة SHA-1 الخاصة بمشروعك في حقل "بصمة شهادة التوقيع".
  • أدخل اسم حزمة مشروعك (يظهر في البيان الخاص بك وفي الجزء العلوي من كل ملف فئة).
  • انقر فوق "حفظ".

سيتم نقلك الآن إلى شاشة "بيانات الاعتماد" الخاصة بمشروعك ، والتي تحتوي على قائمة بجميع مفاتيح واجهة برمجة التطبيقات الخاصة بك - بما في ذلك مفتاح واجهة برمجة تطبيقات Poly-poly الذي أنشأته للتو.

تبعيات المشروع: ملحقات الوقود ، P3D و Kotlin

لاسترداد أصول Poly وعرضها ، سنحتاج إلى مساعدة من بعض المكتبات الإضافية:

  • وقود. لا يحتوي Poly حاليًا على مجموعة أدوات رسمية لنظام Android ، لذلك ستحتاج إلى العمل مع واجهة برمجة التطبيقات (API) مباشرةً باستخدام واجهة REST. لجعل هذه العملية أكثر بساطة ، سأستخدم مكتبة شبكة الوقود HTTP.
  • جارٍ المعالجة لنظام Android. سأستخدم عارض P3D لهذه المكتبة لعرض مادة العرض Poly.

افتح ملف build.gradle الخاص بمشروعك ، وأضف هاتين المكتبتين كتبعيات للمشروع:

تطبيق التبعيات {application fileTree (include:، dir: libs) "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" "com com.android.support:appcompat-v7:27.1 // // إضافة مكتبة الوقود / / application com.github.kittinunf.fuel: fuel-android: 1.13.0 // إضافة المعالجة لمحرك Android // implementation org.p5android: processing-core: 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 class 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 ()} {{... ... آخر

استرداد الأصل

يمكنك اختيار أي أصل موجود على موقع Google Poly ، لكنني سأستخدم هذا النموذج من Earth Earth.

يمكنك استرداد مادة العرض باستخدام معرّفها ، والذي يظهر في نهاية علبة 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 import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val الأصولURL =" 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 ()} آخر {

بعد ذلك ، نحتاج إلى تقديم طلب 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 import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val الأصولURL =" 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 ()} آخر {// قم بإجراء مكالمة خادم ، ثم قم بتمرير البيانات باستخدام طريقة "listOf" // الأصولURL.httpGet (listOf ("مفتاح" إلى APIKey)). استجابة Json {request ، استجابة ، نتيجة -> // قم بعمل شيء مع الاستجابة // result.fold ({val as set = it.obj ()

قد يحتوي الأصل على العديد من التنسيقات ، مثل OBJ و GLTF و FBX. نحتاج إلى تحديد أن الأصل موجود بتنسيق OBJ.

في هذه الخطوة ، أسترجع أيضًا اسم وعنوان كل الملفات التي نحتاج إلى تنزيلها ،
بما في ذلك ملف الأصل الأساسي ("الجذر") ، بالإضافة إلى أي ملفات المواد والنسيج المرتبطة ("الموارد").

إذا كان تطبيقنا غير قادر على استرداد الأصل بشكل صحيح ، فسيتم عرض نخب لإعلام المستخدم.

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 import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val الأصولURL =" 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 ()} آخر {// قدم طلبًا للحصول على عنوان URL للأصول // الأصولURL. httpGet (listOf ("key" لـ APIKey)). responseJson {request ، response ، result -> // افعل شيئًا مع الاستجابة // result.fold ({val رصيد = it.obj () var objectURL: String؟ = فارغة فار materialLibraryName: سلسلة؟ = null var materialLibraryURL: String؟ = null // تحقق من تنسيق مادة العرض ، باستخدام صفيف "التنسيقات" // val بنود الأصول = الأصول.getJSONArray ("التنسيقات") // تنفيذ حلقة من خلال جميع التنسيقات // لـ (أنا في 0 حتى أصل الأصول). (طول)) { val currentFormat = originFormats.getJSONObject (i) // استخدم formatType لتحديد نوع تنسيق المورد. إذا كان التنسيق OBJ… .// إذا (currentFormat.getString ("formatType") == "OBJ") {//... ثم استرجع ملف "الجذر" لهذا المورد ، أي ملف OBJ // objectURL = currentFormat. getJSONObject ("root") .getString ("url") // استرداد كل تبعيات ملف الجذر // materialLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("comparPath") materialLibraryURL = currentFormat.getJSONAray ("resources") .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_، _ -> File (filesDir، "globeAsset.obj")}. Response {_ ، _، result -> result.fold ({}، {// إذا لم تتمكن من تحديد موقع ملف OBJ أو تنزيله ، فقم بعرض خطأ // Toast.makeText (هذا ، "غير قادر على تنزيل المورد" ، Toast.LENGTH_SHORT ) .show ()})} materialLibraryURL !!. httpDownload (). destination {_، _ -> File (filesDir، materialLibraryName)}. Response {_، _، result -> 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 import kotlinx.android.synthetic.main.activity_main. * import java.io.File class MainActivity: AppCompatActivity () {companion object {const val APIKey = "INSERT-YOUR-API -KEY "val الأصولURL =" 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 ()} {{الأصولURL.httpGet (listOf ("مفتاح" إلى APIKey)). responseJson {request، response، result -> result.fold ({val رصيد = it.obj () var objectURL: String؟ = null var materialLibraryName: String؟ = null var materialLibraryURL: Str جي؟ = خالية من الأصول الصفرية = الأصول .getJSONArray ("التنسيقات") لـ (i في 0 حتى أصل الأصول). الطول {)) {val currentFormat = originFormats.getJSONObject (i) if (currentFormat.getString ("formatType") == "OBJ" ) {objectURL = currentFormat.getJSONObject ("root") .getString ("url") materialLibraryName = currentFormat.getJSONArray ("resources") .getJSONObject (0) .getString ("comparPath") materialLibraryURL = currentFormat.getJames " ) .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). destination {_، _ -> File (filesDir، "globeAsset.obj")}. Response {_، _، result -> result.fold ({}، {Toast.makeText (هذا ، "غير قادر على تنزيل المورد" ، Toast.LENGTH_SHORT) .show ()})} materialLibraryURL !!. httpDownload (). destination {_، _ -> File (filesDir، materialLibraryName)}. Response {_، _، result -> result.fold ({}، {Toast.makeText (هذا ، "غير قادر على تنزيل المورد" ، Toast.LENGTH_SHORT) .show ()})}} ، {Toast.makeText (هذا ، "غير قادر على تنزيل المورد" ، Toast.LENGTH_SHORT) .sh ow ()})} // تطبيق زر // displayButton.setOnClickListener {val intent = Intent (this، SecondActivity :: class.java) startActivity (intent)؛ }}}

بناء قماش 3D

الآن ، دعونا ننشئ النشاط الذي سنعرض فيه أصولنا في وضع ملء الشاشة:

  • انقر مع الضغط على Control على ملف MainActivity.kt الخاص بمشروعك ، واختر "New> Kotlin File / Class."
  • افتح القائمة المنسدلة "النوع" ، واختر "الفصل".
  • أطلق على هذه الفئة اسم "النشاط الثاني" ، ثم انقر فوق "موافق".

من أجل رسم كائن ثلاثي الأبعاد ، نحتاج إلى قماش ثلاثي الأبعاد! سأستخدم عارض P3D للمعالجة في Android ، مما يعني توسيع فئة PApplet وتجاوز طريقة الإعدادات () ثم تمرير P3D كوسيطة إلى طريقة ملء الشاشة (). نحتاج أيضًا إلى إنشاء خاصية تمثل مادة العرض Poly ككائن PShape.

متعة خاصة displayAsset () {val canvas3D = object: PApplet () {var polyAsset: PShape؟ = تجاوز إعدادات المتعة () {fullScreen (PConstants.P3D)}

بعد ذلك ، نحتاج إلى تهيئة كائن PShape ، من خلال تجاوز أسلوب setup () ، استدعاء الأسلوب loadShape () ، ثم تمرير المسار المطلق لملف .obj:

تجاوز الإعداد المرح () {polyAsset = loadShape (ملف (filesDir ، "globeAsset.obj"). absolutePath)}

بالاعتماد على قماش P3D

للرسم على لوحة الرسم الثلاثية الأبعاد هذه ، نحتاج إلى تجاوز طريقة الرسم ():

تجاوز متعة رسم () {خلفية (0) الشكل (polyAsset)}}

بشكل افتراضي ، فإن العديد من الأصول التي تم استردادها من واجهة برمجة تطبيقات Poly هي في الجانب الأصغر ، لذلك إذا قمت بتشغيل هذا الرمز الآن ، فلن ترى حتى الأصل ، بناءً على تكوين الشاشة. عند إنشاء مشاهد ثلاثية الأبعاد ، ستقوم عادةً بإنشاء كاميرا مخصصة حتى يتمكن المستخدم من استكشاف المشهد وعرض أصولك ثلاثية الأبعاد من درجة 360 درجة كاملة. ومع ذلك ، هذا خارج نطاق هذه المقالة ، لذا سأقوم بتغيير حجم الأصل وموضعه يدويًا ، للتأكد من ملاءمته على الشاشة بشكل مريح.

يمكنك زيادة حجم الأصل ، عن طريق تمرير قيمة سالبة إلى الأسلوب scale ():

على نطاق و(-10f)

يمكنك ضبط موضع الأصل في المساحة ثلاثية الأبعاد الافتراضية باستخدام طريقة translate () والإحداثيات التالية:

  • X. يضع الأصل على طول المحور الأفقي.
  • Y. يضع الأصل على طول المحور العمودي.
  • Z. هذا هو محور "العمق / الارتفاع" ، الذي يحول الكائن ثنائي الأبعاد إلى كائن ثلاثي الأبعاد. تخلق القيم الإيجابية الانطباع بأن الكائن يأتي نحوك ، والقيم السلبية تخلق انطباعًا بأن الكائن يتحرك بعيدًا عنك.

لاحظ أن التحويلات تراكمية ، لذا فإن كل ما يحدث بعد أن تتراكم الدالة هو التأثير.

أنا أستخدم ما يلي:

ترجمة (-50 f ، -100f ، 10f)

إليك الرمز المكتمل:

تجاوز متعة رسم () {الخلفية (0) مقياس (-10f) ترجمة (-50f ، -100f) // ارسم الأصل من خلال استدعاء الشكل () طريقة // الشكل (polyAsset)}}

بعد ذلك ، نحتاج إلى إنشاء ملف التخطيط المقابل ، حيث سنضيف لوحة الرسم الثلاثية الأبعاد كعنصر واجهة مستخدم FrameLayout:

  • انقر مع الضغط على مفتاح التحكم "res> layout" في مشروعك.
  • حدد "ملف المورد تخطيط".
  • قم بتسمية هذا الملف باسم "activity_second" ، ثم انقر فوق "موافق".

الآن لدينا إطار "عرض_الأصول" ، نحتاج إلى إعلام نشاطنا الثاني به! قم بالرجوع إلى ملف SecondActivity.kt ، وقم بإنشاء مثيل PFragment جديد ، وقم بتوجيهه في اتجاه عنصر واجهة المستخدم "الأصول_الخاصة بنا":

import android.os.Bundle import android.support.v7.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_second. * import processing.android.PFragment import processing.core.PApplet import processing.core.PConstants import processing.core .PShape import java.io.File class SecondActivity: AppCompatActivity () {override fun onCreate (saveInstanceState: Bundle؟) {super.onCreate (saveInstanceState) setContentView (R.layout.activity_second) displayAsset ()} canvas3D = كائن: PApplet () {var polyAsset: PShape؟ = null override fun settings () {fullScreen (PConstants.P3D)} overjide fun setup () {polyAsset = loadShape (File (filesDir، "globeAsset.obj"). absolutePath)} override fun draw () {background (0) scale (-10f) ترجمة الشكل (-50 f ، -100 f) (polyAsset)}} // أضف ما يلي // val الأصولView = PFragment (canvas3D) originView.setView (origin_view، this)}}

الخطوة الأخيرة ، هي إضافة النشاط الثاني إلى البيان الخاص بك:

// أضف التالي //

اختبار المشروع الخاص بك

نحن الآن على استعداد لاختبار المشروع النهائي! قم بتثبيته على جهاز Android أو AVD ، وتأكد من أن لديك اتصال نشط بالإنترنت. بمجرد تشغيل التطبيق ، سيتم تنزيل الأصل ، ويمكنك بعد ذلك مشاهدته عن طريق إعطاء زر "عرض الأصول" نقرة.

يمكنك تنزيل هذا المشروع الكامل من جيثب.

تغليف

في هذه المقالة ، نظرنا في كيفية استخدام واجهة برمجة تطبيقات بولي لاسترداد الأصول ثلاثية الأبعاد في وقت التشغيل ، وكيفية عرض هذه الأصول باستخدام مكتبة المعالجة لنظام أندرويد. هل تعتقد أن Poly API لديه القدرة على جعل تطوير VR و AR في متناول المزيد من الناس؟ اسمحوا لنا أن نعرف في التعليقات أدناه!

ذات صلة

  • ستجلب Google تطبيقات AR إلى "مئات الملايين" من أجهزة Android في عام 2018
  • ستعلمك Google عن الذكاء الاصطناعي والتعلم الآلي مجانًا
  • 15 أفضل ألعاب VR لجوجل كرتون
  • أفضل 10 تطبيقات VR لجوجل كرتون
  • ما هو جوجل الفوشيه؟ هل هذا هو أندرويد الجديد؟
  • ما هو جوجل دوبلكس؟ - الميزات ، تاريخ الإصدار ، وأكثر من ذلك
  • كيفية إنشاء تطبيق VR لنظام Android خلال 7 دقائق فقط
  • سماعات الرأس VR المحمول - ما هي أفضل الخيارات الخاصة بك؟

أول الأشياء التي قد تلاحظها حول A7 هي الحواف. في عصر تتركز فيه الأجهزة الرئيسية على الشاشات من الحافة إلى الحافة والحصول على أعلى نسبة ممكنة من الشاشة ، يمكن أن يبدو طراز A7 (2018) قليلاً. عندما عرضت ...

إذا كنت تمتلك amung Galaxy A7 أو A8 أو A9 (2018) ، فهناك أخبار سارة لك اليوم - لقد صدق Wi-Fi Alliance على جميع الهواتف الذكية الثلاثة لنظام Android 9 Pie. هذا يعني أن جميع عروض سامسونج متوسطة المدى 20...

مشاركات جديدة