5

我开始学习 OpenGL、GLM 和 GLSL,我有点困惑。我会在这里说一下我到目前为止所理解的和我的问题,所以请随时纠正我。

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

4

2 回答 2

15

它们是完全不同的东西:

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

GLM 并不意味着作为 GLSL 的替代品或替代品。它旨在帮助处理在 GPU 上没有意义的计算——比如构建一个投影矩阵供顶点着色器使用,或者计算 3D 空间中点之间的距离。

于 2013-11-13T06:51:23.640 回答
1

它们是两个完全不同的东西:

  • GLSL(OpenGL Shading Language)是 OpenGL(基于 C 的语法)用来在 GPU 上运行程序的语言,称为shaders,你知道它的用途。它们甚至不是您程序的一部分——相反,它们是存储在您的计算机中的两个文件,它们在运行时被传递给 OpenGL,然后才被编译。它提供高级数学有两个原因:无法加载库,以及因为这是图形编程,与数学非常相关。
  • GLM(OpenGL 数学)是一个 C++ 库,用于通过图形编程中常用的函数和类型扩展 C++ 的数学能力——所有这些都将在 CPU 上执行,并且独立于 OpenGL。

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

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

于 2016-09-06T20:24:37.593 回答