Xây dựng một ứng dụng Android thực tế mở rộng với Google ARCore

Tác Giả: Laura McKinney
Ngày Sáng TạO: 7 Lang L: none (month-011) 2021
CậP NhậT Ngày Tháng: 1 Tháng BảY 2024
Anonim
Xây dựng một ứng dụng Android thực tế mở rộng với Google ARCore - ỨNg DụNg
Xây dựng một ứng dụng Android thực tế mở rộng với Google ARCore - ỨNg DụNg

NộI Dung


Nhập mô hình 3D, với plugin Sceneform

Thông thường, làm việc với các mô hình 3D đòi hỏi kiến ​​thức chuyên môn, nhưng với việc phát hành plugin Sceneform, Google đã cho phép kết xuất các mô hình 3D bằng Java - và không có phải học OpenGL.

Plugin Sceneform cung cấp API cấp cao mà bạn có thể sử dụng để tạo Renderdables từ các vật dụng, hình dạng hoặc vật liệu Android tiêu chuẩn hoặc từ các tài sản 3D, chẳng hạn như các tệp .OBJ hoặc .BX.

Trong dự án của chúng tôi, chúng tôi sẽ sử dụng plugin Sceneform để nhập tệp .OBJ vào Android Studio. Bất cứ khi nào bạn nhập tệp bằng Sceneform, plugin này sẽ tự động:

  • Chuyển đổi tệp tài sản thành tệp .sfb. Đây là định dạng nhị phân Sceneform được tối ưu hóa cho thời gian chạy (.sfb) được thêm vào APK của bạn và sau đó được tải khi chạy. Chúng tôi sẽ sử dụng tệp .sfb này để tạo Kết xuất, bao gồm các mắt lưới, vật liệu và kết cấu, và có thể được đặt ở bất cứ đâu trong cảnh tăng cường.
  • Tạo tập tin .sfa. Đây là tệp mô tả tài sản, là tệp văn bản chứa mô tả có thể đọc được của con người đối với tệp .sfb. Tùy thuộc vào kiểu máy, bạn có thể thay đổi giao diện bằng cách chỉnh sửa văn bản bên trong tệp .sfa.


Chỉ cần lưu ý rằng tại thời điểm viết, plugin Sceneform vẫn đang trong giai đoạn thử nghiệm, do đó bạn có thể gặp phải lỗi, lỗi hoặc hành vi lạ khác khi sử dụng plugin này.

Cài đặt plugin Sceneform

Plugin Sceneform yêu cầu Android Studio 3.1 trở lên. Nếu bạn không chắc chắn về phiên bản Android Studio nào mà bạn đang sử dụng, hãy chọn ra Android Studio Studio> Giới thiệu về Android Studio, từ thanh công cụ. Cửa sổ bật lên tiếp theo chứa một số thông tin cơ bản về cài đặt Android Studio của bạn, bao gồm số phiên bản của nó.

Để cài đặt plugin Sceneform:

  • Nếu bạn sử dụng Mac trên Mac, hãy chọn Tải xuống Android Studio> Tùy chọn Bố trí từ thanh công cụ của Android Studio, sau đó chọn Chèn Plugins từ menu bên trái. Nếu bạn có thể cài đặt trên PC Windows, sau đó chọn Tệp File> Cài đặt> Trình cắm> Duyệt qua kho lưu trữ.
  • Tìm kiếm Công cụ tìm kiếm cảnh trong bối cảnh. Khi Khi Google Công cụ tạo khung cảnh xuất hiện, hãy chọn Cài đặt.
  • Khởi động lại Android Studio khi được nhắc và plugin của bạn sẽ sẵn sàng để sử dụng.


Sceneform UX và Java 8: Cập nhật các phụ thuộc dự án của bạn

Hãy bắt đầu bằng cách thêm các phụ thuộc mà chúng tôi sẽ sử dụng trong suốt dự án này. Mở tệp build.gradle cấp mô-đun của bạn và thêm thư viện UX của Sceneform, chứa ArFragment mà chúng tôi sẽ sử dụng trong bố cục của chúng tôi:

