有趣又好玩的glm库

简介:

一、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++了,大量模板的人估计就更少了



 本文转自 老G 51CTO博客,原文链接:http://blog.51cto.com/goldlion/1680971,如需转载请自行联系原作者


相关文章
|
11月前
|
机器学习/深度学习 缓存 自然语言处理
义无反顾马督工,Bert-vits2V210复刻马督工实践(Python3.10)
Bert-vits2更新了版本V210,修正了日/英的bert对齐问题,效果进一步优化;对底模使用的数据进行优化和加量,减少finetune失败以及电音的可能性;日语bert更换了模型,完善了多语言推理。
义无反顾马督工,Bert-vits2V210复刻马督工实践(Python3.10)
|
搜索推荐 数据挖掘 PyTorch
Py之albumentations:albumentations库函数的简介、安装、使用方法之详细攻略续篇
Py之albumentations:albumentations库函数的简介、安装、使用方法之详细攻略续篇
Py之albumentations:albumentations库函数的简介、安装、使用方法之详细攻略续篇
|
3月前
|
机器学习/深度学习 存储 算法
【Python】 基于Q-learning 强化学习的贪吃蛇游戏(源码+论文)【独一无二】
【Python】 基于Q-learning 强化学习的贪吃蛇游戏(源码+论文)【独一无二】
124 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
|
6月前
|
机器学习/深度学习 自然语言处理 程序员
FastAI 之书(面向程序员的 FastAI)(三)(1)
FastAI 之书(面向程序员的 FastAI)(三)(1)
66 2
|
6月前
|
机器学习/深度学习 PyTorch 程序员
FastAI 之书(面向程序员的 FastAI)(三)(2)
FastAI 之书(面向程序员的 FastAI)(三)(2)
110 2
|
6月前
|
PyTorch 程序员 API
FastAI 之书(面向程序员的 FastAI)(三)(3)
FastAI 之书(面向程序员的 FastAI)(三)(3)
66 2
|
6月前
|
机器学习/深度学习 PyTorch 程序员
FastAI 之书(面向程序员的 FastAI)(二)(4)
FastAI 之书(面向程序员的 FastAI)(二)(4)
66 2
|
6月前
|
机器学习/深度学习 算法 数据挖掘
FastAI 之书(面向程序员的 FastAI)(四)(4)
FastAI 之书(面向程序员的 FastAI)(四)
91 1
|
6月前
|
搜索推荐 PyTorch 程序员
FastAI 之书(面向程序员的 FastAI)(四)(1)
FastAI 之书(面向程序员的 FastAI)(四)
57 0