สร้างแอป Android เสมือนจริงด้วย Google ARCore

ผู้เขียน: Laura McKinney
วันที่สร้าง: 7 เมษายน 2021
วันที่อัปเดต: 1 กรกฎาคม 2024
Anonim
Create an Augmented Reality App in Android |  App Development Tutorial | Android Studio
วิดีโอ: Create an Augmented Reality App in Android | App Development Tutorial | Android Studio

เนื้อหา


การนำเข้าโมเดล 3 มิติด้วยปลั๊กอิน Sceneform

โดยปกติแล้วการทำงานกับโมเดล 3 มิติจำเป็นต้องมีความรู้เฉพาะทาง แต่ด้วยการเปิดตัวปลั๊กอิน Sceneform ที่ Google ทำให้สามารถสร้างแบบจำลอง 3 มิติโดยใช้ Java - และ ไม่มี ต้องเรียนรู้ OpenGL

ปลั๊กอิน Sceneform จัดเตรียม API ระดับสูงที่คุณสามารถใช้เพื่อสร้าง Renderdables จากวิดเจ็ต Android รูปร่างหรือวัสดุหรือจากสินทรัพย์ 3 มิติเช่นไฟล์. OBJ หรือ. FBX

ในโครงการของเราเราจะใช้ปลั๊กอิน Sceneform เพื่อนำเข้าไฟล์. OBJ ลงใน Android Studio เมื่อใดก็ตามที่คุณนำเข้าไฟล์โดยใช้ Sceneform ปลั๊กอินนี้จะดำเนินการโดยอัตโนมัติ:

  • แปลงไฟล์สินทรัพย์เป็นไฟล์. sfb นี่คือรูปแบบซีนออริจินอลรูปแบบไบนารี (.sfb) ที่ได้รับการเพิ่มใน APK ของคุณจากนั้นโหลดตอนรันไทม์ เราจะใช้ไฟล์. sfb นี้เพื่อสร้าง Renderable ซึ่งประกอบด้วยตาข่ายวัสดุและพื้นผิวและสามารถวางไว้ที่ใดก็ได้ภายในฉากเสริม
  • สร้างไฟล์. sfa นี่คือไฟล์คำอธิบายเนื้อหาซึ่งเป็นไฟล์ข้อความที่มีคำอธิบายที่มนุษย์สามารถอ่านได้ของไฟล์. sfb คุณอาจสามารถเปลี่ยนลักษณะที่ปรากฏโดยแก้ไขข้อความภายในไฟล์. sfa ทั้งนี้ขึ้นอยู่กับรุ่น


เพิ่งทราบว่าในขณะเขียนปลั๊กอิน Sceneform ยังอยู่ในช่วงเบต้าดังนั้นคุณอาจพบข้อบกพร่องข้อผิดพลาดหรือพฤติกรรมแปลก ๆ เมื่อใช้งานปลั๊กอินนี้

การติดตั้งปลั๊กอิน Sceneform

ปลั๊กอิน Sceneform ต้องใช้ Android Studio 3.1 หรือสูงกว่า หากคุณไม่แน่ใจว่าคุณใช้ Android Studio เวอร์ชันใดให้เลือก“ Android Studio> เกี่ยวกับ Android Studio” จากแถบเครื่องมือ ป๊อปอัปที่ตามมามีข้อมูลพื้นฐานเกี่ยวกับการติดตั้ง Android Studio ของคุณรวมถึงหมายเลขรุ่น

วิธีติดตั้งปลั๊กอิน Sceneform:

  • หากคุณใช้ Mac ให้เลือก“ Android Studio> การตั้งค่า…” จากแถบเครื่องมือ Android Studio จากนั้นเลือก“ ปลั๊กอิน” จากเมนูด้านซ้าย หากคุณอยู่บนพีซี Windows ให้เลือก“ ไฟล์> การตั้งค่า> ปลั๊กอิน> เรียกดูที่เก็บ”
  • ค้นหา“ Sceneform” เมื่อ“ Google Sceneform Tools” ปรากฏขึ้นให้เลือก“ ติดตั้ง”
  • รีสตาร์ท Android Studio เมื่อได้รับแจ้งและปลั๊กอินของคุณจะพร้อมใช้งาน


Sceneform UX และ Java 8: การอัพเดตการพึ่งพาโครงการของคุณ

เริ่มต้นด้วยการเพิ่มการอ้างอิงที่เราจะใช้ในโครงการนี้ เปิดไฟล์ build.gradle ในระดับโมดูลและเพิ่มไลบรารี Sceneform UX ซึ่งมี ArFragment ที่เราจะใช้ในเลย์เอาต์ของเรา:

