إجراء اختبارات النتائج في تطبيق 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.