Poly API: การดึงเนื้อหา 3 มิติสำหรับแอป VR และ AR Android ของคุณ

ผู้เขียน: Peter Berry
วันที่สร้าง: 14 สิงหาคม 2021
วันที่อัปเดต: 8 พฤษภาคม 2024
Anonim
เขียนเกมบนมือถือ (Mobile Game) ด้วย Unity 3D ฉบับ Basic
วิดีโอ: เขียนเกมบนมือถือ (Mobile Game) ด้วย Unity 3D ฉบับ Basic

เนื้อหา


คุณมีความคิดที่ดีสำหรับแอพมือถือเสมือนจริง (VR) หรือเพิ่มความเป็นจริง (AR) แต่ไม่มีความคิดว่าจะนำวิสัยทัศน์ของคุณมาสู่ชีวิตได้อย่างไร?

นอกจากว่าคุณเป็นนักพัฒนา Android ที่เคยเป็นศิลปิน 3D ที่มีประสบการณ์แล้วการสร้างเนื้อหาทั้งหมดที่จำเป็นในการส่งมอบประสบการณ์ 360 องศาที่ดื่มด่ำอาจเป็นกระบวนการที่น่ากลัว

เพียงเพราะคุณไม่มีเวลาทรัพยากรหรือประสบการณ์ที่จำเป็นในการสร้างแบบจำลอง 3 มิติ ไม่ หมายความว่าคุณไม่สามารถสร้างแอปมือถือ VR หรือ AR ที่ยอดเยี่ยมได้! มีแหล่งข้อมูล 3 มิติขนาดใหญ่ที่สามารถใช้ได้อย่างอิสระบน World Wide Web รวมถึง API เฟรมเวิร์กและไลบรารีทั้งหมดที่คุณต้องการดาวน์โหลดและแสดงเนื้อหาเหล่านี้ในแอปพลิเคชัน Android ของคุณ

อ่านต่อไป: ตอนนี้คุณสามารถเยี่ยมชมเว็บไซต์ใด ๆ โดยใช้ Daydream VR แม้แต่อันนั้น

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


แสดงเนื้อหา 3 มิติด้วยโพลี

หากคุณเคยแต่งแต้มในการพัฒนาความสามัคคีแล้วพื้นที่เก็บข้อมูลโพลีจะคล้ายกับที่เก็บสินทรัพย์ Unity - ยกเว้นว่าทุกอย่างในโพลีนั้นฟรี!

โมเดล 3 มิติของ Poly หลายรุ่นมีการเผยแพร่ภายใต้ใบอนุญาต Creative Commons ดังนั้นคุณสามารถใช้แก้ไขและรีมิกซ์เนื้อหาเหล่านี้ได้ฟรีตราบใดที่คุณให้เครดิตแก่ผู้สร้างที่เหมาะสม

โมเดล 3 มิติทั้งหมดของ Poly ได้รับการออกแบบให้เข้ากันได้กับแพลตฟอร์ม VR และ AR ของ Google เช่น Daydream และ ARCore แต่คุณสามารถใช้งานได้ทุกที่และทุกเวลาที่ต้องการ - คุณสามารถใช้กับ ARKit ของ Apple ได้!

เมื่อพูดถึงการดึงและแสดงสินทรัพย์โพลีคุณมีสองตัวเลือก ประการแรกคุณสามารถดาวน์โหลดเนื้อหาลงในคอมพิวเตอร์ของคุณจากนั้นนำเข้าสู่ Android Studio เพื่อให้พวกเขามาพร้อมกับแอปพลิเคชันของคุณและมีส่วนร่วมในขนาด APK หรือคุณสามารถดึงเนื้อหาเหล่านี้ได้ในขณะใช้งานโดยใช้ Poly API

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


คุณยังสามารถใช้ Poly API เพื่อให้ทางเลือกแก่ผู้ใช้ของคุณมากขึ้นตัวอย่างเช่นหากคุณกำลังพัฒนาเกมมือถือคุณสามารถให้ผู้ใช้ของคุณเลือกจากตัวละครที่หลากหลาย