การพึ่งพา {การนำไปใช้งาน fileTree (dir: libs, รวมถึง) การนำไปใช้งาน androidx.appcompat: appcompat: 1.0.2 การนำไปใช้งาน androidx.constraintlayout: ข้อ จำกัด การปล่อย: 1.1.3 ทดสอบการใช้งานมิถุนายน: มิถุนายน: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1 // Sceneform UX ให้ทรัพยากร UX รวมถึง ArFragment // การใช้งาน "com.google.ar.sceneform.ux: sceneform-ux: 1.7.0" การนำไปใช้ "com android.support:appcompat-v7:28.0.0 "}

Sceneform ใช้โครงสร้างภาษาจาก Java 8 ดังนั้นเราจะต้องอัปเดตความเข้ากันได้ของแหล่งที่มาของโครงการและความเข้ากันได้ของเป้าหมายเป็น Java 8:

compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}

ท้ายที่สุดเราจำเป็นต้องใช้ปลั๊กอิน Scenform:

ใช้ปลั๊กอิน: com.google.ar.sceneform.plugin

ไฟล์ build.gradle ที่เสร็จสมบูรณ์ของคุณควรมีลักษณะดังนี้:

ใช้ปลั๊กอิน: com.android.application แอนดรอยด์ {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsbyComponentCorationsNarCorationsNarCondition_8.Components" minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner " JavaVersion.VERSION_1_8} buildTypes {release {minifyEnabled เท็จ proguardFiles getDefaultProguardFile (proguard-android-optimization.txt), proguard-rules.pro}} การพึ่งพา {การนำไฟล์มาใช้ (dir: libs รวม:) .2 การนำไปใช้ androidx.constraintlayout: constraintlayout: 1.1.3 ทดสอบการใช้งาน Junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1 การดำเนินการ "com.google. ar.sceneform.ux: sceneform-ux: 1.7.0 "การนำไปใช้งาน" com.android.support:appcompat-v7:28.0.0 "} ใช้ปลั๊กอิน: com.google.ar .sceneform.plugin

การขอสิทธิ์กับ ArFragment

แอปพลิเคชันของเราจะใช้กล้องของอุปกรณ์เพื่อวิเคราะห์สภาพแวดล้อมและวางโมเดล 3 มิติในโลกแห่งความเป็นจริง ก่อนที่แอปพลิเคชันของเราสามารถเข้าถึงกล้องได้ต้องได้รับอนุญาตจากกล้องดังนั้นให้เปิดรายการของโครงการและเพิ่มรายการต่อไปนี้:

Android 6.0 ให้ความสามารถแก่ผู้ใช้ในการให้อนุญาตปฏิเสธและเพิกถอนการอนุญาตตามสิทธิ์ที่ได้รับอนุญาต แม้ว่าสิ่งนี้จะช่วยปรับปรุงประสบการณ์ผู้ใช้ แต่ตอนนี้นักพัฒนา Android ต้องขออนุญาตด้วยตนเองที่รันไทม์และจัดการการตอบสนองของผู้ใช้ ข่าวดีก็คือเมื่อทำงานกับ Google ARCore กระบวนการขออนุญาตใช้กล้องและการจัดการการตอบสนองของผู้ใช้จะถูกนำไปใช้ อัตโนมัติ.

องค์ประกอบ ArFragment จะตรวจสอบโดยอัตโนมัติว่าแอปของคุณมีสิทธิ์กล้องแล้วทำการร้องขอถ้าจำเป็นก่อนที่จะสร้างเซสชัน AR เนื่องจากเราจะใช้ ArFragment ในแอปของเราเราไม่จำเป็นต้องเขียนโค้ดใด ๆ เพื่อขออนุญาตใช้กล้อง

AR ต้องการหรือไม่ก็ได้?

แอปพลิเคชั่นสองประเภทที่ใช้ฟังก์ชัน AR:

1. จำเป็นต้องใช้ AR

หากแอปพลิเคชันของคุณอาศัย Google ARCore เพื่อมอบประสบการณ์การใช้งานที่ดีคุณต้องแน่ใจว่ามีการดาวน์โหลดไปยังอุปกรณ์ที่สนับสนุน ARCore เท่านั้น หากคุณทำเครื่องหมายแอปของคุณเป็น“ จำเป็นต้องใช้ AR” แอปนั้นจะปรากฏเฉพาะในร้านค้า Google Play หากอุปกรณ์รองรับ ARCore

ตั้งแต่ใบสมัครของเรา ทำ ต้องใช้ ARCore เปิดรายการและเพิ่มรายการต่อไปนี้:

นอกจากนี้ยังมีโอกาสที่แอปพลิเคชันของคุณอาจถูกดาวน์โหลดไปยังอุปกรณ์ที่รองรับ ARCore ตามทฤษฎี แต่ไม่ได้ติดตั้ง ARCore จริงๆ เมื่อเราทำเครื่องหมายแอปของเราว่า "จำเป็นต้องใช้ AR" Google Play จะดาวน์โหลดและติดตั้ง ARCore ข้างแอพของคุณโดยอัตโนมัติหากยังไม่ได้แสดงบนอุปกรณ์เป้าหมาย

