ด้วย XNA ฉันกำลังแสดงรูปสี่เหลี่ยมผืนผ้าที่เรียบง่ายซึ่งถูกฉายลงบนพื้น โปรเจ็กเตอร์สามารถวางในตำแหน่งโดยพลการ เห็นได้ชัดว่าสี่เหลี่ยมที่ฉายนั้นบิดเบี้ยวตามตำแหน่งและมุมของโปรเจ็คเตอร์ Kinect สแกนพื้นเพื่อหามุมทั้งสี่ ตอนนี้เป้าหมายของฉันคือการแปลงรูปสี่เหลี่ยมเดิมเพื่อให้การฉายไม่มีความบิดเบี้ยวอีกต่อไปโดยการแปรปรวนของสี่เหลี่ยมล่วงหน้า
วิธีแรกของฉันคือทำทุกอย่างใน 2D: ก่อนอื่นคำนวณการแปลงเปอร์สเปคทีฟ (โดยใช้ OpenCV warpPerspective()
) จากจุดที่สแกนไปยังจุดภายในของสี่เหลี่ยม ดูเหมือนว่าจะใช้งานได้ แต่ช้าเกินไปเนื่องจากไม่สามารถแสดงผลบน GPU ได้
แนวทางที่สองคือการทำทุกอย่างในรูปแบบ 3 มิติเพื่อใช้คุณสมบัติการแสดงผลของ XNA ก่อนอื่นฉันจะแสดงเครื่องบินสแกนมุมของมันด้วย Kinect และทำแผนที่คะแนน 3D ที่ได้รับไปยังระนาบเดิม ในทางทฤษฎีฉันสามารถใช้การผกผันของการแปลงมุมมองกับระนาบได้เช่นเดียวกับที่ฉันทำในแบบสองมิติ อย่างไรก็ตามเนื่องจาก XNA ทำงานร่วมกับเมทริกซ์มุมมองและเส้นโครงร่างฉันจึงไม่สามารถเรียกฟังก์ชันเช่นwarpPerspective()
และรับผลลัพธ์ที่ต้องการได้ ฉันต้องคำนวณพารามิเตอร์ใหม่สำหรับมุมมองและเมทริกซ์การฉายของกล้อง
คำถาม: เป็นไปได้ไหมที่จะคำนวณพารามิเตอร์เหล่านี้และแยกออกเป็นสองเมทริกซ์ (มุมมองและการฉายภาพ)? ถ้าไม่มีวิธีอื่นที่ฉันสามารถใช้ได้หรือไม่?
warpPespective
ใด? ฉันไม่คุ้นเคยกับ OpenCV แต่การอ่านเอกสารดูเหมือนว่าฟังก์ชั่นนี้ใช้มุมมองกับภาพ หรือฉันสับสน อย่างไรก็ตามการเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งานครั้งแรกของคุณอาจช่วยได้