OpenGL - GLM和GLSL,它们有何不同?

时间:2013-11-13 05:57:22

标签: c++ opengl matrix glsl glm-math

我开始了解OpenGL和GLM以及GLSL,我感到有些困惑。我会在这里说到目前为止我所理解的和我的问题,所以请随时随地纠正我。

到目前为止,我看到GLM扩展了提供更多数学函数的GLSL文档,但由于GLM是基于C ++的,它将在CPU上运行,另一方面,GLSL直接在GPU中运行,所以我猜矩阵数学很多GLSL更快,因为它可以使用GPU的功能并行完成所有数学运算。那么为什么要使用GLM?

2 个答案:

答案 0 :(得分:11)

他们是完全不同的东西:

  • GLSL是用于编写在GPU上运行的着色器程序的语言。它是C的变种,带有一些特殊的OpenGL特定扩展。但就您的应用程序而言,GLSL着色器只是一个传递给OpenGL库的不透明数据文件;它完全独立于主机程序。
  • GLM是一个C ++库,用于处理CPU上的矢量数据。为方便起见,它遵循与GLSL类似的命名约定,但它完全独立于OpenGL。

GLM不是GLSL的替代品或替代品。它的目的是帮助进行在GPU上没有意义的计算 - 例如构建顶点着色器使用的投影矩阵,或者计算3D空间中点之间的距离。

答案 1 :(得分:1)

他们有两件完全不同的东西:

  • GLSL(OpenGL着色语言)是OpenGL使用的语言(基于C的语法)在GPU上运行程序,称为着色器,你知道它的目的。它们甚至不是你程序的一部分 - 相反,它们是存储在你的计算机中的两个文件,它们在运行时被传递给OpenGL,然后它们才被编译。它提供高级数学有两个原因:没有办法加载库,因为这是图形编程,这与数学非常相关。
  • GLM(OpenGL数学)是一个C ++库,用于扩展C ++的数学功能,包括图形编程中常用的函数和类型 - 所有这些都将在CPU上执行,并且它可以在#39上执行;独立于OpenGL。

GLM在其名称中使用OpenGL的原因是因为它是在他们的脑海中使用图形编程构建的(换句话说,是为OpenGL制作的)。

简短版本:GLM适用于您的程序,GLSL的数学功能适用于您的着色器。