Yanılgılarla başlamak istiyorum:
Modern GPU'lar (bir süre NVIDIA ve Southern Adaları'ndan bu yana AMD), donanımda vektör / matris işlemlerini doğal olarak desteklemiyor. Bunlar farklı bir yönde vektör mimarileridir: bir vektörün her bileşeni (x, y, z) genellikle bir şeritteki her eleman için değerler içeren 32 veya 64 değerlidir. 3D nokta ürünü genellikle bir talimat değildir, çarpma ve iki çarpma ekidir.
Ek olarak, çarpma-ekleme gibi ilkel işlemleri saymak, bir vektörü bir kuaterniyonla dönüştürmek, bir vektörü bir matrisle dönüştürmekten daha pahalıdır. Bir vektörü 3x3 matrisiyle dönüştürmek 3 çarpı ve 6 çarpma eklentisidir ve bir vektörü bir kuaterniyonla dönüştürmek, her biri 4 çarpma ve 12 çarpma ilavesinden oluşan iki kuaterniyon çarpımıdır. (Bundan daha az naif olabilirsiniz - işte daha hızlı bir şekilde bir yazma - ama yine de bir vektörü bir matrisle çarpmak kadar ucuz değil.)
Ancak, performans her zaman gerçekleştirdiği ALU işlemlerinin sayısını sayarak belirlenmez. Kuaterniyonlar, eşdeğer matristen daha az yer gerektirir (yalnızca saf dönüş / ölçek yaptığınızı varsayarsak) ve bu da daha az depolama alanı ve daha az bellek trafiği anlamına gelir. Bu animasyonda genellikle önemlidir (ki bu da kuaterniyonların hoş enterpolasyon özelliklerinin ortaya çıktığı yer).
Ondan başka:
- Matrisler daha fazla alan kullandıkları için daha fazla alan kullanırlar. 3x3'lük bir matris düzgün olmayan ölçek, eğrilik, yansıma ve dikey projeksiyon içerebilir.
- Matrisler doğal olarak temel vektörler olarak düşünülebilir ve bu vektörlerden kolayca oluşturulabilir.
- Bir kuaterniyonu diğeriyle çarpmak (iki rotasyon oluşturmak), bir matrisi diğeriyle çarpmaktan daha az işlemdir.