2018年2月5日 星期一

關於矩陣的乘法

關於矩陣的乘法

前言

  以前總是這樣乘矩陣,ModelMatrix*ViewMatrix*ProjectionMartix,但不知什麼時候開始出現另一種乘法,ProjectionMartix*ViewMatrix*ModelMatrix,雖然早就知道矩陣乘法不具有交換律,但卻都沒有去好好確認過為什麼會有這樣的差異。最近發生在C++的引擎使用第一種方法,但webgl的引擎卻是使用第二種方法!剛好有這機會我就來探究原因。


內容

  首先先把webgl的引擎用第一種方法乘,然後列印出來跟C++來比對,發現內容遽然不一樣!
後來發現是兩邊的矩陣乘法的做法不一樣,C++的乘法來自一般數學課程對矩陣乘法的定義,webgl的引擎的乘法來自three.js的矩陣乘法,再來是我觀察unity3d也是使用第二種乘法,這時的我才發現原來矩陣的乘法有2種,一種是row*col另一種則是col*row。


後記

  這兩種乘法的差異不只會引響引擎的乘法而已,想想看shader裡面的矩陣乘法也會有影響!所以決定好其中一種,並記住乘法是屬於哪一種的,這樣轉code的時候就不會被到底師第一種乘還是第二種乘所迷惑了!
 

沒有留言:

張貼留言