phụ thuộc {tệp thực hiệnTree (dir: libs, bao gồm :) triển khai androidx.appcompat: appcompat: 1.0.2 thực hiện androidx.constraintlayout: ràng buộc: 1.1.3 testImcellenceation Junit: junit: 4.12 androidTestImcellenceation androidx.test.ext: androidTestImcellenceation android.support:appcompat-v7:28.0.0 "}

Sceneform sử dụng các cấu trúc ngôn ngữ từ Java 8, do đó, chúng tôi cũng sẽ cần cập nhật Dự án Tương thích nguồn và Tương thích mục tiêu của chúng tôi với Java 8:

compileOptions {sourceCompabilities JavaVersion.VERSION_1_8 targetCompabilities JavaVersion.VERSION_1_8}

Cuối cùng, chúng ta cần áp dụng plugin Sceneform:

áp dụng plugin: com.google.ar.sceneform.plugin

Tệp build.gradle đã hoàn thành của bạn sẽ trông giống như thế này:

áp dụng plugin: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.arcoredemo," " JavaVersion.VERSION_1_8} buildTypes {phát hành {minifyEnables false proguardFiles getDefaultProguardFile (proguard-android-tối ưu.txt), proguard-rules.pro}}} .2 triển khai androidx.constraintlayout: ràng buộc: 1.1.3 testImcellenceation Junit: junit: 4.12 androidTestImcellenceation androidx.test.ext: junit: 1.1.0 androidTestImcellenceation androidx.test.espresso: espresso-core: 3.1.1. ar.sceneform.ux: perspectiveeform-ux: 1.7.0 "hiện thực" com.android.support:appcompat-v7:28.0.0 "} áp dụng plugin: com.google.ar .sceneform.plugin

Yêu cầu quyền với ArFragment

Ứng dụng của chúng tôi sẽ sử dụng camera của thiết bị để phân tích môi trường xung quanh và định vị các mô hình 3D trong thế giới thực. Trước khi ứng dụng của chúng tôi có thể truy cập vào camera, nó cần có sự cho phép của camera, vì vậy hãy mở dự án của bạn Manifest và thêm vào như sau:

Android 6.0 cung cấp cho người dùng khả năng cấp, từ chối và thu hồi quyền trên cơ sở cấp phép. Trong khi điều này cải thiện trải nghiệm người dùng, các nhà phát triển Android hiện phải yêu cầu quyền theo cách thủ công khi chạy và xử lý phản hồi của người dùng. Tin vui là khi Google ARCore hoạt động, quy trình yêu cầu sự cho phép của máy ảnh và xử lý phản hồi của người dùng được thực hiện tự động.

Thành phần ArFragment tự động kiểm tra xem ứng dụng của bạn có được phép sử dụng máy ảnh hay không và sau đó yêu cầu nó, nếu được yêu cầu, trước khi tạo phiên AR. Vì chúng tôi sẽ sử dụng ArFragment trong ứng dụng của mình, chúng tôi không cần viết bất kỳ mã nào để yêu cầu sự cho phép của máy ảnh.

AR Bắt buộc hay không bắt buộc?

Có hai loại ứng dụng sử dụng chức năng AR:

1. Yêu cầu AR

Nếu ứng dụng của bạn dựa trên Google ARCore để mang lại trải nghiệm tốt cho người dùng, thì bạn cần đảm bảo nó chỉ được tải xuống các thiết bị hỗ trợ ARCore. Nếu bạn đánh dấu ứng dụng của mình là Nhật Bản AR AR Yêu cầu thì nó sẽ chỉ xuất hiện trong cửa hàng Google Play, nếu thiết bị hỗ trợ ARCore.

Kể từ khi ứng dụng của chúng tôi làm yêu cầu ARCore, mở Manifest và thêm vào như sau:

Có một cơ hội là ứng dụng của bạn có thể được tải xuống một thiết bị hỗ trợ ARCore trên lý thuyết, nhưng thực tế thì không có cài đặt ARCore. Khi chúng tôi đánh dấu ứng dụng của mình là Bắt buộc phải có AR, Google Google sẽ tự động tải xuống và cài đặt ARCore cùng với ứng dụng của bạn, nếu ứng dụng này không có mặt trên thiết bị đích.

