ได้โปรดยกโทษให้ฉันด้วย แต่ฉันต้องการความช่วยเหลือและฉันติดอยู่กับเรื่องนี้มาสองสามสัปดาห์แล้วตอนนี้ฉันไม่มีความคืบหน้าและทุกที่ที่ฉันไปและฉันเห็นคำตอบที่ต่างออกไป ฉันมีเคล็ดลับและคำแนะนำเพียงพอตอนนี้ฉันแค่ต้องการใครสักคนที่จะให้คำตอบสำหรับฉันที่จะทำงานย้อนกลับจากเพราะฉันไม่เข้าใจ
สิ่งที่ทำให้เรื่องนี้เกิดความสับสนมากที่สุดคือวิธีที่ทุกคนใช้ชุดของการประชุมหรือกฎระเบียบที่แตกต่างกันและคำตอบของพวกเขาขึ้นอยู่กับการประชุมของพวกเขาเอง
ดังนั้นนี่คือชุดของการประชุมที่ฉันสร้างขึ้นตามสิ่งที่ดูเหมือนจะเป็นเรื่องธรรมดาและมีเหตุผลที่สุด:
- กฎมือขวาสำหรับแกน
- Positive Y เพิ่มขึ้น Positive Z กำลังเข้าหาผู้ชม Positive X อยู่ทางขวา
- Row Major matrixes, transposed เมื่อถูกส่งไปยังเฉดสี
- Pitch: การหมุนรอบแกน X
- Yaw: การหมุนรอบแกน y
- ม้วน: การหมุนเกี่ยวกับแกน z
- ลำดับการหมุน: หมุน, ระยะห่าง, Yaw (ถูกต้องไหมมีคนตรวจสอบฉันได้ไหม)
- ค่าการหมุนในเชิงบวกมองลงมาจากปลายบวกของแกนผลลัพธ์ในการหมุนตามเข็มนาฬิกา
- ทิศทางเริ่มต้นสำหรับการหมุน 0 ในทุกแกนคือเวกเตอร์ที่ชี้ไปที่ลบ Y
.. ได้รับอนุสัญญาเหล่านั้น (โดยทั้งหมดแก้ไขฉันถ้าพวกเขาผิด!) วิธีหนึ่ง:
- เขียนฟังก์ชั่น LookAt หรือไม่ (lookAt (ตำแหน่งเวกเตอร์, เลนส์เวกเตอร์, เวกเตอร์ขึ้นไป))
- คำนวณเมทริกซ์การหมุน (การหมุน (x, y, z))
ฉันลองตอบคำถามสองข้อนี้อย่างน้อย 3 สัปดาห์ที่ผ่านมาฉันได้เขียนฟังก์ชัน LookAt & Rotation Matrix ใหม่อย่างน้อย 30 ครั้งฉันได้ทดสอบวิธีการมากมายและอ่านเนื้อหาที่ฉันเคยเห็น เว็บไซต์หลายร้อยแห่งและอ่านคำถามที่ตอบแล้วคัดลอกรหัสของคนอื่นและไม่มีอะไรที่ฉันทำมาจนถึงตอนนี้ทุกอย่างก็ให้ผลลัพธ์ที่ผิด ซึ่งบางตัวได้สร้างเอาท์พุทที่แปลกประหลาดเฮฮาไม่ได้ใกล้เคียงกับการหมุนที่ถูกต้อง
ฉันทำงานเกี่ยวกับเรื่องนี้ทุกคืนยกเว้นเมื่อคืนเพราะฉันรู้สึกหงุดหงิดมากกับความล้มเหลวซ้ำ ๆ ที่ฉันต้องหยุดและหยุดพัก
โปรดแสดงให้ฉันเห็นว่าวิธีการที่ถูกต้องคืออะไรฉันจึงสามารถทำงานย้อนกลับจากนั้นและหาวิธีการทำงานฉันแค่ไม่ได้รับคำตอบที่ถูกต้องและนี่ทำให้ฉันบ้าไปหน่อย!
ฉันกำลังเขียนใน Java แต่ฉันจะใช้รหัสที่เขียนในภาษาใด ๆ รหัสการแสดงผล 3 มิติส่วนใหญ่ของฉันทำงานได้อย่างยอดเยี่ยมจริงๆมันเป็นเพียงคณิตศาสตร์ที่ฉันไม่เข้าใจ
อัปเดต: แก้ไขแล้ว
ขอขอบคุณสำหรับความช่วยเหลือของคุณ! ตอนนี้ฉันมีฟังก์ชั่น LookAt ที่ใช้งานได้จริงที่ฉันเข้าใจแล้วและฉันก็ไม่มีความสุข (ถ้ามีใครอยากเห็นมันด้วยทุกวิถีทางถาม)
ฉันลองอีกครั้งในการสร้างเมทริกซ์การหมุนตามตัวแปร pitch / yaw / roll และดูเหมือนว่าจะล้มเหลวอีกครั้ง แต่ฉันตัดสินใจทิ้งความพยายามที่จะใช้มุมออยเลอร์สำหรับกล้อง freelook เนื่องจากดูเหมือนว่าจะไม่เหมาะสำหรับ บทบาทแทนฉันจะสร้างคลาส quaternion อาจมีโชคที่ดีกว่าที่จะลงไปในเส้นทางนั้นมิฉะนั้นฉันจะใช้วิธี pitch / yaw เป็นพิกัดทรงกลมและอาศัยฟังก์ชัน LookAt ที่ทำงานใหม่สำหรับการหมุน
หากใครก็ตามประสบปัญหาคล้ายกันและต้องการถามคำถามกับฉัน
อย่างน้อยฉันก็ไม่ติดขัดอีกต่อไปขอบคุณสำหรับความช่วยเหลือ!