تست‌های آماری را در برنامه Android NDK خود انجام دهید

برای تعیین قرارگیری صحیح یک شی 3 بعدی در صحنه خود یک تست ضربه انجام دهید. قرارگیری صحیح تضمین می کند که محتوای AR در اندازه مناسب (ظاهری) ارائه می شود.

انواع نتیجه را بزنید

همانطور که در جدول زیر نشان داده شده است، یک تست ضربه می تواند چهار نوع مختلف از نتایج ضربه را به دست دهد.

نوع نتیجه را بزنید شرح گرایش مورد استفاده فراخوانی روش
عمق ( AR_TRACKABLE_DEPTH_POINT ) از اطلاعات عمق کل صحنه برای تعیین عمق و جهت صحیح یک نقطه استفاده می کند عمود بر سطح سه بعدی یک شی مجازی را روی یک سطح دلخواه (نه فقط روی زمین و دیوار) قرار دهید. برای این کار باید ArDepthMode فعال باشد.

ArFrame_hitTest ، ArDepthPoint در لیست برگشتی بررسی کنید
هواپیما ( AR_TRACKABLE_PLANE ) برای تعیین عمق و جهت صحیح نقطه، به سطوح افقی و/یا عمودی برخورد می کند عمود بر سطح سه بعدی یک شی را با استفاده از هندسه کامل هواپیما روی یک صفحه (کف یا دیوار) قرار دهید. فوراً به مقیاس صحیح نیاز دارید. جایگزینی برای آزمون ضربه عمق ArFrame_hitTest ، ArPlane s را در لیست برگشت بررسی کنید
نقطه ویژگی ( 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 برای انجام تست ضربه با استفاده از یک پرتو دلخواه در مختصات فضای جهان به جای نقطه فضای صفحه استفاده کنید.

یک Anchor را به HitResult وصل کنید

هنگامی که یک نتیجه موفق به دست آوردید، می توانید از حالت آن به عنوان ورودی برای قرار دادن محتوای AR در صحنه خود استفاده کنید. از ArHitResult_acquireNewAnchor برای ایجاد یک Anchor جدید در محل ضربه استفاده کنید.

بعدش چی

  • برنامه نمونه hello_ar_c را در GitHub بررسی کنید.