美文网首页
GLM库的使用

GLM库的使用

作者: 凉夜lrs | 来源:发表于2020-10-28 16:07 被阅读0次

简介

OpenGL没有内建矩阵运算方法,常用的第三方库为GLM。GLM是OpenGL Mathematics的缩写。作为一个header only库,GLM只要包括了相应的头文件就可以使用它提供的类和函数。GLM是C++语言编写的,故不适用于C语言工程。

OpenGL Mathematics (GLM) 是基于OpenGL着色语言(GLSL)规范的图形软件的头文件C ++数学库。提供的类和函数使用与GLSL相同的命名约定和功能设计和实现,因此任何知道GLSL的人都可以在C++中使用GLM。这个项目不限于GLSL的功能。基于GLSL扩展约定的扩展系统提供扩展能力:矩阵变换,四元数,数据打包,随机数,噪声等等。这个库与OpenGL完美地工作,但它也确保与其他第三方库和SDK的互操作性。它是软件渲染(光线追踪/光栅化),图像处理,物理模拟和任何需要简单方便的数学库的开发上下文的良好候选。

GLM是用C ++ 98编写的,但是当编译器支持时可以利用C ++ 11。它是一个没有依赖的平台独立库,它正式支持以下编译器:

  • 苹果Clang 6.0及更高版本
  • GCC 4.7及以上
  • 英特尔C ++ Composer XE 2013及更高版本
  • LLVM 3.4及更高版本
  • Visual C ++ 2013及更高版本
  • CUDA 7.0及更高版本(实验版)
  • 任何C ++ 11编译器

头文件

  • GLM对于矩阵数据类型的定义位于glm/glm.hpp头文件中。
  • 生成变换矩阵的函数位于glm/gtc/matrix_transform.hpp头文件中。
  • 生成投影矩阵的函数位于glm/ext/matrix_clip_space.hpp头文件中。
  • 将数组转换成矩阵的函数位于头文件glm/gtc/type_ptr.hpp中。

GLM常用数据类型

  • vec2 二维向量
  • vec3 三维向量
  • vec4 四维向量
  • mat2 二阶矩阵
  • mat3 三阶矩阵
  • mat4 四阶矩阵

GLM常用函数

  • glm::radians()
    角度制转弧度制,可应用于glm::rotate()中。
  • glm::translate()
    返回一个平移矩阵,第一个参数是目标矩阵,第二个参数是平移的方向向量。
  • glm::rotate()
    返回一个将点绕某个轴逆时针旋转一定弧度的旋转矩阵,第一个参数是目标矩阵,第二个参数是弧度,第三个参数是旋转轴。
  • glm::scale()
    返回一个缩放矩阵,第一个参数是目标矩阵,第二个参数是在各坐标轴上的缩放系数。
  • glm::ortho(float left, float right, float bottom, float top, float zNear, float zFar);
    正交投影矩阵。前四个参数分别是视口的左、右、上、下坐标。第五和第六个参数则定义了近平面和远平面的距离。
  • glm::perspective(float fovy, float aspect, float zNear, float zFar);
    透视投影矩阵。第一个参数为视锥上下面之间的夹角,第二个参数为视口宽高比,第三、四个参数分别为近平面和远平面的深度。
  • glm::value_ptr()
    传入一个矩阵,返回一个数组,从左到右按列优先。
  • glm::normalize(vector)
    向量的单位化(保持其方向不变,将其长度化为1).
    可以normalize 一个运算式赋值,直接normalize(a)但不赋值,不能normlize单个向量,然后赋值给其他向量:
// 可以这样使用:
glm::vec3 a = { 3.0, 2.0, 3.0 };
glm::vec3 b = { 1.0, 0.0, 3.0 };
glm::vec3 c = glm::normalize(a*b);
// 或者:
glm::normalize(a); // 直接单位化,这里直接修改了参数a
// 但不能这么使用:
glm::vec3 b=glm::normalize(c);
  • glm::cross(vector1,vector2)
    向量的叉乘。
  • glm::dot(vector1,vector2)
    向量的点乘。
  • 未完待续

GLM矩阵的默认构造

GLM库从0.9.9版本起,默认会将矩阵类型初始化为一个零矩阵(所有元素均为0),而不是单位矩阵。如果使用0.9.9及以上的版本,需要在声明矩阵时传入参数1,例如glm::mat4 mat(1.0f)。

转载

https://blog.csdn.net/qq_40565033/article/details/107716760
https://blog.csdn.net/JuniorChestnut/article/details/106054005

相关文章

  • GLM库的使用

    简介 OpenGL没有内建矩阵运算方法,常用的第三方库为GLM[https://glm.g-truc.net/]。...

  • RcyclerVie 动态设置图片大小

    在使用gridLayoutManager的时候, params.height = glm.getWidth()/...

  • OpenGL配置glm(数学库)

    1.下载glm链接 解压后目录如下,注意蓝色标注的文件夹,等下要用到。 2.如图 3.我的做法:找到VS安装目录,...

  • logistic 模型构建

    使用的是R包glmnet 函数,有些时候由于方法不收敛可以增加迭代次数,使得模型收敛。 log_res<-glm(...

  • 无标题文章

    广义线性模型 R--glm函数 R语言glm函数学习: 【转载时请注明来源】:http://www.cnblogs...

  • 【r<-基础|理论】R获取帮助

    如果要获取关于某个函数的帮助信息,例如glm,输入: 或者 如果想要搜索关于某个操作符的帮助信息,需要用使用反引号...

  • LearnOpenGL 变换

    变化的矩阵原理参照: 变换-LearnOpenGL CN 基础变换 : 缩放, 旋转, 平移 GLM GitHub...

  • Variance in OLS/GLM

    对于GLM来说,如何估计其prediction 的Confidence Interval?以及如何估计其Coeff...

  • [转载]拆一个激光测距仪,PCB主板都这么漂亮

    转自 http://www.ednchina.com/news/article/20180312GLM30?utm...

  • R glm

    R 逻辑回归 R 怎么做逻辑回归

网友评论

      本文标题:GLM库的使用

      本文链接:https://www.haomeiwen.com/subject/fmfcvktx.html