学习OpenGL的初学者 - 这些OpenGL工具是什么?

4
我想开始学习OpenGL,在使用C++编写的软件中使用它。当我尝试学习新东西时,自然的事情是获取适当的文献和在线教程。
然而,在学习OpenGL时,我遇到了困难。我查阅的不同文献和教程几乎立即提到这些术语:
- 非官方OpenGL SDK - GLSL - FreeGLUT - SFLW - GLEW - GLFW - 其他...
即使我查看了这些工具或维基条目的网站,我仍然不理解一些问题,例如:它们实际上与OpenGL有什么关系?为什么要使用其中一个而不是另一个?它们有什么共同点?有什么区别...可能更重要的是,我如何找到我需要(或不需要)的东西?
所以,我非常希望听到关于这个话题的解释。适当的在线阅读参考资料也很好。谢谢。
1个回答

10

开放图形库OpenGL)是一个跨语言、跨平台的应用程序接口(API),用于渲染2D和3D矢量图形。因此,它仅提供绘制基本图元(如点、线、三角形)的手段,但没有高级功能。让我们逐一解析您的清单:

  • "非官方OpenGL SDK"
    这只是一个收集了一些常用功能的库,例如加载图像文件、处理3D对象或创建和管理OpenGL上下文所需的辅助库(它包括你提到的一些其他库,我们将会谈到)。我不建议初学者使用该SDK,而是先学习基础知识,然后仔细选择要使用的附加库。

  • OpenGL着色语言(缩写:GLSL或GLslang)是一种基于C编程语言语法的高级着色语言。
    这不是一个独立的工具,而是现代OpenGL的一个核心概念。你需要它来编写着色器(在现代GL中是必需的)。这是你需要学习的东西,但编译器已经随着你的GL实现一起提供,因此你不需要单独安装。

  • FreeGLUT,GLFW,SFML
    正如我之前所说,OpenGL是跨平台的。但是,人们仍然需要一个特定于平台的API来实际创建OpenGL上下文并将其“连接”到窗口(或平台上存在的任何“可绘制物”)。OpenGL甚至没有“窗口”的概念,因此也没有用于输入事件处理、检测窗口大小调整的方法。这些库为那些特定于平台的GL绑定API和窗口以及事件管理实现了包装,因此你可以轻松地创建OpenGL上下文和适当的窗口,而不必关心所有这些特定于平台的细节。FreeGLUT和GLFW非常专注于为OpenGL开发提供简单的框架,而SFML是一个更通用的多媒体框架(也支持诸如音频输出之类的东西),并能够创建OpenGL上下文和窗口。其他这样的库还有SDL(经常用于游戏),或Qt支持OpenGL小部件。

  • GLEW是“OpenGL扩展包装器”的缩写。 这是一个OpenGL加载库。OpenGL是可扩展的API。因此,在执行应用程序的机器上可能存在某些功能,也可能不存在。此外,在某些平台上定义OpenGL的方式,只有一组特定的函数被保证由库导出。如果需要新版本的功能,则必须使用扩展机制。这意味着,您必须在运行时查询函数指针才能访问这些函数,而不是直接在链接时链接函数。为了简化这个过程,存在这样的加载器库,如GLEW。使用GLEW,你只需要调用glewInit(),然后就可以像你想要的那样使用任何GL函数(只要它被实现支持),忘记所有这些扩展机制的细节。

你在这个列表中真正“需要”的是GLSL,但那不是一个工具。其他的东西都是为了方便,但我强烈建议使用一些平台无关的窗口和上下文管理库(GLFW非常轻量级,但很难说你会需要什么。对于学习OpenGL,GLFW肯定是一个不错的选择),还有一些像GLEW这样的GL加载器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接