Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL-GLM和GLSL,它们有什么不同?_C++_Opengl_Matrix_Glsl_Glm Math - Fatal编程技术网

C++ OpenGL-GLM和GLSL,它们有什么不同?

C++ OpenGL-GLM和GLSL,它们有什么不同?,c++,opengl,matrix,glsl,glm-math,C++,Opengl,Matrix,Glsl,Glm Math,我开始学习OpenGL、GLM和GLSL,我有点困惑。我会在这里说我到目前为止所理解的和我的问题,所以请随时纠正我 迄今为止,我看到GLM扩展了GLSL文档,提供了更多的数学函数,但是由于GLM是基于C++的,它将在CPU上运行,另一方面,GLSL直接在GPU中运行,所以我猜想矩阵数学在GLSL中的速度更快,因为它可以使用GPU的电源并行地执行所有的数学。那么为什么要使用GLM呢?它们是完全不同的东西: GLSL是用于编写在GPU上运行的着色器程序的语言。它是C的一个变体,带有一些特定于Ope

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


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

它们是完全不同的东西:

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

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

它们是两件完全不同的事情:

  • GLSL(OpenGL着色语言)是OpenGL(基于C的语法)用于在GPU上运行程序的语言,称为着色器,您知道着色器的用途。它们甚至不是程序的一部分,而是存储在计算机中的两个文件,在运行时传递给OpenGL,然后才进行编译。它提供高级数学有两个原因:无法加载库,因为这是图形编程,与数学非常相关
  • GLM(OpenGL Maple)是一个C++库,用于扩展C++的数学能力,它与图形编程中常用的函数和类型相结合,所有这些都将在CPU上执行,并且独立于OpenGL。
GLM之所以以OpenGL命名,是因为它是在他们的头脑中用图形编程构建的(换句话说,是为OpenGL制作的)


短版本:GLM是针对你的程序,GLSL的数学能力是为着色器编写的。

GLM是C++的数学库,而GLSL是一种编程语言。您可以使用glm进行简单的数学计算,然后将数据上载到gpu,以便glsl可以使用它。@AntonD但它被称为OpenGL Mathematics(glm),我猜它与图形操作有关。它的名称中有OpenGL,因为它遵循相同的命名约定,例如在着色器中有“vec3”使用glm还可以创建一个对象“vec3”