有趣又好玩的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++了,大量模板的人估计就更少了

时间: 2024-11-04 09:03:03

有趣又好玩的glm库的相关文章

爱创课堂分享“15 个有趣的 JS 和 CSS 库”,

划重点 迎来了黄金10 月,在这收获的季节,我又为你们带来了哪些新鲜.有趣的前端资源呢?前端开发者们,一起来看看有木有你需要的前端库. 1.DisplayJS DisplayJS 是一个帮助你渲染 DOM 的简易框架.使用它,你可以更容易地将 JS 变量遍历到特定的 HTML 元素中,类似于 React 或 Vue.js 处理模版的方式. 2.React Beautiful DnD 这是由 Atlassian 开源的用于制作拖拽组件的 React 库.它提供了强大.易用的 API,以及丰富的定制

15 个有趣的 JavaScript 与 CSS 库

原文转载:http://www.codeceo.com/article/15-interesting-js-css-framework.html 1. Wing Wing 是一个微型(压缩后仅有4KB)响应式的 CSS 框架,它提供了一个 12 列响应式网格以及基础的样式组件集,可为你的建站工作打下坚实的基础.当然,这个项目最酷的地方在于,它绝大多数的 HTML 元素都是自动样式化的,而不需要任何额外的类.希望你会喜欢! HERE:Wing 项目地址 2. Shave Shave 是一个零依赖.

十个有趣的你可以为之贡献并从中学习的Java项目

 如果你正在寻找有意思的Java项目来参与和贡献,那么继续阅读这篇文章.这篇文章是我们的Java项目陈列室,在这里我将给我的读者提供一些有趣的Java项目.成为Java开发团队的一分子并且写一些代码总是不错的选择. 在学校学院里,我们可能没有接触过真正的开发工作.在公司我们可能没法选择我们喜欢的项目.这样,让我们加入开源项目吧,因为这些对于我们来说有趣又好玩. 有很多开源资源方案正在招募,下面这十个项目,我认为有趣,并且能学到很多.他们其中有些正处于开始阶段,这样甚至更好.瞧瞧他们,从中选择

Linux环境编程编译工具与动态态库

linux环境下的编译器gcc gcc: -o               编译链接生成可执行文件 -O  -O1 -O2 -O3  编译优化 -g  -g1 -g2 -g3 产生调试信息至可执行文件 -w  关闭所有的警告 -W  all,error     -Wall显示所有的警告 -Werror把所有的警告当错误 -c  编译生成目标文件  不链接 -E 预编译 -S 编译成汇编 -D 在命令行中添加宏定义 -x 指定语言的编译类型   gcc -x c xxxx.c   gcc -x a

Python turtle库绘制简单图形

一.简介 Python中的turtle库是一个直观有趣的图形绘制函数库.turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形. 二.简单的图形列举 1.绘制4个不同半径的同切圆 代码: import turtleturtle.pensize(4)turtle.circle(10)turtle.circle(40)turtle.circle(80)turtle.circle(120)turtle.done() 结果: 2.六角形的绘制,利用turtle库绘制一个

准备踏入IT编程的学子们,你们第一门编程语言选谁? Are You Ready? Go!

Are You Ready? Go! ——第一门编程语言选谁? 金旭亮 说明: 这篇文章是专门针对大学低年级学生(和其他软件开发初学者)写的,如果你己经是研究生或本科高年级学生,请将这篇文章转发给你的师弟或师妹,希望这篇文章能够帮助他们少走弯路,顺利地迈入软件开发的大门:如果您是一位有经验的软件开发者,或者是关注计算机教育的同行,也敬请提出宝贵意见. 发表看法请在本贴评论,或者在我的新浪微博“北理工教师金旭亮(http://weibo.com/jinxuliang)”上相互沟通. 本文仅代表个人

Weex详解:灵活的移动端高性能动态化方案

在2016年4月份的QCon上,阿里巴巴资深总监,淘宝移动平台及新业务事业部.阿里百川负责人庄卓然(花名南天)宣布阿里移动端跨平台开发框架Weex开始内测,并将于6月份开源.在QCon的第二天,阿里技术专家徐凯(花名鬼道)和阿里前端开发专家赵锦江(花名勾股)向参会者做了<Weex——灵活的移动端高性能动态化方案>的演讲,对这一技术方案进行了详细的剖析. 以下为演讲内容的整理: 昨天南天宣布Weex启动开源内测,截至到今天中午,我们统计申请内测用户突破1400人,大家的热烈程度远远超过我们的设想

没GPU也能玩梵高作画:Ubuntu tensorflow CPU版

            没GPU也能玩梵高作画:Ubuntu tensorflow CPU版 作者:七月在线开发/市场团队骁哲.李伟.July时间:二零一六年九月二十七日 一.前言 9月22号,我们开发/市场团队的两同事利用DL学梵高作画,安装cuda 8.0趟遍无数坑,很多朋友求避坑.因此,3天后的9月25日,便把教程<教你从头到尾利用DL学梵高作画:GTX 1070 cuda 8.0 tensorflow gpu版>公布出去.但令人尴尬的是,不少同学没有GTX 1070.甚至没有一块像样的

2016预测哪些公司增值最猛?

2016预测哪些公司增值最猛? 2016年是资本市场的改革年,熔断机制实施,注册制.战略新兴板.新三板转板也都已排定日程.这些改革措施,都是为了吸引更多优质资产与资本进入市场.今年,也将有一批互联网公司登陆A股市场,为未来经济注入新的活力.这些公司的业务.用户都在本地,相比海外市场公司更能获得认可,价值也可以最大化,因此目前的估值都在千亿以上.科技杂谈对这些公司进行了一个汇总. 1.奇虎360 作为最大规模的中概股私有化交易,从去年6月份宣布私有化开始,奇虎360的每一步私有化进程都备受瞩目.私