إجراء اختبارات النتائج في تطبيق Android NDK

أجرِ اختبار نجاح لتحديد الموضع الصحيح لعنصر ثلاثي الأبعاد في المشهد. ويضمن الموضع الصحيح عرض محتوى الواقع المعزّز بالحجم المناسب (الواضح).

أنواع نتائج النتائج

يمكن أن يسفر اختبار النتيجة عن أربعة أنواع مختلفة من نتائج النتائج، كما هو موضّح في الجدول التالي.

نوع نتيجة النتيجة الوصف الاتجاه حالة الاستخدام طلبات الطريقة
العمق (AR_TRACKABLE_DEPTH_POINT) تستخدم معلومات العمق من المشهد بأكمله لتحديد عمق نقطة ما واتجاهها الصحيحين. متعامد على السطح الثلاثي الأبعاد وضع كائن افتراضي على سطح عشوائي (وليس فقط على الأرضيات والجدران) يجب تفعيل ArDepthMode لكي تعمل هذه الميزة.

ArFrame_hitTest، ابحث عن ArDepthPoint في قائمة الإرجاع
طائرة (AR_TRACKABLE_PLANE) النقر على الأسطح الأفقية و/أو الرأسية لتحديد عمق النقطة واتجاهها الصحيحَين متعامد على السطح الثلاثي الأبعاد ضَع كائنًا على سطح مستوٍ (أرضية أو جدار) باستخدام الأبعاد الهندسية الكاملة للطائرة. يجب استخدام الميزان الصحيح على الفور. الإجراء الاحتياطي لاختبار العمق ArFrame_hitTest، ابحث عن ArPlane في قائمة الإرجاع.
نقطة مميّزة (AR_TRACKABLE_POINT) تعتمد على الميزات المرئية حول نقطة نقر المستخدم لتحديد الموضع والاتجاه الصحيحَين للنقطة متعامد على السطح الثلاثي الأبعاد وضع كائن على سطح عشوائي (وليس فقط على الأرضيات والجدران) ArFrame_hitTest، ابحث عن ArPoint في قائمة الإرجاع.
موضع إعلان فوري (AR_TRACKABLE_INSTANT_PLACEMENT_POINT) يتم استخدام مساحة الشاشة لوضع المحتوى. في البداية، يتم استخدام تقدير العمق الذي يوفره التطبيق. تعمل هذه الميزة بشكل فوري، ولكن الوضعية والعمق الفعلي سيتغيّران بعد أن يتمكّن ARCore من تحديد هندسة المشهد الفعلي. +Y يشير للأعلى، عكس الجاذبية وضع جسم على سطح مستوٍ (أرضية أو جدار) باستخدام الأبعاد الهندسية الكاملة للطائرة في المكان الذي يشكّل فيه وضعًا سريعًا للتركيب، ويمكن أن تتحمّل التجربة عمقًا ومقياسًا غير معروفَين في البداية ArFrame_hitTestInstantPlacement

إجراء اختبار نتيجة عادي

يمكنك الاتصال بالرقم ArFrame_hitTest لإجراء اختبار نتيجة.

ArHitResultList* hit_result_list = NULL;
ArHitResultList_create(ar_session, &hit_result_list);
CHECK(hit_result_list);
if (is_instant_placement_enabled) {
  ArFrame_hitTestInstantPlacement(ar_session, ar_frame, x, y,
                                  k_approximate_distance_meters,
                                  hit_result_list);
} else {
  ArFrame_hitTest(ar_session, ar_frame, x, y, hit_result_list);
}

تصفية نتائج النتائج حسب النوع الذي تهتم به. على سبيل المثال، إذا كنت تريد التركيز على ArPlane:

int32_t hit_result_list_size = 0;
ArHitResultList_getSize(ar_session, hit_result_list, &hit_result_list_size);

// Returned hit-test results are sorted by increasing distance from the camera
// or virtual ray's origin. The first hit result is often the most relevant
// when responding to user input.
ArHitResult* ar_hit_result = NULL;
for (int32_t i = 0; i < hit_result_list_size; ++i) {
  ArHitResult* ar_hit = NULL;
  ArHitResult_create(ar_session, &ar_hit);
  ArHitResultList_getItem(ar_session, hit_result_list, i, ar_hit);

  if (ar_hit == NULL) {
    LOGE("No item was hit.");
    return;
  }

  ArTrackable* ar_trackable = NULL;
  ArHitResult_acquireTrackable(ar_session, ar_hit, &ar_trackable);
  ArTrackableType ar_trackable_type = AR_TRACKABLE_NOT_VALID;
  ArTrackable_getType(ar_session, ar_trackable, &ar_trackable_type);
  // Creates an anchor if a plane was hit.
  if (ar_trackable_type == AR_TRACKABLE_PLANE) {
    // Do something with this hit result. For example, create an anchor at
    // this point of interest.
    ArAnchor* anchor = NULL;
    ArHitResult_acquireNewAnchor(ar_session, ar_hit, &anchor);

    // TODO: Use this anchor in your AR experience.

    ArAnchor_release(anchor);
    ArHitResult_destroy(ar_hit);
    ArTrackable_release(ar_trackable);
    break;
  }
  ArHitResult_destroy(ar_hit);
  ArTrackable_release(ar_trackable);
}
ArHitResultList_destroy(hit_result_list);

إجراء اختبار نجاح باستخدام شعاع واتجاه عشوائيين

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

إرفاق رابط ثابت بنتيجة النتيجة

بعد الحصول على نتيجة نتيجة، يمكنك استخدام وضعية الصورة كإدخال من أجل وضع محتوى الواقع المعزّز في المشهد. استخدِم ArHitResult_acquireNewAnchor لإنشاء علامة ارتساء جديدة في موقع النتيجة.

الخطوات التالية

  • يمكنك الاطّلاع على نموذج تطبيق hello_ar_c على GitHub.