OpenGL - GLM和GLSL,它们有何不同
OpenGL - GLM and GLSL, how are they different?
我开始学习OpenGL、GLM和GLSL,我有点困惑。我将在这里说出到目前为止我所理解的内容和我的问题,所以请随时纠正我。
到目前为止,我看到 GLM 扩展了 GLSL 文档,提供了更多的数学函数,但由于 GLM 是基于C++的,它将在 CPU 上运行,另一方面,GLSL 直接在 GPU 中运行,所以我想矩阵数学在 GLSL 中要快得多,因为它可以使用 GPU 的强大功能并行完成所有数学运算。那么为什么要使用 GLM?
它们是完全不同的东西:
- GLSL 是用于编写在 GPU 上运行的着色器程序的语言。 它是C的变体,具有一些特殊的OpenGL特定扩展。 但就您的应用程序而言,GLSL 着色器只是一个要传递给 OpenGL 库的不透明数据文件;它完全独立于主机程序。
- GLM 是一个C++库,用于在 CPU 上处理矢量数据。 为了方便起见,它遵循与GLSL类似的命名约定,但它完全独立于OpenGL。
GLM 并不是 GLSL 的替代品或替代品。 它旨在帮助在GPU上进行有意义的计算 - 例如构建供顶点着色器使用的投影矩阵,或计算3D空间中点之间的距离。
它们是
两个完全不同的东西:
- GLSL(OpenGL 着色语言)是 OpenGL(基于 C 的语法)用于在 GPU 上运行程序的语言,称为着色器,您知道它的用途。它们甚至不是程序的一部分 - 相反,它们是存储在计算机中的两个文件,在运行时传递给OpenGL,然后才进行编译。它提供高级数学有两个原因:无法加载库,因为这是图形编程,这与数学非常相关。
- GLM(OpenGL数学)是一个C++库,用于通过图形编程中常用的函数和类型扩展C++的数学功能 - 所有这些都将在CPU上执行,并且独立于OpenGL。
GLM之所以在名称中使用OpenGL,是因为它是在他们的脑海中以图形编程构建的(换句话说,是为OpenGL制作的)。
简短版本:GLM 适用于您的程序,GLSL 的数学功能适用于您的着色器。
相关文章:
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 无论代码长度如何,以下代码的内存要求有何不同?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- std::u8string与std::string有何不同?
- 两种类型转换有何不同?
- 这个语句到底是什么意思 stack<int, list<int> > 它与 stack 有何不同<int>?
- 英特尔®事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
- 指向成员函数的指针与指向数据成员的指针有何不同
- 字符 * 和字符串在C++中有何不同?(在描述中编写代码)
- 在C++中,Mixin与面向策略的设计有何不同
- "cin>>"与"cin.get"有何不同?还是不是?
- C++11: boost::make_tuple 与 std::make_tuple 有何不同?
- 双重列表复制构造函数:与单一列表复制构造函数有何不同
- OpenGL - GLM和GLSL,它们有何不同