有趣又好玩的glm庫

2021-09-04 10:56:03 字數 1350 閱讀 6438

一、glm的優點

glm是乙個發展了十年以上的數學庫,這個庫很不錯。很多教材,書籍,資料大量使用glm,了解glm有助於閱讀這些資料。

1.模仿glsl的介面

這個實在是非常方便理解和記憶,你不需要在c++和glsl中使用兩套完全不同的介面

2.大量採用模板

**復用率非常高,而且結構可以說是模板類庫的典範

3.數學化的,和大腦導向的思維方式

和其他數學庫不同,glm的**偏向數學理論的使用,有很多地方是以直觀和復用為主的

4.介面友好,精度***

大量模板引數的使用,既擴充了介面數量,又保證了支援不同精度,和型別轉換的正確。而這些恰恰是非模板數學庫的弱項。

二、glm有趣和獨特的設計

1.detail名字空間

使用detail名字空間,隔離「內部函式」,這對於使用者程式設計師來說,很容易知道哪些函式是可以直接呼叫的,並且對於**補全也很有幫助。

2.型別設計,只提供+-x/,其他計算放到外面

對於vec,mat等型別,類本身只提供了+-x/等基礎運算,而其他運算,比如求模,點乘,叉乘,矩陣乘法,特殊矩陣構造等等都放到外部通過全域性函式來提供,而不是提供乙個類成員函式。之所以這樣做,是因為其他複雜函式,都可以看成是基本運算的組合(有些全域性函式的編寫,還需要增加三角函式呼叫來支援)。

這樣做的優點非常多

1.保證型別本身足夠簡單,非常容易閱讀與維護

2.比起成員函式,全域性函式可以很容易的修改替換(因為在不同檔案中)。甚至使用者自己擴充套件可以通過增加標頭檔案來完成

3.高度復用性,比如求模函式,外部乙個函式介面,內部**完全一樣,只靠模板引數來匹配。反例就是,如果你使用成員函式,你將不得不對於每乙個型別提供乙個求模函式

3.全域性函式+模版類偏特化——實現函式呼叫的**

很多全域性函式,只提供乙個入口呼叫,內部使用模版類偏特化來匹配模板引數,完成對應型別的函式呼叫**,這個寫法非常有趣。我們知道全域性函式呼叫,使用乙個入口,可以非常方便的修改,例如加入條件編譯巨集等,而模版類偏特化又保證了擴充套件性。

4.復用優先

例如,對於矩陣相乘,glm直接採用向量寫法。glm的編寫,在很多地方,直接採用向量。這一方面,極大簡化了**量,同時也體現出作者對於數學的深刻理解。

而很多其他數學庫不同,向量運算採用不多,比如矩陣相乘直接採用元素寫法。

三、難點

1.glm對於數學功能拆的很細

同乙個型別的很多功能,分散在不同的檔案中,這閱讀起來有一定的難度,尤其是缺乏數學基礎的人

2.大量使用模板

對於模板不熟悉的人,閱讀有難度,現在國內移動遊戲專案開發很少直接大量用c++了,大量模板的人估計就更少了

有趣又好玩的glm庫

一 glm的優點 glm是乙個發展了十年以上的數學庫,這個庫很不錯。很多教材,書籍,資料大量使用glm,了解glm有助於閱讀這些資料。1.模仿glsl的介面 這個實在是非常方便理解和記憶,你不需要在c 和glsl中使用兩套完全不同的介面 2.大量採用模板 復用率非常高,而且結構可以說是模板類庫的典範...

OpenGL 矩陣變換GLM庫的使用

glm和mvp矩陣操作速記 連續工作15小時,累了,睡覺。若未特別說明,以下示例均假設矩陣 向量為四維 glm mat4 mat glm vec4 vec 對於vec來說,第四位為1代表座標,0代表方向 平移矩陣 1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 構造平移矩陣 glm ...

php好玩的原始碼 PHP 經典有趣的演算法

原文 1 一群猴子排成一圈,按1,2,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去 如此不停的進行下去,直到最後只剩下乙隻猴子為止,那只猴子就叫做大王。要求程式設計模擬此過程,輸入m n,輸出最後那個大王的編號。function king n,...