一、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库相关推荐

  1. Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏

    Py之pygame:有趣好玩--利用pygame库实现一个移动底座弹球的小游戏 目录 输出结果 实现代码 输出结果 实现代码 # -*- coding: utf-8 -*-#Py之pygame:有趣好 ...

  2. Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)

    Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟踪i ...

  3. c++代码好玩_Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)...

    Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 ​ 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟 ...

  4. pygame小游戏代码_Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏...

    Py之pygame:有趣好玩--利用pygame库实现一个移动底座弹球的小游戏 目录 输出结果 实现代码 输出结果 ​ 实现代码 # -*- coding: utf-8 -*-#Py之pygame:有 ...

  5. 有趣、好玩、有料的网站收藏

    本来想给自己做得独有的导航的,不过一直没时间折腾,先把本小子觉得有趣.好玩.有料的站点收藏起来.这些站点本小子会经常光顾,主要是一些学习进阶方面的站点. 前端 HTML5资源教程:分享HTML5开发资 ...

  6. python turtle画有趣的图形_Python turtle库绘制简单图形

    一.简介 Python中的turtle库是一个直观有趣的图形绘制函数库.turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形. 二.简单的图形列举 1.绘制4个不同 ...

  7. OpenGL矩阵运算——GLM库的使用

    GLM库简介 OpenGL没有内建矩阵运算方法,常用的第三方库为GLM.GLM是OpenGL Mathematics的缩写.作为一个header only库,GLM只要包括了相应的头文件就可以使用它提 ...

  8. 【OpenGL】glm库的配置

    下载glm库,可点击这里直接下载 下载完后解压一下,把整个glm文件夹复制到你的项目所在文件夹下,如下图所示. 这个文件是glm父文件夹,不是子文件夹,该文件夹下还有一个glm子文件夹 右击你的项目, ...

  9. 娱乐 | 14个简单、有趣、好玩的Linux命令

    本文已收录github:https://github.com/BigDataScholar/TheKingOfBigData,里面有大数据高频考点,Java一线大厂面试题资源,上百本免费电子书籍,作者 ...

最新文章

  1. 手机扫一扫,现实物体隔空「复制粘贴」进电脑!北大校友的AI新研究,现在变成AR酷炫应用...
  2. NR 5G 移动性和状态变化
  3. 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)
  4. 邮箱通知php,PHPMailer 发送邮件(含详细介绍及使用方法说明)
  5. 基于OOS批量修改资源标签值
  6. [Cocos2d-x]Cocos2d-x 3.2 学习笔记
  7. linux下C\C++ 开发小笔记
  8. sklearn模型使用贝叶斯优化调参(以随机森林为例)
  9. IOC控制反转(依赖注入思想)
  10. vs2005 生成安装包的时候提示“不可恢复的生成错误”
  11. 求整数数组的最小值c语言,编程实现求一个整数数组num[]中的最大值与最小值并输出结果的程序...
  12. 常用的Linux命令
  13. 大数据告诉你,上海二手房到底难不难卖?
  14. 基于微软 SAPI 的 TTS 程序实现
  15. Python_首字母大写
  16. 智慧物流在大宗货运领域“落地”有多难?
  17. 怎样保护个人信息安全建议?
  18. MySQL三 插入语句包含查询语句
  19. FFMPEG 播放 RTSP视频流
  20. 使用element-ui实现表格分页

热门文章

  1. python 递归乘法
  2. 八进制、十进制、十六进制及字符相互对应表
  3. android transform xml xsl,XslCompiledTransform.Transform 方法 (System.Xml.Xsl) | Microsoft Docs
  4. mysql 1366in_如何实战解决mysql#1366错误
  5. vue/cli 3.0 与 2.0脚手架怎样mock数据
  6. Python代码加密,将python文件编译成so文件
  7. tensorflow只用CPU运行
  8. html漂浮在左侧不动,[CSS]CSS练习-悬浮不动侧边栏
  9. css3 线条出现动画效果,CSS3实现的线条波浪动画效果
  10. 【C++】35.判断一个文件是否存在、 查找字符串中的子串