当前位置: 首页 > news >正文

老知识:OpenGL 的 glu这个库已被弃用,改用glm了

太久没有写底层代码,傻傻分不清glu和glm。今天查了一下,发现OpenGL 的 glu这个库已被弃用,不更新了。
OpenGL 的 GLU (OpenGL Utility Library) 已经被弃用多年,尤其是在现代 OpenGL 核心配置文件(Core Profile)中。以下是详细解释以及 GLM 成为主流替代方案的原因:


1. GLU 为何被弃用?

固定功能管线的淘汰:GLU 依赖于 OpenGL 的旧版固定功能管线(Fixed-Function Pipeline),例如 gluPerspectivegluLookAt 等函数,这些功能在现代 OpenGL 的可编程管线(Programmable Pipeline)中已不再直接支持。
依赖过时特性:GLU 的某些功能(如曲面细分 gluNurbsSurface、二次几何体 gluSphere)需要旧版矩阵堆栈和固定光照模型,而现代 OpenGL 已移除这些特性。
官方弃用:自 OpenGL 3.0(2008年)起,GLU 不再被维护,且未被纳入核心规范。主流驱动和操作系统逐渐停止支持。


2. GLM 的崛起

GLM (OpenGL Mathematics) 是一个轻量级的 C++ 数学库,专为 OpenGL 设计,完全兼容 GLSL(OpenGL Shading Language)的语法和功能。其优势包括:
现代数学支持:提供向量、矩阵、四元数等运算,完美适配可编程管线。
替代 GLU 功能:例如:
glm::perspective 替代 gluPerspective
glm::lookAt 替代 gluLookAt
跨平台和头文件库:无需编译,直接包含头文件即可使用。
活跃维护:持续更新支持最新 OpenGL 和 Vulkan 标准。


3. GLU vs. GLM 的用途对比

功能GLUGLM
矩阵操作依赖固定管线函数提供纯数学计算(如 glm::mat4
投影/视图矩阵gluPerspectivegluLookAtglm::perspectiveglm::lookAt
几何体生成gluSpheregluCylinder需手动实现或使用其他库(如 Assimp)
曲面细分gluNurbsSurface需用细分着色器或计算着色器

4. 现代 OpenGL 的替代方案

数学运算:优先使用 GLM,或选择其他库(如 Eigen)。
几何体生成:使用模型加载库(如 Assimp)或手动生成顶点数据。
高级功能:依赖着色器(Shader)实现,例如用细分着色器替代 gluNurbsSurface


5. 代码示例对比

GLU 旧代码(已过时):

glMatrixMode(GL_PROJECTION);
gluPerspective(45.0f, aspectRatio, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0,0,5, 0,0,0, 0,1,0);

GLM 现代代码

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>

glm::mat4 projection = glm::perspective(glm::radians(45.0f), aspectRatio, 0.1f, 100.0f);
glm::mat4 view = glm::lookAt(glm::vec3(0,0,5), glm::vec3(0,0,0), glm::vec3(0,1,0));
// 通过 Uniform 传递到着色器

总结

GLU 已过时,仅适合维护遗留代码;新项目应避免使用。
GLM 是现代 OpenGL/Vulkan 开发的事实标准数学库,建议优先采用。
• 学习资源应关注可编程管线和着色器编程(如 LearnOpenGL 等教程)。

如需处理旧项目中的 GLU 代码,可逐步替换为 GLM 或自定义数学实现。

相关文章:

  • 【Azure 架构师学习笔记】- Azure Networking(1) -- Service Endpoint 和 Private Endpoint
  • 操作系统的概念、功能和目标
  • 耘想Docker版Linux NAS的安装说明
  • 存算一体与存算分离:架构设计的深度解析与实现方案
  • Linux文件操作笔记
  • 手撕算法之`vector` 扩容、`string` 分割、链表翻转
  • 头歌实训--Pandas合并数据集--第1关:Concat与Append操作
  • vue使用element-ui自定义样式思路分享【实操】
  • freeswitch(在呼叫失败的情况下如何播放语⾳提⽰)
  • 【音视频开发】第三章 FFmpeg 命令实战
  • Java遍历魔法
  • 嵌入式笔记 | 正点原子STM32F103ZET6 3 | 时钟系统
  • 【MySQL】基本查询(第一弹)
  • P10045 [CCPC 2023 北京市赛] 线段树
  • docker部署dify
  • VNA操作使用学习-14 再测晶振特性
  • 发布第四代液晶电视,TCL引领全新美学境界
  • 理解 RAG 第四部分:RAGA 和其他评估框架
  • Android BLE 权限管理
  • 城市街拍人像自拍电影风格Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 广西北部湾国际港务集团副总经理潘料庭接受审查调查
  • 江西贵溪:铜板上雕出的国潮美学
  • 西北大学副校长成陕西首富?旗下巨子生物去年净利超20亿,到底持股多少
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号
  • 科创板年内第3家!健信超导IPO获受理,拟募资8.65亿
  • 全球前瞻|特朗普访问中东三国,印巴军方将于12日再次对话