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

Thực hiện lần kiểm tra nhấn để xác định vị trí chính xác của đối tượng 3D trong cảnh của bạn. Vị trí đúng sẽ đảm bảo nội dung AR hiển thị ở kích thước (rõ ràng) thích hợp.

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 thể hiện trong bảng sau.

Loại kết quả lượt truy cập 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 về chiều sâu từ toàn bộ cảnh để xác định chiều 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 đối tượng ả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ì chế độ này mới hoạt động.

ArFrame_hitTest, kiểm tra các ArDepthPoint trong danh sách trả về
Máy bay (AR_TRACKABLE_PLANE) Chạm vào các bề mặt nằm ngang và/hoặc dọc để xác định chiều 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ể lên một 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áy bay đó. Cần tỷ lệ chính xác ngay lập tức. Dự phòng cho kiểm tra lượt truy cập theo chiều sâu ArFrame_hitTest, kiểm tra các 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 trực quan 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 đối tượng trên một bề mặt tuỳ ý (không chỉ trên sàn và tường) ArFrame_hitTest, kiểm tra các 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 học cảnh thực +Y hướng lên, trái với trọng lực Đặt một vật thể lên một mặt phẳng (sàn hoặc tường) bằng cách sử dụng hình học đầy đủ của máy bay, trong đó vị trí nhanh là rất quan trọng và trải nghiệm này có thể chịu được độ sâu và quy mô ban đầu chưa biết ArFrame_hitTestInstantPlacement

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

Gọi ArFrame_hitTest để kiểm thử 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 bạn quan tâm. Ví dụ: nếu bạn muốn tập trung vào 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);

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

Kiểm thử nhấn thường được coi là các tia từ máy ảnh của thiết bị, nhưng bạn có thể sử dụng ArFrame_hitTestRay để thực hiện kiểm thử nhấn 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 trên màn hình.

Đính kèm một liên kết neo vào HitResult

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

Bước tiếp theo