Chỉ cần lưu ý rằng ngay cả khi ứng dụng của bạn là Android: bắt buộc = Sự thật, bạn có thể vẫn cần kiểm tra xem ARCore có hiện diện trong thời gian chạy hay không, vì có khả năng người dùng có thể đã gỡ cài đặt ARCore kể từ khi tải xuống ứng dụng của bạn hoặc phiên bản ARCore của họ đã hết hạn.

Tin vui là chúng tôi đã sử dụng ArFragment, tự động kiểm tra ARCore đã được cài đặt và cập nhật trước khi tạo mỗi Phiên AR - vì vậy một lần nữa, đây là điều chúng tôi không thể thực hiện bằng tay.

2. AR Tùy chọn

Nếu ứng dụng của bạn bao gồm các tính năng AR rất hay nhưng không cần thiết để cung cấp chức năng cốt lõi của nó, thì bạn có thể đánh dấu ứng dụng này là Tùy chọn AR AR. Ứng dụng của bạn có thể kiểm tra xem Google ARCore có hiện diện trong thời gian chạy hay không và tắt nó Tính năng AR trên các thiết bị không hỗ trợ ARCore.

Nếu bạn tạo một ứng dụng tùy chọn của AR AR, thì ARCore sẽ không phải được tự động cài đặt cùng với ứng dụng của bạn, ngay cả khi thiết bị có tất cả phần cứng và phần mềm cần thiết để hỗ trợ ARCore. Sau đó, ứng dụng Tùy chọn AR của bạn sẽ cần kiểm tra xem ARCore có hiện diện và cập nhật hay không, và tải xuống phiên bản mới nhất theo yêu cầu.

Nếu ARCore không quan trọng đối với ứng dụng của bạn, thì bạn có thể thêm phần sau vào Bản kê khai của mình:

Trong khi tôi mở Manifest, tôi cũng thêm Android: configChanges và android: screenOrientation, để đảm bảo MainActivity xử lý các thay đổi định hướng một cách duyên dáng.

Sau khi thêm tất cả vào Bản kê khai của bạn, tệp đã hoàn thành sẽ trông giống như thế này:

Thêm ArFragment vào bố cục của bạn

I triệt sẽ được sử dụng ARCore khuyết ArFragment, vì nó tự động xử lý một số nhiệm vụ ARCore chính khi bắt đầu mỗi phiên AR. Đáng chú ý nhất, ArFragment kiểm tra xem phiên bản ARCore tương thích đã được cài đặt trên thiết bị chưa và ứng dụng hiện có quyền của máy ảnh hay không.

Khi ArFragment đã xác minh rằng thiết bị có thể hỗ trợ các tính năng ứng dụng AR AR của bạn, nó sẽ tạo ra phiên ArSceneView ARCore và trải nghiệm ứng dụng AR AR của bạn đã sẵn sàng!

Bạn có thể thêm đoạn ArFragment vào tệp bố cục, giống như mảnh Android thông thường, vì vậy hãy mở tệp Activity_main.xml của bạn và thêm thành phần com com.ar.sceneform.ux.ArFragment.

Tải xuống các mô hình 3D, sử dụng Google 100 Poly

Có một số cách khác nhau mà bạn có thể tạo Kết xuất, nhưng trong bài viết này, chúng tôi sẽ sử dụng tệp tài sản 3D.

Sceneform hỗ trợ các tài sản 3D ở các định dạng .OBJ, .glTF và .BX, có hoặc không có hình động. Có rất nhiều nơi bạn có thể có được các mô hình 3D ở một trong các định dạng được hỗ trợ này, nhưng trong hướng dẫn này, tôi sẽ sử dụng tệp .OBJ, được tải xuống từ kho lưu trữ của Google.

Truy cập trang web Poly và tải xuống tài sản mà bạn muốn sử dụng, ở định dạng .OBJ (Iápm sử dụng mô hình T-Rex này).

  • Giải nén thư mục chứa tệp tài sản nguồn mô hình của bạn (.OBJ, .BX hoặc .glTF). Tùy thuộc vào kiểu máy, thư mục này cũng có thể chứa một số phụ thuộc mô hình, chẳng hạn như các tệp ở định dạng .mtl, .bin, .png hoặc .jpeg.

