Wykonaj test trafień, by określić poprawne położenie obiektu 3D w scenie. Odpowiednie umiejscowienie pozwala zapewnić, że treści AR będą renderowane w odpowiednim (widocznym) rozmiarze.
Typy wyników działań
Test działań może zwrócić wyniki 4 różnych typów działań, które przedstawiliśmy w tabeli poniżej.
Typ wyniku działania | Opis | Orientacja | Przypadek użycia | Wywołania metod |
---|---|---|---|---|
Głębokość (AR_TRACKABLE_DEPTH_POINT ) |
Wykorzystuje informacje o głębi z całej sceny, aby określić prawidłową głębokość i orientację punktu | Prostopadła do powierzchni 3D | umieszczać wirtualny obiekt na dowolnej powierzchni (nie tylko na podłodze i ścianach); |
Aby to było możliwe, musisz włączyć ArDepthMode .ArFrame_hitTest , sprawdź, czy na liście zwrotnej znajdują się ArDepthPoint
|
Samolot (AR_TRACKABLE_PLANE ) |
Uderzenie powierzchni poziomej i/lub pionowej w celu określenia prawidłowej głębokości i orientacji punktu | Prostopadła do powierzchni 3D | Umieść obiekt na płaszczyźnie (podłodze lub na ścianie), wykorzystując pełną geometrię płaszczyzny. Natychmiastowa poprawna waga. Postaw na testy Depth |
ArFrame_hitTest , sprawdź na liście zwrotów ArPlane
|
Punkt cechy (AR_TRACKABLE_POINT ) |
Działanie zależy od elementów wizualnych wokół punktu dotknięcia użytkownika w celu określenia jego prawidłowej pozycji i orientacji. | Prostopadła do powierzchni 3D | Umieść obiekt na dowolnej powierzchni (nie tylko na podłodze i ścianach). |
ArFrame_hitTest , sprawdź na liście zwrotów ArPoint
|
Szybkie miejsce docelowe (AR_TRACKABLE_INSTANT_PLACEMENT_POINT ) |
Do umieszczania treści wykorzystuje miejsce na ekranie. Początkowo używa szacowanej głębokości podanej przez aplikację. Działa od razu, ale położenie i głębokość ulegną zmianie, gdy ARCore ustali rzeczywistą geometrię sceny | +Y skierowany w górę, przeciwny do grawitacji | Umieść obiekt na płaszczyźnie (podłodze lub na ścianie), wykorzystując pełną geometrię samolotu, gdzie szybkie rozmieszczenie ma kluczowe znaczenie, a doświadczenie może tolerować nieznaną początkową głębokość i skalę. |
ArFrame_hitTestInstantPlacement
|
Wykonanie standardowego testu trafień
Wywołaj ArFrame_hitTest
, aby wykonać test trafień.
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); }
Filtruj wyniki działań według typu, który Cię interesuje. Jeśli na przykład chcesz skupić się na 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);
Przeprowadź test trafień przy użyciu dowolnego promienia i kierunku
Testy trafień są zwykle traktowane jako promienie pochodzące z urządzenia lub aparatu urządzenia, ale możesz przeprowadzić test z użyciem ArFrame_hitTestRay
z wykorzystaniem dowolnego promienia we współrzędnych przestrzeni świata zamiast punktu w przestrzeni ekranu.
Dołącz kotwicę do HitResult
Po uzyskaniu wyniku działania możesz wykorzystać jego położenie jako dane wejściowe, aby umieścić treści AR w swojej scenie. Użyj narzędzia ArHitResult_acquireNewAnchor
, aby utworzyć nową kotwicę w lokalizacji działania.
Co dalej?
- Sprawdź przykładową aplikację
hello_ar_c
na GitHubie.