是否可以創建一個C++自定義矩陣類,以便我們可以將此類的實例傳遞給glUniformMatrix?換句話說就是將這個類的實例傳遞給頂點着色器。如何將自定義C++矩陣類傳遞給glUniformMatrix
我問這個問題,因爲當我做了一個計算機圖形課程,我們給了一個代碼骨架的opengl和glsl着色器編程。在代碼框架中,我們有一個名爲mat4的自定義C++矩陣類。這個類包含了很多方法和用戶定義的構造函數。但仍然將mat4的實例用作glUniformMatrix的參數,並且此實例在頂點着色器中正確轉換爲類型mat4。
未來我想用GLM library來創建opengl代碼與頂點/片段着色器之間的接口,但我想了解哪些數據類型可以傳遞給glUniformMatrix的規則和語義,以便這種類型的實例將在頂點着色器中正確轉換爲統一的mat4。
我認爲關鍵,這種行爲定義操作
operator GLfloat*();
operator const GLfloat*() const;
返回static_cast<const GLfloat*>(...)
到矩陣數據結構的開頭這樣它將指向所有矩陣列式的方式。這是廣泛的筆觸GLM圖書館是如何工作的?
是否使用了天使圖形教科書中的代碼?它使用你在帖子中描述的機制,允許你簡單地將變量名稱傳遞給'glUniformMatrix'。一般來說,C++狂熱者不喜歡這些方法,但它們在這種情況下很有用。 GLM不使用相同的機制,但如果需要,您可以從這些類中派生出來添加這些方法。就我個人而言,我喜歡轉換操作符,因爲其他方法依賴於公開類的實現。 – radical7
我記得我在Google搜索中找到了天使代碼,它看起來與我們的計算機圖形學課程代碼中的代碼相同。我認爲課程人員使用天使代碼並調整它以符合課程約定。 – DontCareBear