Nhập mô hình 3D vào Android Studio

Khi bạn đã có tài sản của mình, bạn cần nhập nó vào Android Studio bằng cách sử dụng plugin Sceneform. Đây là một quá trình gồm nhiều bước đòi hỏi bạn phải:

  • Tạo một thư mục lấy mẫu của người mẫu. Samplingata là một loại thư mục mới cho dữ liệu mẫu thời gian thiết kế đã giành được lồng vào APK của bạn, nhưng sẽ có sẵn trong trình chỉnh sửa Android Studio.
  • Kéo và thả tệp tài sản .OBJ ban đầu vào thư mục Lấy mẫu của bạn.
  • Thực hiện nhập và chuyển đổi Sceneform trên tệp .OBJ, tệp này sẽ tạo các tệp .sfa và .sfb.

Mặc dù có vẻ đơn giản hơn, don lồng kéo và thả tệp .OBJ trực tiếp vào thư mục dự án của bạn trong phiên bản, vì điều này sẽ khiến mô hình được đưa vào APK của bạn một cách không cần thiết.

Theo mặc định, các dự án Android Studio không chứa một thư mục lấy mẫu của Google, do đó, bạn sẽ cần phải tạo một thư mục thủ công:

  • Control-click vào thư mục ứng dụng của bạn trong ứng dụng.
  • Chọn New New> Thư mục dữ liệu mẫu Sắp xếp và tạo một thư mục có tên là sam samataata.
  • Điều hướng đến các tệp mô hình 3D mà bạn đã tải xuống trước đó. Tìm tệp tài sản nguồn (.OBJ, .BX hoặc .glTF) và sau đó kéo và thả tệp đó vào thư mục Lấy mẫu của mẫu.
  • Kiểm tra xem mô hình của bạn có bất kỳ phụ thuộc nào không (chẳng hạn như các tệp ở định dạng .mtl, .bin, .png hoặc .jpeg). Nếu bạn tìm thấy bất kỳ tệp nào trong số này, thì hãy kéo và thả chúng vào thư mục Lấy mẫu của Google.
  • Trong Android Studio, Control-click vào tệp nguồn mô hình 3D của bạn (.OBJ, .BX hoặc .glTF) và sau đó chọn Tài sản nhập cảnh định dạng.

  • Cửa sổ tiếp theo hiển thị một số thông tin về các tệp mà Sceneform sẽ tạo, bao gồm cả tệp .sfa kết quả sẽ được lưu trữ trong dự án của bạn; Tôi sẽ sử dụng thư mục thô thô.
  • Khi bạn vui vẻ với thông tin bạn đã nhập, hãy nhấp vào Kết thúc.

Việc nhập này làm cho một vài thay đổi cho dự án của bạn. Nếu bạn mở tệp build.gradle của mình, thì bạn sẽ thấy rằng plugin Sceneform đã được thêm vào dưới dạng phụ thuộc dự án:

