Thực hiện các phép kiểm thử nhấn trong ứng dụng Android NDK

Thực hiện hit-test để xác định vị trí chính xác của đối tượng 3D trong cảnh của bạn. Vị trí chính xác giúp đảm bảo nội dung thực tế tăng cường được hiển thị ở kích thước thích hợp (cao nhất).

Loại kết quả lượt truy cập

Thử nghiệm lượt truy cập có thể mang lại bốn loại kết quả lượt truy cập khác nhau, như được trình bày trong bảng sau.

Loại kết quả lượt truy cập Nội dung mô tả Hướng Trường hợp sử dụng Lệnh gọi phương thức
Chiều sâu (AR_TRACKABLE_DEPTH_POINT) Sử dụng thông tin chiều sâu từ toàn bộ cảnh để xác định độ sâu và hướng chính xác của một điểm Vuông góc với bề mặt 3D Đặt một vật thể ảo trên một bề mặt tuỳ ý (không chỉ trên sàn và tường) Bạn phải bật ArDepthMode thì mã này mới hoạt động.

ArFrame_hitTest, kiểm tra ArDepthPoint trong danh sách trả về
Máy bay (AR_TRACKABLE_PLANE) Nhấn vào bề mặt ngang và/hoặc dọc để xác định độ sâu và hướng chính xác của một điểm Vuông góc với bề mặt 3D Đặt một vật thể trên mặt phẳng (sàn hoặc tường) bằng cách sử dụng toàn bộ hình học của mặt phẳng. Cần sửa tỷ lệ ngay lập tức. Dự phòng cho kỹ thuật kiểm tra độ sâu ArFrame_hitTest, kiểm tra để tìm ArPlane trong danh sách trả về
Điểm tính năng (AR_TRACKABLE_POINT) Dựa vào các đặc điểm hình ảnh xung quanh điểm người dùng nhấn để xác định vị trí và hướng chính xác của một điểm Vuông góc với bề mặt 3D Đặt một vật thể trên một bề mặt tuỳ ý (không chỉ trên sàn nhà và tường) ArFrame_hitTest, kiểm tra để tìm ArPoint trong danh sách trả về
Vị trí tức thì (AR_TRACKABLE_INSTANT_PLACEMENT_POINT) Sử dụng không gian màn hình để đặt nội dung. Ban đầu sử dụng độ sâu ước tính do ứng dụng cung cấp. Hoạt động tức thì, nhưng tư thế và chiều sâu thực tế sẽ thay đổi sau khi ARCore có thể xác định hình dạng cảnh thực tế +Y hướng lên trên, ngược với trọng lực Đặt một vật thể trên mặt phẳng (sàn hoặc tường) bằng cách sử dụng toàn bộ hình dạng của máy bay, mà ở đó vị trí nhanh là rất quan trọng, và trải nghiệm có thể chịu được độ sâu và tỷ lệ ban đầu không xác định ArFrame_hitTestInstantPlacement

Thực hiện thử nghiệm nhấn chuẩn

Gọi ArFrame_hitTest để thực hiện kiểm tra lượt truy cập.

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);
}

Lọc kết quả lượt truy cập dựa trên loại mà bạn quan tâm. Ví dụ: nếu bạn muốn tập trung vào các 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);

Thực hiện thử nghiệm nhấn bằng cách sử dụng một tia và hướng tuỳ ý

Kiểm thử lượt truy cập thường được xem là tia từ máy ảnh của thiết bị hoặc thiết bị. Tuy nhiên, bạn có thể dùng ArFrame_hitTestRay để kiểm thử lượt truy cập bằng cách sử dụng một tia tuỳ ý trong toạ độ không gian thế giới thay vì điểm không gian màn hình.

Đính kèm một Neo vào HitResult

Sau khi có một kết quả nổi bật, bạn có thể sử dụng tư thế của thành phần đó làm đầu vào để đặt nội dung thực tế tăng cường vào cảnh của bạn. Sử dụng ArHitResult_acquireNewAnchor để tạo một Neo mới tại vị trí lần truy cập.

Bước tiếp theo