Phát hiện mặt phẳng bằng ARCore cho Jetpack XR

ARCore cho Jetpack XR có thể phát hiện các bề mặt phẳng trong môi trường của người dùng và cung cấp thông tin về các bề mặt đó, chẳng hạn như tư thế, kích thước và hướng. Điều này có thể giúp ứng dụng của bạn tìm thấy các bề mặt như bàn để đặt đối tượng.

Tạo phiên ARCore cho Jetpack XR

Truy cập thông tin về mặt phẳng thông qua phiên ARCore cho Jetpack XR. Hãy xem phần Tìm hiểu vòng đời của Phiên để lấy Session.

Định cấu hình phiên

Theo mặc định, tính năng phát hiện mặt phẳng không được bật trên các phiên XR. Để bật tính năng theo dõi mặt phẳng, hãy định cấu hình phiên:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HorizontalAndVertical,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

Truy xuất trạng thái của các mặt phẳng được nhận biết

ARCore cho Jetpack XR cung cấp trạng thái của các mặt phẳng thông qua một StateFlow phát ra trạng thái của các mặt phẳng. Việc đăng ký các chuyến bay trong một phiên sẽ thông báo cho ứng dụng của bạn khi các chuyến bay được thêm, cập nhật hoặc xoá.

Plane.subscribe(session).collect { planes ->
    // Planes have changed; update plane rendering
}

Một mặt phẳng có các thuộc tính sau:

  • label: nội dung mô tả ngữ nghĩa của một Plane nhất định. Có thể là Wall, Floor, Ceiling hoặc Table.
  • centerPose: Tư thế của tâm mặt phẳng được phát hiện.
  • extents: Kích thước của mặt phẳng được phát hiện, tính bằng mét.
  • vertices: Danh sách các đỉnh của một đa giác lồi gần đúng với mặt phẳng.

Thực hiện kiểm thử va chạm với mặt phẳng

Kiểm thử va chạm là một phương thức tính toán giao điểm của một tia với các đối tượng mà phiên theo dõi. Một ứng dụng phổ biến của kiểm thử nhấn là trỏ vào một bảng và đặt một đối tượng tại vị trí đó. Việc kiểm thử lượt nhấn sẽ dẫn đến một danh sách các đối tượng nhấn. Nói cách khác, quy trình kiểm thử lượt nhấn không dừng lại ở lượt nhấn đối tượng đầu tiên. Tuy nhiên, thường thì bạn chỉ quan tâm đến lượt nhấn vào đối tượng đầu tiên của một loại nhất định.

Để thực hiện kiểm thử nhấn, hãy sử dụng Interaction.hitTest() với Ray:

val results = androidx.xr.arcore.hitTest(session, ray)
// When interested in the first Table hit:
val tableHit = results.firstOrNull {
    val trackable = it.trackable
    trackable is Plane && trackable.state.value.label == Plane.Label.Table
}