phụ thuộc {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform: plugin: 1.7.0 // LƯU Ý: Không đặt phụ thuộc ứng dụng của bạn vào đây; chúng thuộc // trong các tệp build.gradle mô-đun riêng lẻ}}

Mở tệp build.gradle ở cấp độ mô-đun của bạn và bạn sẽ tìm thấy mục nhập perspectiveeform.asset () mới cho mô hình 3D đã nhập của mình:

áp dụng plugin: com.google.ar.sceneform.plugin // Đường dẫn tài sản mã nguồn mà bạn đã chỉ định trong quá trình nhập // perspectiveeform.asset (samplingata / dinosaur.obj, // Đường dẫn vật liệu của bạn được chỉ định trong quá trình nhập // Mặc định , // Đường dẫn đầu ra của .sfa. Bạn đã chỉ định trong quá trình nhập // samplingata / dinosaur.sfa, // Đường dẫn đầu ra .sfb mà bạn đã chỉ định trong quá trình nhập // src / main / Tài sản / khủng long)

Nếu bạn xem qua các thư mục của bạn sam samataata và các dòng thô, thì bạn sẽ thấy rằng chúng chứa các tệp .sfa và .sfb mới, tương ứng.

Bạn có thể xem trước tệp .sfa, trong Trình xem kịch bản mới của Android Studio.

  • Chọn Chế độ xem> Công cụ Windows> Trình xem trực tiếp từ thanh menu của Android Studio.
  • Trong menu bên trái, chọn tệp .sfa của bạn. Mô hình 3D của bạn sẽ xuất hiện trong cửa sổ Trình xem.

Hiển thị mô hình 3D của bạn

Nhiệm vụ tiếp theo của chúng tôi là tạo ra một phiên AR để hiểu môi trường xung quanh và cho phép người dùng đặt các mô hình 3D trong một cảnh tăng cường.

Điều này đòi hỏi chúng ta phải làm như sau:

1. Tạo biến thành viên ArFragment

ArFragment thực hiện phần lớn công việc nặng nề liên quan đến việc tạo ra một phiên AR, vì vậy chúng tôi sẽ tham khảo đoạn này trong suốt lớp MainActivity của chúng tôi.

Trong đoạn mã sau, I hèm tạo một biến thành viên cho ArFragment và sau đó khởi tạo nó trong phương thức onCreate ():

tư nhân ArFragment arCoreFragment; @Override void void onCreate (Gói đã lưuInstanceState) {super.onCreate (yetInstanceState); ... ... ...} setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Tìm đoạn, sử dụng trình quản lý đoạn // getSupportFragmentManager (). findFragmentById (R.id.main_fragment);

2. Xây dựng ModelRenderable

Bây giờ chúng ta cần chuyển đổi tệp .sfb của mình thành ModelRenderable, cuối cùng sẽ hiển thị đối tượng 3D của chúng ta.

Ở đây, tôi đã tạo một ModelRenderable từ tệp dự án của tôi. Res res / raw / dinosaur:

tư nhân ModelRenderable dinoRenderable; ... ... ... ModelRenderable.builder () .setSource (this, R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = renderable) .exceptionally (throwable -> {Log.e ( TAG, "Không thể tải kết xuất được"); return null;}); }

3. Đáp ứng đầu vào của người dùng

ArFragment có tích hợp hỗ trợ cho các thao tác chạm, kéo, véo và vặn.

Trong ứng dụng của chúng tôi, người dùng sẽ thêm mô hình 3D vào Mặt phẳng ARCore, bằng cách chạm vào mặt phẳng đó.

Để cung cấp chức năng này, chúng tôi cần phải đăng ký một cuộc gọi lại mà sẽ được gọi bất cứ khi nào một mặt phẳng được gõ:

arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Mặt phẳng máy bay, MotionEvent motionEvent) -> {if (dinoRenderable == null) {return;}

4. Neo mô hình của bạn

Trong bước này, chúng tôi sẽ truy xuất ArSceneView và đính kèm nó vào AnchorNode, nút này sẽ đóng vai trò là nút cha Cảnh Cảnh.

ArSceneView chịu trách nhiệm thực hiện một số tác vụ ARCore quan trọng, bao gồm hiển thị hình ảnh camera của thiết bị và hiển thị hình động UX của Sceneform thể hiện cách người dùng nên giữ và di chuyển thiết bị của họ để bắt đầu trải nghiệm AR. ArSceneView cũng sẽ làm nổi bật bất kỳ mặt phẳng nào mà nó phát hiện, sẵn sàng cho người dùng đặt các mô hình 3D của họ trong khung cảnh.

Thành phần ARSceneView có Cảnh gắn liền với nó, là cấu trúc dữ liệu cha-con chứa tất cả các Nút cần được hiển thị.

Chúng tôi sẽ bắt đầu bằng cách tạo một nút kiểu AnchorNode, nút này sẽ đóng vai trò là nút cha ArSceneView của chúng tôi.

Tất cả các nút neo vẫn ở cùng một vị trí trong thế giới thực, do đó, bằng cách tạo một nút neo, chúng tôi đảm bảo rằng các mô hình 3D của chúng tôi sẽ được cố định tại chỗ trong cảnh tăng cường.

Hãy để cùng nhau tạo ra nút neo của chúng tôi:

AnchorNode anchorNode = new AnchorNode (neo);

Sau đó, chúng tôi có thể truy xuất ArSceneView, sử dụng getArSceneView () và đính kèm nó vào AnchorNode:

anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ());

