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

Posted

技术标签:

【中文标题】OpenGL - GLM 和 GLSL,它们有何不同?【英文标题】:OpenGL - GLM and GLSL, how are they different? 【发布时间】:2013-11-13 05:57:21 【问题描述】:

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

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

【问题讨论】:

glm 是 c++ 的数学库,而 glsl 是编程语言。您使用 glm 进行简单的数学计算,然后将数据上传到 gpu 以便 glsl 可以使用它。 @AntonD 但它被称为 OpenGL 数学 (GLM),我猜它与图形处理有关。 它的名称中有 opengl,因为它遵循相同的命名约定,例如在着色器中你有“vec3”并使用glm你也可以创建一个对象“vec3” 【参考方案1】:

它们是完全不同的东西:

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

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

【讨论】:

【参考方案2】:

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

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

GLM 之所以以 OpenGL 命名,是因为它是在他们的脑海中使用图形编程构建的(换句话说,是为 OpenGL 设计的)。

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

【讨论】:

以上是关于OpenGL - GLM 和 GLSL,它们有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

GLSL 中的正常旋转

我的渲染技术进阶之旅GLM使用手册 GLM 0.9.9 Manual

我的渲染技术进阶之旅GLM使用手册 GLM 0.9.9 Manual

glm中矩阵值的顺序不正确?

Qt 4.6 OpenGL GLSL

GLSL 和 GLM 之间的矩阵数学不一致,或者是不是存在“坏”视图矩阵之类的东西