2018年12月31日 星期一

矩陣的排列順序(1)

矩陣的排列順序(1)

前言

  一個4*4矩陣是由16個float所組成,這不會有異議,但它的排列方式有兩種,常常會搞混,所以作這篇來記錄。

內容

  矩陣的兩種排列順序,如下圖
矩陣排列順序比較
如果仔細觀察可以發現這兩種排列可以透過Transpose的方式來互換,但不幸的是Direct3D與OpenGL的API只認其中一種順序,答案是"右邊",OpenGL2.0時使用的glUniformMatrix4fv()有個參數可以Transpose,所以嚴格來說沒限制順序,但Direct3D10以後開始使用ConstantBuffer與OpenGL3.1以後使用的UBO,這兩者都是直接透過記憶體將參數直接傳入GPU,沒辦法一個一個Transpose,所以才說繪圖API有認順序。

  這兩種順序在不考慮繪圖API的情形下沒有優劣之分,但由於繪圖API認定了其中一種排列方式,想想看,如果遊戲引擎採用"左邊"的排列,在Shader有matrix的變數的時候要如何寫?每次寫完後都Transpose嗎?還是每次將記憶體送到GPU時都將該變數Transpose?不論是哪一種都沒有"右邊"的排列好用,"右邊"的排列完全連改都不用改,還要想要選哪一種排列嗎?


沒有留言:

張貼留言