我想开始学习OpenGL,在用C ++语言编写的软件中使用它。我在尝试学习新东西时所做的自然就是获取适当的文献和在线教程。
然而,对于OpenGL,我陷入困境。我检查的不同文献和教程几乎立即提到了术语,如:即使我检查了这些工具或wiki条目的网站,我仍然不明白这样的事情:它们实际上与OpenGL有什么关系,为什么使用一个而不是另一个,它们有什么共同点,什么是差异......可能最重要的是,我如何找到我(不需要)的东西?
所以我非常想听听有关这个主题的解释。参考适当的在线阅读也很好。谢谢。
答案 0 :(得分:7)
开放图形库(OpenGL)是一种跨语言,跨平台的应用程序编程接口(API),用于渲染2D和3D矢量图形。因此,它仅提供绘制基本图元(如点,线,三角形)的方法,但不提供高级功能。让我们通过您的列表:
" 非官方OpenGL SDK "
这只是一个库的集合,提供一些(或多或少)经常需要的功能,如加载图像文件,或使用3D对象,或帮助库来创建和管理OpenGL上下文(它确实包括你提到的其他一些库,我们不会这样做。)我不建议使用SDK作为初学者,但只是学习基础知识并仔细选择您想要使用的其他库。
OpenGL着色语言(缩写为:GLSL或GLslang)是一种基于C编程语言语法的高级着色语言。
这不是一个单独的工具,而是现代OpenGL的核心概念。您将需要它来编写着色器(现代GL中需要它)。这是你明确需要学习的东西,但是这种语言的编译器附带你的GL实现,所以这不需要你单独安装。
FreeGLUT,GLFW,SFLM
正如我已经说过的,OpenGL是与平台无关的。一个人仍然需要一个特定于平台的API来实际创建OpenGL上下文和" connect"他们到窗户(或任何" drawables"平台上有)。 OpenGL甚至没有" window"的概念,因此,也没有用于输入事件处理,检测窗口大小调整的方法。这些库为那些特定于平台的GL绑定API以及窗口和事件管理实现了包装器,因此您可以创建OpenGL上下文和合适的窗口,而无需关心所有这些特定于平台的详细信息。 FreeGLUT和GLFW非常注重为OpenGL开发提供简单的框架,而SFML是一个更通用的多媒体框架(也支持音频输出等),并且能够创建OpenGL上下文和窗口。其他类似的库是SDL(通常用于游戏),或者是支持OpenGL小部件的Qt。
GLEW 是" OpenGL扩展争吵者"的简称。
这是OpenGL loading library。 OpenGL是一个可扩展的
API。因此,您的应用程序执行的机器上可能存在或可能不存在功能。此外,在某些平台上定义OpenGL的方式,只保证库中导出一组特定的函数。如果您需要更新版本的功能,则必须使用扩展机制。这意味着,不必在链接时直接链接函数,而是必须查询_runtime_
处的函数指针以访问这些函数。为了简化该过程,存在像GLEW这样的加载程序库。使用GLEW,您需要做的就是调用glewInit()
,然后您可以根据需要使用任何GL函数(只要实现支持它),忘记扩展机制的所有细节。
你真正需要的是什么"这个清单:GLSL,但那不是一个工具。其他的东西是为了方便,但我强烈建议使用一些独立于平台的窗口和上下文管理库(GLFW非常轻量级,但很难说你需要什么。对于学习OpenGL,GLFW肯定是一个不错的选择。)以及像GLEW这样的GL装载机。