เนื่องจากคุณสามารถปรับเปลี่ยนโมเดล Poly ได้คุณสามารถให้ผู้ใช้ปรับแต่งตัวละครที่เลือกตัวอย่างเช่นโดยการเปลี่ยนสีผมหรือสีตาหรือโดยการรวมเข้ากับสินทรัพย์ Poly อื่น ๆ เช่นอาวุธและชุดเกราะที่แตกต่างกัน ด้วยวิธีนี้ Poly API สามารถช่วยคุณส่งมอบเนื้อหา 3 มิติที่น่าประทับใจพร้อมขอบเขตมากมายสำหรับการปรับประสบการณ์ให้เป็นส่วนตัว - และทั้งหมดสำหรับการทำงานเล็ก ๆ น้อย ๆ ผู้ใช้ของคุณจะมั่นใจได้ว่าคุณได้ใช้เวลาเป็นตันในการสร้างแบบจำลอง 3 มิติเหล่านี้อย่างพิถีพิถัน!

สร้างโครงการสร้างแบบจำลอง 3 มิติ

เราจะสร้างแอปพลิเคชันที่ดึงเนื้อหาโพลีเฉพาะเมื่อเปิดใช้งานแอปพลิเคชันครั้งแรกจากนั้นแสดงเนื้อหานั้นในโหมดเต็มหน้าจอตามคำขอของผู้ใช้

เพื่อช่วยเราดึงเนื้อหานี้ฉันจะใช้เชื้อเพลิงซึ่งเป็นห้องสมุดเครือข่าย HTTP สำหรับ Kotlin และ Android เริ่มต้นด้วยการสร้างโครงการใหม่ด้วยการตั้งค่าที่คุณเลือก แต่เมื่อได้รับแจ้งให้เลือก“ รวมการสนับสนุน Kotlin”

การโทรทั้งหมดที่คุณทำกับ Poly API จะต้องมีคีย์ API ซึ่งใช้เพื่อระบุแอปของคุณและบังคับใช้ขีด จำกัด การใช้งาน ในระหว่างการพัฒนาและทดสอบคุณมักจะใช้คีย์ API ที่ไม่ จำกัด แต่ถ้าคุณมีแผนที่จะปล่อยแอพนี้คุณจะต้องใช้คีย์ API ที่ จำกัด โดย Android

ในการสร้างคีย์ที่ถูก จำกัด คุณจะต้องทราบใบรับรองการลงนาม SHA-1 ของโครงการดังนั้นให้รับข้อมูลนี้ทันที:

  • เลือกแท็บ“ Gradle” ของ Android Studio (ที่เคอร์เซอร์อยู่ในตำแหน่งในภาพหน้าจอต่อไปนี้) นี่เป็นการเปิดแผง "โครงการ Gradle"

  • ในแผง "โครงการ Gradle" ให้ดับเบิลคลิกเพื่อขยาย "รูทโครงการ" จากนั้นเลือก "งาน> Android> รายงานการลงชื่อ" ซึ่งจะเปิดแผงใหม่ที่ด้านล่างของหน้าต่าง Android Studio
  • เลือกปุ่ม“ สลับการประมวลผล / โหมดข้อความ” (ซึ่งเคอร์เซอร์อยู่ในตำแหน่งในภาพหน้าจอต่อไปนี้)

ขณะนี้แผง "Run" จะอัปเดตเพื่อแสดงข้อมูลจำนวนมากเกี่ยวกับโครงการของคุณรวมถึงลายนิ้วมือ SHA-1

สร้างบัญชี Google Cloud Platform

ในการรับคีย์ API ที่จำเป็นคุณจะต้องมีบัญชี Google Cloud Platform (GPC)

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

รับรหัส Poly API ของคุณ