โปรดทราบว่าแม้ว่าแอปของคุณจะเป็น Android: required =” true” คุณจะต้อง ยังคง จำเป็นต้องตรวจสอบว่า ARCore ปรากฏที่รันไทม์เนื่องจากมีโอกาสที่ผู้ใช้อาจถอนการติดตั้ง ARCore ตั้งแต่ดาวน์โหลดแอปของคุณหรือเวอร์ชัน ARCore ของพวกเขาล้าสมัยแล้ว

ข่าวดีก็คือเรากำลังใช้ ArFragment ซึ่งจะตรวจสอบโดยอัตโนมัติว่า ARCore ได้รับการติดตั้งและทันสมัยก่อนสร้าง แต่ละ เซสชัน AR - อีกครั้งนี่คือสิ่งที่เราไม่จำเป็นต้องดำเนินการด้วยตนเอง

2. AR เป็นตัวเลือก

หากแอปของคุณมีคุณสมบัติ AR ที่สวยงาม แต่ไม่จำเป็นสำหรับการส่งมอบฟังก์ชันการทำงานหลักคุณสามารถทำเครื่องหมายแอปพลิเคชันนี้ว่า "AR Optional" แอปของคุณสามารถตรวจสอบว่า Google ARCore แสดงที่รันไทม์หรือไม่ คุณสมบัติ AR บนอุปกรณ์ที่ไม่รองรับ ARCore

หากคุณสร้างแอพ“ AR Optional” แล้ว ARCore จะทำ ไม่ ติดตั้งโดยอัตโนมัติพร้อมกับแอพพลิเคชั่นของคุณแม้ว่าอุปกรณ์นั้นจะมีฮาร์ดแวร์และซอฟต์แวร์ทั้งหมดที่จำเป็นสำหรับการรองรับ ARCore แอพ“ AR Optional” ของคุณจะต้องตรวจสอบว่า ARCore มีอยู่และเป็นปัจจุบันหรือไม่และดาวน์โหลดเวอร์ชันล่าสุดตามต้องการ

หาก ARCore ไม่สำคัญสำหรับแอปของคุณคุณสามารถเพิ่มสิ่งต่อไปนี้ในรายการของคุณ:

ในขณะที่ฉันเปิดการแสดงฉันยังเพิ่ม android: configChanges และ android: screenOrientation เพื่อให้แน่ใจว่า MainActivity จัดการกับการเปลี่ยนทิศทางได้อย่างสวยงาม

หลังจากเพิ่มสิ่งนี้ลงในรายการของคุณแล้วไฟล์ที่สมบูรณ์ควรมีลักษณะดังนี้:

เพิ่ม ArFragment ให้กับเลย์เอาต์ของคุณ

ฉันจะใช้ ARForement ของ ARCore เนื่องจากจะจัดการงาน ARCore ที่สำคัญจำนวนหนึ่งโดยอัตโนมัติเมื่อเริ่มต้นเซสชัน AR แต่ละครั้ง ที่โดดเด่นที่สุดคือ ArFragment ตรวจสอบว่ามีการติดตั้ง ARCore เวอร์ชันที่ใช้งานร่วมกันได้ในอุปกรณ์และแอปนั้นได้รับอนุญาตจากกล้องในปัจจุบัน

เมื่อ ArFragment ตรวจสอบแล้วว่าอุปกรณ์สามารถรองรับคุณสมบัติ AR ของแอปของคุณมันจะสร้างเซสชัน ArSceneView ARCore และประสบการณ์ AR ของแอปของคุณก็พร้อมใช้งานแล้ว!

คุณสามารถเพิ่ม ArFragment Fragment ลงในไฟล์เลย์เอาต์เช่นเดียวกับ Android Fragment ปกติดังนั้นให้เปิดไฟล์ activity_main.xml ของคุณและเพิ่มส่วนประกอบ“ com.google.ar.sceneform.ux.ArFragment”

กำลังดาวน์โหลดโมเดล 3 มิติโดยใช้โพลีของ Google

มีหลายวิธีที่คุณสามารถสร้าง Renderables ได้ แต่ในบทความนี้เราจะใช้ไฟล์เนื้อหา 3 มิติ

Sceneform รองรับเนื้อหา 3 มิติในรูปแบบ. OBJ, .glTF และ. FBX โดยมีหรือไม่มีภาพเคลื่อนไหว มีสถานที่มากมายที่คุณสามารถซื้อโมเดล 3 มิติในรูปแบบใดรูปแบบหนึ่งที่รองรับ แต่ในบทช่วยสอนนี้ฉันจะใช้ไฟล์. OBJ ซึ่งดาวน์โหลดจากที่เก็บโพลีของ Google

