ฉันต้องการเริ่มต้นด้วยความเข้าใจผิด:
Modern GPUs (NVIDIA มาพักหนึ่งแล้วและ AMD มาตั้งแต่เกาะทางใต้) ไม่สนับสนุนการทำงานของเวกเตอร์ / เมทริกซ์ในฮาร์ดแวร์ พวกมันคือสถาปัตยกรรมของเวกเตอร์ในทิศทางที่แตกต่าง: ส่วนประกอบของเวกเตอร์แต่ละตัว (x, y, z) โดยทั่วไปแล้วจะมีค่า 32- หรือ 64- ประกอบด้วยค่าสำหรับแต่ละองค์ประกอบในเลน ดังนั้นผลิตภัณฑ์ 3D dot มักไม่ได้เป็นคำสั่ง แต่เป็นการคูณและเพิ่มสองตัว
นอกจากนี้การนับการดำเนินการดั้งเดิมเช่นการคูณเพิ่มการแปลงเวกเตอร์โดย quaternion นั้นแพงกว่าการแปลงเวกเตอร์ด้วยเมทริกซ์ การแปลงเวกเตอร์ด้วยเมทริกซ์ 3x3 คือ 3 คูณและ 6 คูณเพิ่ม, และการแปลงเวกเตอร์โดยควอเทอเรียนคือสองคูณควอเทอเนียนซึ่งแต่ละอันประกอบด้วย 4 คูณและ 12 คูณเพิ่ม (คุณสามารถไร้เดียงสาน้อยกว่านี้ - นี่คือการเขียนบนวิธีที่เร็วกว่า -แต่มันยังไม่ถูกเท่าการคูณเวกเตอร์ด้วยเมทริกซ์)
อย่างไรก็ตามประสิทธิภาพจะไม่ได้รับการพิจารณาเสมอโดยการนับจำนวนการดำเนินการ ALU ที่ทำได้ Quaternions ต้องการพื้นที่น้อยกว่าเมทริกซ์ที่เท่ากัน (สมมติว่าคุณกำลังหมุน / สเกลเท่านั้น) และนั่นหมายถึงพื้นที่เก็บข้อมูลที่น้อยลงและทราฟฟิกหน่วยความจำน้อยลง สิ่งนี้มักจะมีความสำคัญในการเคลื่อนไหว (ซึ่งมักจะสะดวกเมื่อคุณสมบัติการแก้ไขที่ดีของ quaternions ปรากฏขึ้น)
นอกเหนือจากที่:
- เมทริกซ์ใช้พื้นที่เพิ่มขึ้นเนื่องจากสนับสนุนการดำเนินการเพิ่มเติม เมทริกซ์ขนาด 3x3 สามารถมีสเกลที่ไม่เป็นแบบสม่ำเสมอการเอียงการสะท้อนและการฉายฉากมุมฉาก
- เมทริกซ์สามารถคิดตามธรรมชาติของเวกเตอร์พื้นฐานและสร้างได้ง่ายจากเวกเตอร์เหล่านั้น
- การคูณหนึ่งควอเทอร์เนชันโดยอีกอันหนึ่ง (การหมุนสองรอบ) เป็นการดำเนินการที่น้อยกว่าการคูณเมทริกซ์ตัวหนึ่งด้วยอีกอันหนึ่ง