เมื่อลงทะเบียนเรียบร้อยแล้วคุณสามารถเปิดใช้งาน Poly API และสร้างคีย์ของคุณ:

  • ตรงไปที่ GCP Console
  • เลือกไอคอนมีเส้นขอบที่มุมบนซ้ายแล้วเลือก“ APIs & Services> Dashboard”
  • เลือก“ เปิดใช้งาน API และบริการ”
  • ในเมนูด้านซ้ายเลือก“ อื่น ๆ ”
  • เลือกการ์ด“ โพลี API”
  • คลิกปุ่ม "เปิดใช้งาน"
  • หลังจากนั้นสักครู่คุณจะถูกนำไปที่หน้าจอใหม่ เปิดเมนูด้านข้างแล้วเลือก“ API และบริการ> ข้อมูลรับรอง”

  • ในป๊อปอัปที่ตามมาเลือก "จำกัด คีย์"
  • ตั้งชื่อให้กับคีย์ของคุณ
  • ภายใต้“ ข้อ จำกัด ของแอปพลิเคชัน” เลือก“ แอพ Android”
  • เลือก“ เพิ่มชื่อแพ็คเกจและลายนิ้วมือ”
  • คัดลอก / วางลายนิ้วมือ SHA-1 ของโครงการของคุณลงในฟิลด์“ ลายเซ็นใบรับรองลายเซ็น”
  • ป้อนชื่อแพ็คเกจของโครงการของคุณ (จะปรากฏในรายการของคุณและที่ด้านบนของไฟล์ทุกชั้น)
  • คลิก“ บันทึก”

ตอนนี้คุณจะถูกนำไปที่หน้าจอ“ หนังสือรับรอง” ของโครงการซึ่งมีรายการคีย์ API ทั้งหมดของคุณ - รวมถึงคีย์ API ที่เปิดใช้งานโพลีที่คุณเพิ่งสร้างขึ้น

การพึ่งพาโครงการ: ส่วนขยายเชื้อเพลิง P3D และ Kotlin

ในการดึงและแสดงเนื้อหาโพลีเราต้องการความช่วยเหลือจากห้องสมุดเพิ่มเติม:

  • เชื้อเพลิง ปัจจุบันโพลีไม่มีชุดเครื่องมือ Android อย่างเป็นทางการดังนั้นคุณจะต้องทำงานกับ API โดยตรงโดยใช้ส่วนต่อประสาน REST เพื่อให้กระบวนการนี้ง่ายขึ้นฉันจะใช้ห้องสมุดเครือข่าย Fuel HTTP
  • กำลังดำเนินการสำหรับ Android ฉันจะใช้ตัวแสดงผล P3D ของห้องสมุดนี้เพื่อแสดงเนื้อหาโพลี

เปิดไฟล์ build.gradle ของโครงการและเพิ่มสองไลบรารีนี้เป็นการอ้างอิงโครงการ:

การประยุกต์ใช้ {พึ่งพา fileTree (รวมถึง:, dir: libs) "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" การใช้งาน com.android.support:appcompat-v7:27.1.1 // เพิ่มคลังเชื้อเพลิง / / implementation com.github.kittinunf.fuel: fuel-android: 1.13.0 // เพิ่มการประมวลผลสำหรับเครื่องมือ Android // การใช้งาน org.p5android: processing-core: 4.0.1}

เพื่อให้รหัสของเรากระชับยิ่งขึ้นฉันจะใช้ส่วนขยาย Kotlin Android ด้วยดังนั้นลองเพิ่มปลั๊กอินนี้ในขณะที่เราเปิดไฟล์ build.gradle:

ใช้ปลั๊กอิน: kotlin-android-extensions

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

การเพิ่มคีย์ API ของคุณ

ทุกครั้งที่แอพของเราร้องขอเนื้อหาจาก Poly จำเป็นต้องมีคีย์ API ที่ถูกต้อง ฉันใช้ข้อความตัวยึดตำแหน่ง แต่คุณ ต้อง แทนที่ตัวยึดตำแหน่งนี้ด้วยคีย์ API ของคุณเองหากแอปพลิเคชันกำลังทำงานอยู่

ฉันยังเพิ่มการตรวจสอบเพื่อที่แอปพลิเคชันจะแสดงคำเตือนหากคุณลืมแทนที่ข้อความ“ INSERT-YOUR-API-KEY”:

นำเข้า android.os.Bundle นำเข้า android.support.v7.app.AppCompatActivity ระดับ MainActivity: AppCompatActivity () {วัตถุคู่หู {const val APIKey = "INSERT-YOUR-API-KEY"} แทนที่ความสนุกบนการสร้าง super.onCreate (hiddenInstanceState) setContentView (R.layout.activity_main) // ถ้าคีย์ API เริ่มต้นด้วย "INSERT" ... // ถ้า (APIKey.startsWith ("INSERT")) {// จากนั้นแสดง toast ต่อไปนี้ ... .// Toast.makeText (นี่คือ "คุณยังไม่ได้อัปเดตคีย์ API ของคุณ", Toast.LENGTH_SHORT) .show ()} else {... ... ...

การดึงเนื้อหา

คุณสามารถเลือกเนื้อหาใด ๆ ในเว็บไซต์ Google Poly แต่ฉันจะใช้ Planet Earth รุ่นนี้

คุณดึงเนื้อหาโดยใช้ ID ของมันซึ่งจะปรากฏในตอนท้ายของกระสุนกระสุน (เน้นในภาพหน้าจอก่อนหน้า) เรารวมรหัสเนื้อหานี้กับโฮสต์ Poly API ซึ่งเป็น“ https://poly.googleapis.com/v1”

นำเข้า android.content.Intent นำเข้า android.os.Bundle นำเข้า android.support.v7.app.AppCompatActivity นำเข้า android.widget.Toast นำเข้า com.github.kittinunf.fuel.android.extension.responseJson นำเข้า .httpDownload การนำเข้า com.github.kittinunf.fuel.httpGet นำเข้า kotlinx.android.synthetic.main.activity_main. * นำเข้าคลาส java.io.File MainActivity: AppCompatActivity () -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} แทนที่ความสนุกสนานในการสร้าง (saveInstanceState: Bundle?) {super.onCreate (hiddenInstanceState) setContentView (R.layout.activity_main) ถ้า ( APIKey.startsWith ("INSERT")) {Toast.makeText (นี่คือ "คุณยังไม่ได้อัปเดตคีย์ API ของคุณ", Toast.LENGTH_SHORT) .show ()} else {

ต่อไปเราต้องส่งคำขอ GET ไปยัง URL เนื้อหาโดยใช้วิธี httpGet () ฉันยังระบุด้วยว่าประเภทการตอบกลับต้องเป็น JSON:

นำเข้า android.content.Intent นำเข้า android.os.Bundle นำเข้า android.support.v7.app.AppCompatActivity นำเข้า android.widget.Toast นำเข้า com.github.kittinunf.fuel.android.extension.responseJson นำเข้า .httpDownload การนำเข้า com.github.kittinunf.fuel.httpGet นำเข้า kotlinx.android.synthetic.main.activity_main. * นำเข้าคลาส java.io.File MainActivity: AppCompatActivity () -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} แทนที่ความสนุกสนานในการสร้าง (saveInstanceState: Bundle?) {super.onCreate (hiddenInstanceState) setContentView (R.layout.activity_main) ถ้า ( APIKey.startsWith ("INSERT")) {Toast.makeText (นี่ "คุณยังไม่ได้อัปเดตคีย์ API ของคุณ", Toast.LENGTH_SHORT) .show ()} else {// โทรหาเซิร์ฟเวอร์แล้วส่งข้อมูลโดยใช้ “ listOf” method // assetURL.httpGet (listOf ("key" ถึง APIKey)) responseJson {request, response, result -> // ทำบางสิ่งด้วยการตอบกลับ // result.fold ({val as set = it.obj ()

เนื้อหาอาจมีหลายรูปแบบเช่น OBJ, GLTF และ FBX เราจำเป็นต้องตรวจสอบว่าสินทรัพย์อยู่ในรูปแบบ OBJ

ในขั้นตอนนี้ฉันจะดึงชื่อและ URL ของไฟล์ทั้งหมดที่เราต้องการดาวน์โหลด
รวมถึงไฟล์หลักของสินทรัพย์ (“ root”) รวมถึงไฟล์เนื้อหาและไฟล์พื้นผิวใด ๆ ที่เกี่ยวข้อง (“ ทรัพยากร”)

หากแอปพลิเคชันของเราไม่สามารถเรียกคืนเนื้อหาได้อย่างถูกต้องแสดงว่ามีขนมปังปิ้งแจ้งให้ผู้ใช้ทราบ

นำเข้า android.content.Intent นำเข้า android.os.Bundle นำเข้า android.support.v7.app.AppCompatActivity นำเข้า android.widget.Toast นำเข้า com.github.kittinunf.fuel.android.extension.responseJson นำเข้า .httpDownload การนำเข้า com.github.kittinunf.fuel.httpGet นำเข้า kotlinx.android.synthetic.main.activity_main. * นำเข้าคลาส java.io.File MainActivity: AppCompatActivity () -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} แทนที่ความสนุกสนานในการสร้าง (saveInstanceState: Bundle?) {super.onCreate (hiddenInstanceState) setContentView (R.layout.activity_main) ถ้า ( APIKey.startsWith ("INSERT")) {Toast.makeText (นี่คือ "คุณยังไม่ได้อัปเดตคีย์ API ของคุณ", Toast.LENGTH_SHORT) .show ()} อื่น {// ส่งคำขอ GET ไปยัง URL เนื้อหา // assetURL httpGet (listOf ("key" ถึง APIKey)) responseJson {request, response, result -> // ทำบางอย่างด้วยการตอบกลับ // result.fold ({val asset = it.obj () var objectURL: String? = null var materialLibraryName: String หรือไม่ = null var materialLibraryURL: สตริง = null // ตรวจสอบรูปแบบของเนื้อหาโดยใช้อาร์เรย์ "รูปแบบ" // val assetFormats = asset.getJSONArray ("รูปแบบ") // วนดูทุกรูปแบบ // สำหรับ (i ใน 0 จนกระทั่ง assetFormats.length ()) { val currentFormat = assetFormats.getJSONObject (i) // ใช้ formatType เพื่อระบุประเภทรูปแบบของทรัพยากรนี้ หากรูปแบบเป็น OBJ … .// if (currentFormat.getString ("formatType") == "OBJ") {//... จากนั้นเรียกไฟล์ 'root' ของทรัพยากรนี้เช่นไฟล์ OBJ // objectURL = currentFormat getJSONObject ("root") .getString ("url") // ดึงการอ้างอิงของไฟล์รูททั้งหมด / materialLibraryName = currentFormat.getJSONArray ("แหล่งข้อมูล") .getJSONObject ("ญาติ") ("ทรัพยากร") .getJSONObject (0). getString ("url") break}} objectURL !!. httpDownload (). ปลายทาง {_, _ -> ไฟล์ (filesDir, "globeAsset.obj")} .response {_ , _, result -> result.fold ({}, {// หากคุณไม่สามารถค้นหาหรือดาวน์โหลดไฟล์ OBJ ให้แสดงข้อผิดพลาด // Toast.makeText (นี่คือ "ไม่สามารถดาวน์โหลดทรัพยากร", Toast.LENGTH_SHORT ) .show ()})} materialLibraryURL !!. httpDownload (). ปลายทาง {_, _ -> ไฟล์ (filesDir, materialLibraryName)} .response {_, _, ผลลัพธ์ -> result.fold ({}, {Toast makeText (นี่คือ "ไม่สามารถดาวน์โหลดทรัพยากร", Toast.LENGTH_SHORT) .show ()})}}, { Toast.makeText (นี่คือ "ไม่สามารถดาวน์โหลดทรัพยากร", Toast.LENGTH_SHORT) .show ()})}}}

ณ จุดนี้หากคุณติดตั้งโครงการบนสมาร์ทโฟนหรือแท็บเล็ต Android หรืออุปกรณ์ Android เสมือน (AVD) ของคุณสินทรัพย์จะดาวน์โหลดสำเร็จ แต่แอปจะไม่แสดงจริง มาแก้ไขกันเถอะ!

การสร้างหน้าจอที่สอง: การเพิ่มการนำทาง

เรากำลังจะแสดงเนื้อหาในโหมดเต็มหน้าจอดังนั้นให้อัปเดตไฟล์ main_activity.xml ของเราเพื่อรวมปุ่มที่เมื่อแตะจะเปิดใช้งานกิจกรรมเต็มหน้าจอ

ตอนนี้ให้เพิ่ม onClickListener ไปที่ท้ายไฟล์ MainActivity.kt:

นำเข้า android.content.Intent นำเข้า android.os.Bundle นำเข้า android.support.v7.app.AppCompatActivity นำเข้า android.widget.Toast นำเข้า com.github.kittinunf.fuel.android.extension.responseJson นำเข้า .httpDownload การนำเข้า com.github.kittinunf.fuel.httpGet นำเข้า kotlinx.android.synthetic.main.activity_main. * นำเข้าคลาส java.io.File MainActivity: AppCompatActivity () -KEY "val assetURL =" https://poly.googleapis.com/v1/assets/94XG1XUy10q "} แทนที่ความสนุกสนานในการสร้าง (saveInstanceState: Bundle?) {super.onCreate (hiddenInstanceState) setContentView (R.layout.activity_main) ถ้า ( APIKey.startsWith ("INSERT")) {Toast.makeText (นี่คือ "คุณยังไม่ได้อัปเดตคีย์ API ของคุณ", Toast.LENGTH_SHORT) .show ()} else {assetURL.httpGet (listOf ("key" ถึง APIKey)) responseJson {request, response, result -> result.fold ({val asset = it.obj ()) var objectURL: String? = null var materialLibraryName: String? = null var materialLibraryURL: Str ไอเอ็นจี? = null val assetFormats = asset.getJSONArray ("format") สำหรับ (i ใน 0 จนกระทั่ง assetFormats.length ()) {val currentFormat = assetFormats.getJSONObject (i) ถ้า currentFormat.getString ("formatType") == "OBJ" ) {objectURL = currentFormat.getJSONObject ("root") .getString ("url") materialLibraryName "currentFormat.getJSONArray (" ทรัพยากร ") .getJSONObject (" ญาติ ") ) .getJSONObject (0) .getString ("url") break}} objectURL !!. httpDownload (). ปลายทาง {_, _ -> ไฟล์ (filesDir, "globeAsset.obj")}. การตอบสนอง {_, _, ผลลัพธ์ -> result.fold ({}, {Toast.makeText (นี่คือ "ไม่สามารถดาวน์โหลดทรัพยากร", Toast.LENGTH_SHORT) .show ()}) MaterialLibraryURL !! material. httpDownload (). ปลายทาง {_, _ -> ไฟล์ (filesDir, materialLibraryName)} .response {_, _, result -> result.fold ({}, {Toast.makeText (นี่คือ "ไม่สามารถดาวน์โหลดทรัพยากร", Toast.LENGTH_SHORT) .show ()}),} {Toast.makeText (นี่คือ "ไม่สามารถดาวน์โหลดทรัพยากร", Toast.LENGTH_SHORT) .sh ow ()})} // ใช้งานปุ่ม // displayButton.setOnClickListener {val เจตนา = เจตนา (นี่, SecondActivity :: class.java) startActivity (เจตนา); }}}

สร้างผ้าใบ 3 มิติ

ตอนนี้มาสร้างกิจกรรมที่เราจะแสดงเนื้อหาของเราในโหมดเต็มหน้าจอ:

  • ควบคุมคลิกไฟล์ MainActivity.kt ของโครงการของคุณแล้วเลือก“ ใหม่> ไฟล์ Kotlin / คลาส”
  • เปิดเมนูแบบเลื่อนลง“ ชนิด” และเลือก“ คลาส”
  • ตั้งชื่อคลาส“ SecondActivity” จากนั้นคลิก“ ตกลง”

ในการวาดวัตถุ 3 มิติเราจำเป็นต้องมีผ้าใบ 3 มิติ! ฉันจะใช้ตัวประมวลผล P3D ของตัวแสดงผลห้องสมุดของ Android ซึ่งหมายถึงการขยายคลาส PApplet โดยแทนที่เมธอด settings () และจากนั้นส่งผ่าน P3D เป็นอาร์กิวเมนต์ไปยังวิธี fullScreen () นอกจากนี้เรายังต้องสร้างคุณสมบัติที่แสดงถึงทรัพย์สินโพลีเป็นวัตถุ PShape

displayAsset ส่วนตัวสนุก () {val canvas3D = วัตถุ: PApplet () {var polyAsset: PShape? = การแทนที่การตั้งค่าความสนุกสนานเป็นโมฆะ () {เต็มหน้าจอ (PConstants.P3D)}

ต่อไปเราต้องเริ่มต้นวัตถุ PShape ด้วยการแทนที่เมธอด setup () เรียกใช้วิธี loadShape () จากนั้นผ่านพา ธ สัมบูรณ์ของไฟล์. obj:

แทนที่การตั้งค่าความสนุก () {polyAsset = loadShape (ไฟล์ (filesDir, "globeAsset.obj"). absolutePath)}

วาดบนผืนผ้าใบของ P3D

ในการวาดบนผืนผ้าใบ 3 มิตินี้เราจำเป็นต้องแทนที่เมธอด draw ():

ลบล้างความสนุกสนานในการวาด () {background (0) รูปร่าง (polyAsset)}}

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

คุณสามารถเพิ่มขนาดของเนื้อหาได้โดยการส่งค่าลบให้กับวิธีการ scale ():

ขนาด (-10f)

คุณสามารถปรับตำแหน่งของสินทรัพย์ในพื้นที่ 3D เสมือนโดยใช้วิธีแปล () และพิกัดต่อไปนี้:

  • เอ็กซ์ วางตำแหน่งสินทรัพย์ตามแนวแกนนอน
  • วาย วางตำแหน่งสินทรัพย์ตามแนวแกนตั้ง
  • Z. นี่คือแกน“ ความลึก / ความสูง” ซึ่งเปลี่ยนวัตถุ 2D เป็นวัตถุ 3 มิติ ค่าบวกจะสร้างการแสดงผลที่วัตถุกำลังเข้ามาหาคุณและค่าลบจะสร้างการแสดงผลที่วัตถุนั้นเคลื่อนไปจากคุณ

โปรดทราบว่าการแปลงเป็นแบบสะสมดังนั้นทุกสิ่งที่เกิดขึ้นหลังจากฟังก์ชันสะสมผลกระทบ

ฉันกำลังใช้สิ่งต่อไปนี้:

แปล (-50f, -100f, 10f)

นี่คือรหัสที่สมบูรณ์:

ลบล้างความสนุกสนานในการวาด () {background (0) scale (-10f) translate (-50f, -100f) // วาดเนื้อหาโดยการเรียก the shape () method // shape (polyAsset)}}

ต่อไปเราต้องสร้างไฟล์เลย์เอาต์ที่เกี่ยวข้องซึ่งเราจะเพิ่มผ้าใบ 3 มิติเป็นวิดเจ็ต FrameLayout:

  • คลิกควบคุมโฟลเดอร์ "res> layout" ของโครงการ
  • เลือก“ ไฟล์ทรัพยากรเลย์เอาต์”
  • ตั้งชื่อไฟล์นี้ว่า“ activity_second” จากนั้นคลิก“ OK”

ตอนนี้เรามี“ asset_view” FrameLayout แล้วเราต้องแจ้งให้ SecondActivity ทราบ! พลิกกลับไปที่ไฟล์ SecondActivity.kt สร้างอินสแตนซ์ PFragment ใหม่และชี้ไปในทิศทางของวิดเจ็ต“ asset_view” ของเรา:

นำเข้า android.os.Bundle นำเข้า android.support.v7.app.AppCompatActivity นำเข้า kotlinx.android.synthetic.main.activity_second. * การนำเข้า processing.android.PFragment การนำเข้าการประมวลผล core.PApplet การนำเข้าการประมวลผล core .PShape นำเข้า java.io.File คลาส SecondActivity: AppCompatActivity () {แทนที่สนุก onCreate (saveInstanceState: Bundle?) {super.onCreate (saveInstanceState) setContentView (R.layout.activity_second) displayAsset ()} canvas3D = object: PApplet () {var polyAsset: PShape? = null override fun settings () {fullScreen (PConstants.P3D)} แทนที่การตั้งค่าความสนุก () {polyAsset = loadShape (ไฟล์ (filesDir, "globeAsset.obj"). absolutePath)} แทนที่ความสนุกแบบวาด () (พื้นหลัง (0) (-10f) แปล (-50f, -100f) รูปร่าง (polyAsset)}} // เพิ่มต่อไปนี้ // val assetView = PFragment (canvas3D) assetView.setView (asset_view นี่)}}

ขั้นตอนสุดท้ายคือการเพิ่ม SecondActivity ให้กับรายการของคุณ:

// เพิ่มดังต่อไปนี้ //

ทดสอบโครงการของคุณ

ตอนนี้เราพร้อมที่จะทดสอบโครงการที่เสร็จสมบูรณ์แล้ว! ติดตั้งบนอุปกรณ์ Android หรือ AVD ของคุณและตรวจสอบให้แน่ใจว่าคุณมีการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้ ทันทีที่แอปเปิดตัวแอปจะดาวน์โหลดเนื้อหาและคุณสามารถดูได้โดยกดปุ่ม "แสดงสินทรัพย์"

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

ห่อ

ในบทความนี้เราดูที่วิธีการใช้ Poly API เพื่อดึงเนื้อหา 3 มิติที่รันไทม์และวิธีการแสดงเนื้อหานั้นโดยใช้ห้องสมุดการประมวลผลสำหรับ Android คุณคิดว่า Poly API มีศักยภาพที่จะทำให้ผู้คนจำนวนมากเข้าถึง VR และ AR ได้หรือไม่? แจ้งให้เราทราบในความคิดเห็นด้านล่าง!

ที่เกี่ยวข้อง

  • Google จะนำแอป AR ไปสู่“ หลายร้อยล้าน” ของอุปกรณ์ Android ในปี 2018
  • Google จะสอนคุณเกี่ยวกับ AI และการเรียนรู้ของเครื่องฟรี
  • 15 เกม VR ที่ดีที่สุดสำหรับ Google Cardboard
  • แอป VR ที่ดีที่สุด 10 อันดับสำหรับ Google Cardboard
  • Google Fuchsia คืออะไร นี่เป็น Android ใหม่หรือไม่
  • Google Duplex คืออะไร - คุณสมบัติวันที่วางจำหน่ายและอื่น ๆ
  • วิธีสร้างแอป VR สำหรับ Android ในเวลาเพียง 7 นาที
  • ชุดหูฟัง VR มือถือ - ตัวเลือกที่ดีที่สุดของคุณคืออะไร?

เทคซูเปอร์สโตร์ที่ดีที่สุด Bet Buy กำลังดำเนินการโปรโมตนานสี่วันทั้งทางออนไลน์และในร้านค้า การขายดีที่สุดเริ่มตั้งแต่วันนี้จนถึงวันเสาร์ที่ 27 เมษายนเวลา 23.59 น. CT (1:00 น. ET ในวันอาทิตย์ที่ 28 เมษ...

หากคุณไม่สามารถรอจนถึงสิ้นเดือนพฤศจิกายนสำหรับยอดขาย Black Friday ที่ดีที่สุดของ Buy Buy ผู้ค้าปลีกในวันนี้จะประกาศข้อเสนอ Black Friday ก่อนกำหนดที่มีให้ในราคายุติธรรม...

บทความยอดนิยม