ตรงไปที่เว็บไซต์โพลีและดาวน์โหลดเนื้อหาที่คุณต้องการใช้ในรูปแบบ. OBJ (ฉันใช้รุ่น T-Rex นี้)

  • เปิดเครื่องรูดโฟลเดอร์ซึ่งควรมีไฟล์แหล่งเนื้อหาของรุ่นของคุณ (.OBJ, .FBX หรือ. glTF) โฟลเดอร์นี้อาจมีการอ้างอิงบางรุ่นเช่นไฟล์ในรูปแบบ. mtl, .bin, .png หรือ. jpeg ทั้งนี้ขึ้นอยู่กับรุ่น

การนำเข้าโมเดล 3 มิติไปยัง Android Studio

เมื่อคุณมีเนื้อหาของคุณคุณจะต้องนำเข้าสู่ Android Studio โดยใช้ปลั๊กอิน Scenform นี่เป็นกระบวนการหลายขั้นตอนที่คุณต้อง:

  • สร้างโฟลเดอร์“ sampledata” Sampledata เป็นประเภทโฟลเดอร์ใหม่สำหรับข้อมูลตัวอย่างเวลาการออกแบบที่จะไม่รวมอยู่ใน APK ของคุณ แต่จะสามารถใช้งานได้ในเครื่องมือแก้ไข Android Studio
  • ลากและวางไฟล์สินทรัพย์ .OBJ ดั้งเดิมลงในโฟลเดอร์“ sampledata” ของคุณ
  • ดำเนินการนำเข้าและการแปลง Sceneform ในไฟล์. OOBJ ซึ่งจะสร้างไฟล์. sfa และ. sfb

แม้ว่ามันอาจดูตรงไปตรงมามากขึ้น อย่า ลากและวางไฟล์. OOBJ ลงในไดเรกทอรี“ res” ของโปรเจ็กต์โดยตรงเนื่องจากจะทำให้รูปแบบรวมอยู่ใน APK ของคุณโดยไม่จำเป็น

โครงการ Android Studio ไม่มีโฟลเดอร์“ sampledata” ตามค่าเริ่มต้นดังนั้นคุณจะต้องสร้างด้วยตนเอง:

  • คลิกควบคุมโฟลเดอร์ "แอพ" ของโครงการ
  • เลือก“ ใหม่> ตัวอย่างไดเรกทอรีข้อมูล” และสร้างโฟลเดอร์ชื่อ“ sampledata”
  • นำทางไปยังไฟล์โมเดล 3 มิติที่คุณดาวน์โหลดมาก่อนหน้านี้ ค้นหาไฟล์สินทรัพย์ต้นทาง (.OBJ, .FBX หรือ .glTF) จากนั้นลากและวางลงในไดเรกทอรี“ sampledata”
  • ตรวจสอบว่าแบบจำลองของคุณมีการขึ้นต่อกันใด ๆ (เช่นไฟล์ในรูปแบบ. mtl, .bin, .png หรือ. jpeg) หากคุณพบไฟล์ใด ๆ เหล่านี้ให้ลากแล้ววางลงในโฟลเดอร์“ sampledata”
  • ใน Android Studio ให้คลิกไฟล์ที่มาของโมเดล 3 มิติ (.OBJ, .FBX หรือ .glTF) จากนั้นเลือก“ นำเข้าเนื้อหาของฉาก”

  • หน้าต่างต่อมาจะแสดงข้อมูลเกี่ยวกับไฟล์ที่ Sceneform กำลังจะสร้างรวมถึงตำแหน่งที่จะเก็บไฟล์. sfa ที่เป็นผลลัพธ์ในโครงการของคุณ ฉันกำลังจะใช้ไดเรกทอรี "ดิบ"
  • เมื่อคุณพอใจกับข้อมูลที่คุณป้อนให้คลิก“ เสร็จสิ้น”

การนำเข้านี้ทำให้เกิดการเปลี่ยนแปลงเล็กน้อยในโครงการของคุณ หากคุณเปิดไฟล์ build.gradle คุณจะเห็นว่ามีการเพิ่มปลั๊กอิน Sceneform เป็นการอ้างอิงโครงการ:

การพึ่งพา {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform: plugin: 1.7.0 // หมายเหตุ: อย่าวางแอปพลิเคชันของคุณที่นี่ พวกเขาอยู่ใน // ในแต่ละไฟล์ build.gradle โมดูล}}

เปิดไฟล์ build.gradle ในระดับโมดูลของคุณแล้วคุณจะพบรายการ sceneform.asset () ใหม่สำหรับโมเดล 3 มิติที่นำเข้าของคุณ:

ใช้ปลั๊กอิน: com.google.ar.sceneform.plugin // "เส้นทางสินทรัพย์ต้นทาง" ที่คุณระบุระหว่างการนำเข้า // sceneform.asset (sampledata / dinosaur.obj, // "เส้นทางวัสดุ" ที่คุณระบุระหว่างการนำเข้า // ค่าเริ่มต้น , // The“ .sfa Output Path” ที่คุณระบุระหว่างการนำเข้า // sampledata / dinosaur.sfa, // The“ .sfb Output Path” ที่คุณระบุระหว่างการนำเข้า // src / main / asset / dinosaur)

หากคุณดูที่โฟลเดอร์ "sampledata" และ "raw" คุณจะเห็นว่ามีไฟล์. sfa และ. sfb ใหม่ตามลำดับ

คุณสามารถดูตัวอย่างไฟล์. sfa ได้ใน Sceneform Viewer ใหม่ของ Android Studio:

  • เลือก“ View> Tools Windows> Viewer” จากแถบเมนู Android Studio
  • ในเมนูด้านซ้ายเลือกไฟล์. sfa ของคุณ โมเดล 3 มิติของคุณควรปรากฏในหน้าต่าง Viewer

แสดงโมเดล 3 มิติของคุณ

ภารกิจต่อไปของเราคือการสร้างเซสชัน AR ที่เข้าใจสภาพแวดล้อมและอนุญาตให้ผู้ใช้วางแบบจำลอง 3 มิติในฉากที่เพิ่มขึ้น

สิ่งนี้ต้องการให้เราทำสิ่งต่อไปนี้:

1. สร้างตัวแปรสมาชิก ArFragment

ArFragment ทำหน้าที่ยกส่วนใหญ่ในการสร้างเซสชัน AR ดังนั้นเราจะอ้างอิงส่วนนี้ตลอดชั้น MainActivity

ในตัวอย่างต่อไปนี้ฉันกำลังสร้างตัวแปรสมาชิกสำหรับ ArFragment แล้วเริ่มต้นได้ในเมธอด onCreate ():

ArFragment ส่วนตัว arCoreFragment; @Override ที่ได้รับการป้องกันเป็นโมฆะ onCreate (บันเดิลที่บันทึกไว้InstanceState) {super.onCreate (hiddenInstanceState) ... ... ... } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // ค้นหาแฟรกเมนต์โดยใช้ fragment manager // getSupportFragmentManager () findFragmentById (R.id.main_fragment);

2. สร้าง ModelRenderable

ตอนนี้เราจำเป็นต้องแปลงไฟล์. sfb ของเราให้เป็น ModelRenderable ซึ่งในที่สุดจะทำให้วัตถุ 3 มิติของเรา

ที่นี่ฉันกำลังสร้าง ModelRenderable จากไฟล์ res / raw / dinosaur .sfb ของโครงการของฉัน:

Modelino เรนเดอร์ส่วนตัว ... ... ... ModelRenderable.builder () .setSource (นี่ร. ร. ไดโนเสาร์). build () .enAccept (renderable -> dinoRenderable = renderable) .Exceptionally (Throwable -> {Log.e ( TAG, "ไม่สามารถโหลดที่แสดงผลได้"); ส่งคืน null;}); }

3. ตอบสนองต่อการป้อนข้อมูลของผู้ใช้

ArFragment มีการรองรับการแตะลากนิ้วและบิดในตัว

ในแอพของเราผู้ใช้จะเพิ่มแบบจำลอง 3 มิติไปที่ ARCore Plane โดยการแตะที่เครื่องบิน

ในการส่งมอบฟังก์ชั่นนี้เราต้องลงทะเบียนการโทรกลับที่จะเรียกใช้เมื่อใดก็ตามที่มีการแตะเครื่องบิน

arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, ระนาบเครื่องบิน, MotionEvent motionEvent) -> {ถ้า (dinoRenderable == null) {return;}

4. ยึดแบบของคุณ

ในขั้นตอนนี้เราจะเรียก ArSceneView และเชื่อมต่อกับ AnchorNode ซึ่งจะทำหน้าที่เป็นโหนดหลักของฉาก

ArSceneView มีหน้าที่รับผิดชอบในการดำเนินงาน ARCore ที่สำคัญหลายประการรวมถึงการแสดงภาพกล้องของอุปกรณ์และการแสดงภาพเคลื่อนไหว Sceneform UX ที่แสดงให้เห็นว่าผู้ใช้ควรถือและเคลื่อนย้ายอุปกรณ์อย่างไรเพื่อเริ่มประสบการณ์ AR ArSceneView จะเน้นที่เครื่องบินใด ๆ ที่ตรวจพบพร้อมสำหรับผู้ใช้ในการวางแบบจำลอง 3 มิติภายในฉาก

คอมโพเนนต์ ARSceneView มีฉากแนบอยู่ซึ่งเป็นโครงสร้างข้อมูลพาเรนต์ - ลูกที่มีโหนดทั้งหมดที่จำเป็นต้องเรนเดอร์

เราจะเริ่มต้นด้วยการสร้างโหนดประเภท AnchorNode ซึ่งจะทำหน้าที่เป็นโหนดหลักของ ArSceneView

โหนดจุดยึดทั้งหมดยังคงอยู่ในตำแหน่งโลกแห่งความจริงเดียวกันดังนั้นโดยการสร้างโหนดจุดยึดเราจึงมั่นใจว่าแบบจำลอง 3 มิติของเราจะยังคงอยู่ในตำแหน่งภายในฉากที่เพิ่มขึ้น

มาสร้างโหนดสมอของเรากัน:

AnchorNode anchorNode = ใหม่ AnchorNode (anchor);

จากนั้นเราสามารถดึงข้อมูล ArSceneView โดยใช้ getArSceneView () และแนบเข้ากับ AnchorNode:

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

5. เพิ่มการรองรับการเคลื่อนที่การปรับขนาดและการหมุน

ต่อไปฉันจะสร้างโหนดประเภท TransformableNode TransformableNode รับผิดชอบการย้ายการปรับขนาดและการหมุนโหนดตามท่าทางของผู้ใช้

เมื่อคุณสร้าง TransformableNode แล้วคุณสามารถแนบ Renderable ซึ่งจะทำให้โมเดลมีความสามารถในการปรับขนาดและย้ายตามการโต้ตอบของผู้ใช้ ในที่สุดคุณจำเป็นต้องเชื่อมต่อ TransformableNode กับ AnchorNode ในความสัมพันธ์ระหว่างผู้ปกครองกับเด็กซึ่งทำให้มั่นใจได้ว่า TransformableNode และ เรนเดอร์ยังคงอยู่ในสถานที่ภายในฉากเสริม

TransformableNode transformableNode = new TransformableNode (arCoreFragment.getTransformationSystem ()); // เชื่อมต่อ transformableNode เพื่อ anchorNode // transformableNode.setParent (anchorNode); transformableNode.setRenderable (dinoRenderable); // เลือกโหนด // transformableNode.select (); }); }

MainActivity เสร็จสมบูรณ์

หลังจากดำเนินการข้างต้นทั้งหมดแล้วกิจกรรมหลักของคุณควรมีลักษณะดังนี้:

นำเข้า android.app.Activity; นำเข้า android.app.ActivityManager; นำเข้า androidx.appcompat.app.AppCompatActivity; นำเข้า android.content.Context; android.net.Uri นำเข้า นำเข้า android.os.Build; นำเข้า android.os.Build.VERSION_CODES; นำเข้า android.os.Bundle; นำเข้า android.util.Log; นำเข้า android.view.MotionEvent; นำเข้า androidx.annotation.RequiresApi; นำเข้า com.google.ar.core.Anchor; นำเข้า com.google.ar.core.HitResult; นำเข้า com.google.ar.core.Plane; นำเข้า com.google.ar.sceneform.AnchorNode; นำเข้า com.google.ar.sceneform.rendering.ModelRenderable; นำเข้า com.google.ar.sceneform.ux.ArFragment; นำเข้า com.google.ar.sceneform.ux.TransformableNode; MainActivity ระดับสาธารณะขยาย AppCompatActivity {ส่วนตัวคงสุดท้ายสตริง TAG = MainActivity.class.getSimpleName (); ส่วนตัวคงสุดท้ายสองครั้ง MIN_OPENGL_VERSION = 3.0; // สร้างตัวแปรสมาชิกสำหรับ ModelRenderable // ไพรเวต ModelRenderable dinoRenderable; // สร้างตัวแปรสมาชิกสำหรับ ArFragment // private ArFragment arCoreFragment; @RequiresApi (api = VERSION_CODES.N) @Override โมฆะที่มีการป้องกัน onCreate (บันเดิลที่บันทึกไว้InstanceState) {super.onCreate (hiddenInstanceState); if (! checkDevice ((นี้))) {return; } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // ค้นหาแฟรกเมนต์โดยใช้ Fragment manager // getSupportFragmentManager () findFragmentById (R.id.main_fragment); if (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// สร้าง ModelRenderable // ModelRenderable.builder () .setSource (นี่, R.raw.dinosaur). build () .thenAccept (renderable -> dinoRenderable => สามารถสร้างได้ ) .exceptionally (// หากมีข้อผิดพลาดเกิดขึ้น ... // throwable -> {//... จากนั้นพิมพ์ต่อไปนี้เพื่อ Logcat // Log.e (TAG "ไม่สามารถโหลด renderable"); return null;} ); } // ฟังเหตุการณ์ onTap // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult เครื่องบินเครื่องบิน MotionEvent motionEvent) -> {ถ้า (dinoRenderable == null) {return;} Anchor anchor = hitResult.createAnchor (); โหนดประเภท AnchorNode // AnchorNode anchorNode = ใหม่ AnchorNode (anchor); // เชื่อมต่อ AnchorNode กับฉาก // anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ()); // สร้างโหนดชนิด TransformableNode // TransformableNode transformableNode = new TransformableNode (arCoreFragment.getTransformationSystem ()); // เชื่อมต่อ TransformableNode กับ AnchorNode // transformableNode.setParent (anchorNode); // แนบ Renderable // transformableNode.setRenderable (dinoRenderable) / transformableNode.select ();}); } สาธารณะบูลีนแบบคงที่ checkDevice (กิจกรรมสุดท้ายของกิจกรรม) {// หากอุปกรณ์ใช้ Android Marshmallow หรือเร็วกว่านั้น ... // ถ้า (Build.VERSION.SDK_INT <VERSION_CODES.N) {//... จากนั้นพิมพ์ต่อไปนี้เพื่อ Logcat // Log.e (TAG, "Sceneform ต้องใช้ Android N หรือสูงกว่า"); activity.finish (); กลับเท็จ } String openGlVersionString = ((ActivityManager) activity.getSystemService (Context.ACTIVITY_SERVICE)) .getDeviceConfigurationInfo () // ตรวจสอบเวอร์ชั่นของ OpenGL ES // .getGlEsVersion (); // หากอุปกรณ์ทำงานน้อยกว่า OpenGL ES 3.0 ... // ถ้า (Double.parseDouble (openGlVersionString) <MIN_OPENGL_VERSION) {//... จากนั้นพิมพ์ต่อไปนี้เพื่อ Logcat // Log.e (TAG, " ต้องใช้ OpenGL ES 3.0 หรือสูงกว่า "); activity.finish (); กลับเท็จ } คืนค่าจริง }}

คุณสามารถดาวน์โหลดโครงการที่เสร็จสมบูรณ์จาก GitHub

ทดสอบแอปเติมความเป็นจริงของ Google ARCore ของคุณ

ตอนนี้คุณพร้อมที่จะทดสอบแอปพลิเคชันของคุณบนอุปกรณ์ Android ที่รองรับแล้ว หากคุณไม่ได้เป็นเจ้าของอุปกรณ์ที่รองรับ ARCore อาจเป็นไปได้ที่จะทดสอบแอป AR ของคุณใน Android Emulator (ด้วยการกำหนดค่าเพิ่มเติมเล็กน้อยซึ่งเราจะกล่าวถึงในส่วนถัดไป)

เพื่อทดสอบโครงการของคุณใน กายภาพ อุปกรณ์ Android:

  • ติดตั้งแอปพลิเคชันของคุณบนอุปกรณ์เป้าหมาย
  • เมื่อได้รับแจ้งให้อนุญาตให้แอปพลิเคชันเข้าถึงกล้องของอุปกรณ์
  • หากได้รับแจ้งให้ติดตั้งหรืออัปเดตแอป ARCore ให้แตะ“ ดำเนินการต่อ” จากนั้นจึงดำเนินการตามบทสนทนาเพื่อให้แน่ใจว่าคุณกำลังใช้งาน ARCore เวอร์ชันล่าสุดและยิ่งใหญ่ที่สุด
  • ตอนนี้คุณควรเห็นมุมมองกล้องพร้อมด้วยภาพเคลื่อนไหวของมือที่ถืออุปกรณ์ เล็งกล้องไปที่พื้นผิวที่เรียบแล้วเคลื่อนอุปกรณ์ของคุณเป็นวงกลมตามที่แสดงโดยภาพเคลื่อนไหว หลังจากนั้นครู่หนึ่งชุดของจุดควรปรากฏขึ้นเพื่อระบุว่าตรวจพบระนาบ

  • เมื่อคุณพอใจกับตำแหน่งของจุดเหล่านี้แล้วให้แตะพวกเขาตอนนี้โมเดล 3 มิติของคุณควรจะปรากฏบนเครื่องบินที่คุณเลือก!

  • ลองเคลื่อนไหวร่างกายแบบจำลอง ขึ้นอยู่กับสภาพแวดล้อมของคุณคุณสามารถทำแบบเต็ม 360 องศารอบ ๆ มันได้ คุณควรตรวจสอบด้วยว่าวัตถุนั้นกำลังฉายเงาที่สอดคล้องกับแหล่งกำเนิดแสงในโลกแห่งความเป็นจริง

ทดสอบ ARCore บนอุปกรณ์เสมือน Android

ในการทดสอบแอป ARCore ของคุณในอุปกรณ์เสมือน Android (AVD) คุณจะต้องใช้ Android Emulator เวอร์ชัน 27.2.9 หรือสูงกว่า คุณต้องลงชื่อเข้าใช้ Google Play store บน AVD ของคุณและเปิดใช้งาน OpenGL ES 3.0 หรือสูงกว่า

วิธีตรวจสอบว่า OpenGL ES 3.0 หรือสูงกว่านั้นเปิดใช้งานใน AVD ของคุณหรือไม่:

  • เปิด AVD ของคุณตามปกติ
  • เปิดหน้าต่าง Terminal (Mac) ใหม่หรือ Command Prompt (Windows)
  • เปลี่ยนไดเรกทอรี (“ cd”) เพื่อให้ Terminal / Command Prompt ชี้ตำแหน่งของโปรแกรม“ adb” ของ Android SDK ตัวอย่างเช่นคำสั่งของฉันมีลักษณะดังนี้:

Cd / Users / jessicathornsby / Library / Android / sdk / platform-tools

  • กดปุ่ม "Enter" บนแป้นพิมพ์ของคุณ
  • คัดลอก / วางคำสั่งถัดไปลงในเทอร์มินัลแล้วกดปุ่ม“ Enter”:

./adb logcat | grep eglMakeCurrent

ถ้า Terminal คืนค่า“ ver 3 0” หรือสูงกว่าแสดงว่า OpenGL ES ได้รับการกำหนดค่าอย่างถูกต้อง หาก Terminal หรือ Command Prompt แสดงอะไรที่เร็วกว่า 3.0 คุณจะต้องเปิดใช้งาน OpenGL ES 3.0:

  • สลับกลับไปเป็น AVD ของคุณ
  • ค้นหาแถบของปุ่ม“ Extended Control” ที่ลอยอยู่ข้าง Android Emulator จากนั้นเลือก“ การตั้งค่า> ขั้นสูง”
  • ไปที่“ ระดับ OpenGL ES API> Renderer สูงสุด (สูงสุด OpenGL ES 3.1)”
  • รีสตาร์ทเครื่องจำลอง

ในหน้าต่าง Terminal / Command Prompt คัดลอก / วางคำสั่งต่อไปนี้แล้วกดปุ่ม "Enter"

./adb logcat | grep eglMakeCurrent

ตอนนี้คุณควรได้รับผลลัพธ์ของ“ ver 3 0” หรือสูงกว่าซึ่งหมายความว่า OpenGL ES ได้รับการกำหนดค่าอย่างถูกต้อง

สุดท้ายตรวจสอบให้แน่ใจว่า AVD ของคุณใช้งาน ARCore เวอร์ชันล่าสุด:

  • ตรงไปที่หน้า GitHub ของ ARCore และดาวน์โหลด ARCore รุ่นล่าสุดสำหรับโปรแกรมจำลอง ตัวอย่างเช่นในขณะที่เขียนเวอร์ชันล่าสุดคือ“ ARCore_1.7.0.x86_for_emulator.apk”
  • ลากและวาง APK ลงบน AVD ที่ทำงานอยู่

ในการทดสอบโครงการของคุณบน AVD ให้ติดตั้งแอปพลิเคชันของคุณและให้สิทธิ์เข้าถึง“ กล้อง” ของ AVD เมื่อได้รับแจ้ง

ตอนนี้คุณควรเห็นมุมมองกล้องของห้องจำลอง ในการทดสอบแอปพลิเคชันของคุณให้ย้ายไปรอบ ๆ พื้นที่เสมือนนี้ค้นหาพื้นผิวที่จำลองขึ้นมาและคลิกเพื่อวางแบบจำลองบนพื้นผิวนี้

คุณสามารถย้ายกล้องเสมือนไปรอบ ๆ ห้องเสมือนโดยกดปุ่ม "ตัวเลือก" (macOS) หรือ "Alt" (Linux หรือ Windows) ค้างไว้จากนั้นใช้แป้นพิมพ์ลัดต่อไปนี้:

  • เลื่อนไปทางซ้ายหรือขวา กด A หรือ D
  • เลื่อนขึ้นหรือลง กด Q หรือ E
  • เลื่อนไปข้างหน้าหรือย้อนกลับ กด W หรือ S

นอกจากนี้คุณยังสามารถ "เลื่อน" รอบ ๆ ฉากเสมือนโดยกด "ตัวเลือก" หรือ "Alt" จากนั้นใช้เมาส์ของคุณ ในตอนแรกคุณอาจรู้สึกอึดอัดเล็กน้อย แต่ด้วยการฝึกฝนคุณควรจะสามารถสำรวจอวกาศเสมือนได้สำเร็จ เมื่อคุณพบเครื่องบินจำลองให้คลิกจุดสีขาวเพื่อวางแบบจำลอง 3 มิติของคุณบนพื้นผิวนี้

ห่อ

ในบทความนี้เราได้สร้างแอพเพิ่มความเป็นจริงอย่างง่ายโดยใช้ ARCore และปลั๊กอิน Sceneform

หากคุณตัดสินใจที่จะใช้ Google ARCore ในโครงการของคุณเองอย่าลืมแบ่งปันสิ่งที่คุณสร้างในความคิดเห็นด้านล่าง!

อัปเดต, 23 เมษายน 2019 (12:55 น. ET):แฟน ๆ ของ Marvel Cinematic Univere ในอินเดียกำลังโชคดี บัญชี Twitter ของ OPPO India (ผ่านMymartPrice) ยืนยันว่ามีข้อ จำกัด F11 ProAvenger: Endgame รุ่นจะวางจำหน่าย...

Oppo' ColorO 6 เป็นเวอร์ชั่นล่าสุดของสกิน Android แบบกำหนดเองของ บริษัทColorO 6 ใช้ประโยชน์จากหน้าจอที่สูงขึ้นรวมถึงคุณสมบัติการเพิ่มประสิทธิภาพและงานสีที่สดใหม่Oppo กล่าวว่าการเปิดตัว ColorO 6 เร...

สำหรับคุณ