5. Thêm hỗ trợ cho việc di chuyển, nhân rộng và xoay

Tiếp theo, tôi sẽ tạo một nút kiểu TransformableNode. TransformableNode chịu trách nhiệm di chuyển, chia tỷ lệ và xoay các nút, dựa trên cử chỉ của người dùng.

Khi bạn đã tạo một TransformableNode, bạn có thể đính kèm nó vào Renderable, nó sẽ cung cấp cho mô hình khả năng mở rộng và di chuyển, dựa trên sự tương tác của người dùng. Cuối cùng, bạn cần kết nối TransformableNode với AnchorNode, trong mối quan hệ cha-con đảm bảo TransformableNode Kết xuất vẫn cố định tại chỗ trong cảnh tăng cường.

TransformableNode TransformableNode = new TransformableNode (arCoreFragment.getTransaturesSystem ()); // Kết nối TransformableNode với anchorNode // TransformableNode.setParent (anchorNode); biến đổiNode.setRenderable (dinoRenderable); // Chọn nút // TransformableNode.select (); }); }

MainActivity đã hoàn thành

Sau khi thực hiện tất cả các thao tác trên, MainActivity của bạn sẽ trông giống như thế này:

nhập android.app.Activity; nhập android.app.ActivityManager; nhập androidx.appcompat.app.AppCompatActivity; nhập android.content.Context; nhập android.net.Uri; nhập android.os.Build; nhập android.os.Build.VERSION_CODES; nhập android.os.Bundle; nhập android.util.Log; nhập android.view.MotionEvent; nhập androidx.annotation.RequiresApi; nhập com.google.ar.core.Anchor; nhập com.google.ar.core.HitResult; nhập com.google.ar.core.Plane; nhập com.google.ar.sceneform.AnchorNode; nhập com.google.ar.sceneform.rendering.ModelRenderable; nhập com.google.ar.sceneform.ux.ArFragment; nhập com.google.ar.sceneform.ux.TransformableNode; lớp công khai MainActivity mở rộng AppCompatActivity {chuỗi ký tự tĩnh cuối cùng TAG = MainActivity. class.getSimpleName (); kết thúc tĩnh riêng tư MIN_OPENGL_VERSION = 3.0; // Tạo một biến thành viên cho ModelRenderable // private ModelRenderable dinoRenderable; // Tạo một biến thành viên cho ArFragment // private ArFragment arCoreFragment; @RequiresApi (api = VERSION_CODES.N) @Override void void onCreate (Bundle yetInstanceState) {super.onCreate (yetInstanceState); if (! checkDevice ((này))) {return; } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Tìm đoạn, sử dụng trình quản lý đoạn // getSupportFragmentManager (). findFragmentById (R.id.main_fragment); if (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// Xây dựng ModelRenderable // ModelRenderable.builder () .setSource (this, R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = render ) .exceptionally (// Nếu xảy ra lỗi ... // throwable -> {//... sau đó in phần sau sang Logcat // Log.e (TAG, "Không thể tải kết xuất được"); return null;} ); } // Nghe các sự kiện onTap // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Mặt phẳng máy bay, MotionEvent motionEvent) -> {if (dinoRenderable == null) {return;} Anchor anchor = hitResult.create nút loại AnchorNode // AnchorNode anchorNode = new AnchorNode (anchor); // Kết nối AnchorNode với Cảnh // anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ()); // Xây dựng một nút có kiểu TransformableNode TransformableNode TransformableNode = new TransformableNode (arCoreFragment.getTransaturesSystem ()); // Kết nối TransformableNode với AnchorNode // TransformableNode.setParent (anchorNode); // Đính kèm nút Renderable // TransformableNode.setR / TransformableNode.select ();}); } check bevean static staticDevice (hoạt động Hoạt động cuối cùng) {// Nếu thiết bị đang chạy Android Marshmallow hoặc trước đó ... // if (Build.VERSION.SDK_INT <VERSION_CODES.N) {// ... sau đó in phần sau Logcat // Log.e (TAG, "Sceneform yêu cầu Android N trở lên"); hoạt động.finish (); trả lại sai; } Chuỗi openGlVersionString = ((ActivityManager) Activity.getSystemService (Context.ACTIVITY_SERVICE)) .getDeviceConfigurationInfo () // Kiểm tra phiên bản OpenGL ES // .getGlEsVersion (); // Nếu thiết bị đang chạy bất cứ thứ gì nhỏ hơn OpenGL ES 3.0 ... // if (Double.parseDouble (openGlVersionString) <MIN_OPENGL_VERSION) {// ... sau đó in phần sau sang Logcat // Log.e (TAG, " Yêu cầu OpenGL ES 3.0 trở lên "); hoạt động.finish (); trả lại sai; } trả về đúng; }}

Bạn có thể tải về dự án đã hoàn thành từ GitHub.

Kiểm tra ứng dụng thực tế tăng cường Google ARCore của bạn

Giờ đây, bạn đã sẵn sàng thử nghiệm ứng dụng của mình trên thiết bị Android được hỗ trợ vật lý. Nếu bạn không sở hữu một thiết bị hỗ trợ ARCore, thì bạn có thể thử nghiệm ứng dụng AR của mình trong Trình giả lập Android (với một chút cấu hình bổ sung, mà chúng tôi sẽ trình bày trong phần tiếp theo).

Để kiểm tra dự án của bạn trên một vật lý Thiết bị Android:

  • Cài đặt ứng dụng của bạn trên thiết bị đích.
  • Khi được nhắc, hãy cấp quyền truy cập ứng dụng cho máy ảnh trên thiết bị của bạn.
  • Nếu được nhắc cài đặt hoặc cập nhật ứng dụng ARCore, hãy nhấn vào Tiếp tục và sau đó hoàn thành đoạn hội thoại để đảm bảo rằng bạn đang chạy phiên bản mới nhất và lớn nhất của ARCore.
  • Bây giờ bạn sẽ thấy chế độ xem camera, hoàn thành với hình ảnh động của một tay cầm thiết bị. Hướng máy ảnh vào một bề mặt phẳng và di chuyển thiết bị của bạn theo chuyển động tròn, như được minh họa bằng hình ảnh động. Sau một lát, một loạt các chấm sẽ xuất hiện, chỉ ra rằng một mặt phẳng đã được phát hiện.

  • Khi bạn hài lòng với vị trí của các chấm này, hãy chạm vào chúng - mô hình 3D của bạn sẽ xuất hiện trên mặt phẳng đã chọn của bạn!

  • Hãy thử di chuyển vật lý xung quanh mô hình; tùy thuộc vào môi trường xung quanh bạn, bạn có thể có thể thực hiện đầy đủ 360 độ xung quanh nó. Bạn cũng nên kiểm tra xem vật thể đó có đang tạo ra một cái bóng phù hợp với các nguồn sáng của thế giới thực hay không.

Kiểm tra ARCore trên thiết bị ảo Android

Để kiểm tra các ứng dụng ARCore của bạn trong Thiết bị ảo Android (AVD), bạn sẽ cần Trình giả lập Android phiên bản 27.2.9 trở lên. Bạn cũng phải đăng nhập vào cửa hàng Google Play trên AVD của mình và bật OpenGL ES 3.0 trở lên.

Để kiểm tra xem OpenGL ES 3.0 trở lên có được bật trên AVD của bạn không:

  • Khởi chạy AVD của bạn, như bình thường.
  • Mở cửa sổ Terminal mới (Mac) hoặc Dấu nhắc lệnh (Windows).
  • Thay đổi thư mục (đoạn cd cd) vì vậy Terminal / Command Prompt đang chỉ vào vị trí của chương trình Android SDK của bạn trong SDK SDK, ví dụ: lệnh của tôi trông như thế này:

Cd / Người dùng / jessicathornsby / Thư viện / Android / sdk / công cụ nền tảng

  • Nhấn phím Enter Enter Enter trên bàn phím của bạn.
  • Sao chép / dán lệnh tiếp theo vào Terminal, rồi nhấn phím Enter Enter Enter:

./adb logcat | grep eglMakeC hiện

Nếu Terminal trả về dịch vụ ver 3 0 hay cao hơn, thì OpenGL ES được cấu hình đúng. Nếu Terminal hoặc Command Prompt hiển thị bất cứ thứ gì sớm hơn 3.0, thì bạn sẽ cần phải bật OpenGL ES 3.0:

  • Chuyển về AVD của bạn.
  • Tìm dải nút Điều khiển mở rộng của Nhóm nổi trên các Trình mô phỏng Android, sau đó chọn Cài đặt của >>
  • Điều hướng đến cấp API API OpenGL ES> Trình kết xuất tối đa (tối đa OpenGL ES 3.1).
  • Khởi động lại trình giả lập.

Trong cửa sổ Terminal / Command Prompt, sao chép / dán lệnh sau và sau đó nhấn phím Enter Enter Enter key

./adb logcat | grep eglMakeC hiện

Bây giờ bạn sẽ nhận được kết quả của ver ver 0 0 hoặc cao hơn, có nghĩa là OpenGL ES được cấu hình đúng.

Cuối cùng, hãy đảm bảo AVD của bạn đang chạy phiên bản ARCore mới nhất:

  • Truy cập trang GoreHub của ARCore, và tải xuống bản phát hành ARCore mới nhất cho trình giả lập. Ví dụ: tại thời điểm viết bản phát hành gần đây nhất là ra ARC ARCore_1.7.0.x86_for_emulator.apkiến
  • Kéo và thả APK vào AVD đang chạy của bạn.

Để kiểm tra dự án của bạn trên AVD, hãy cài đặt ứng dụng của bạn và cấp cho nó quyền truy cập vào máy ảnh AVD, ngay khi được nhắc.

Bây giờ bạn sẽ thấy chế độ xem camera của phòng mô phỏng. Để kiểm tra ứng dụng của bạn, hãy di chuyển xung quanh không gian ảo này, tìm một bề mặt phẳng mô phỏng và nhấp để đặt mô hình trên bề mặt này.

Bạn có thể di chuyển máy ảnh ảo xung quanh phòng ảo, bằng cách nhấn và giữ các phím tùy chọn (tùy chọn macOS) hoặc nút Alt Alt (Linux hoặc Windows), sau đó sử dụng bất kỳ phím tắt nào sau đây:

  • Di chuyển sang trái hoặc phải. Nhấn A hoặc D.
  • Di chuyển xuống hoặc lên. Nhấn Q hoặc E.
  • Tiến lên hoặc lùi lại. Nhấn W hoặc S.

Bạn cũng có thể di chuyển trên phạm vi ảo xung quanh cảnh ảo, bằng cách nhấn vào Tùy chọn cải tiến hoặc Xóa Alt, và sau đó sử dụng chuột của bạn. Điều này có thể cảm thấy một chút lộn xộn lúc đầu, nhưng với thực tế, bạn sẽ có thể khám phá thành công không gian ảo. Khi bạn tìm thấy một mặt phẳng mô phỏng, nhấp vào các chấm trắng để đặt mô hình 3D của bạn trên bề mặt này.

Gói lại

Trong bài viết này, chúng tôi đã tạo ra một ứng dụng thực tế tăng cường đơn giản, sử dụng ARCore và plugin Sceneform.

Nếu bạn quyết định sử dụng Google ARCore trong các dự án của riêng bạn, thì hãy chắc chắn chia sẻ sáng tạo của bạn trong các bình luận bên dưới!

Đội trênNhà phát triển XDA đã dành một chút thời gian để xem qua mã có trong phần mềm mới nhất của điện thoại thông minh amung hiện có, như amung Gala...

Ốp lưng Samsung Galaxy S10 tốt nhất

Monica Porter

Tháng BảY 2024

amung Galaxy 10 cung cấp một nền tảng hoàn hảo giữa Galaxy 10e tương đối phải chăng và Galaxy 10 Plu ấn tượng hơn, nhưng giá cả. Tất nhiên, Galaxy 10 vẫn là một chiếc flaghip ...

ẤN PhẩM Thú Vị