所以...目前我们有 OpenGL 4.2,正如我在某处读到的那样,它需要 dx11 硬件(这是什么意思?)和一组“侧面”库,例如创建窗口。
DX11 硬件是……在盒子侧面写有“支持 DirectX 11”的硬件。我不确定你在这里问的是什么;您是否不清楚 Direct3D 是什么、D3D 11 是什么,或者 D3D 11 与以前的版本有什么区别?
仅供参考:D3D 是使用 OpenGL 访问渲染硬件的仅限 Windows 的替代方案。版本 11 只是 API 的最新版本。与 D3D10 相比,D3D11 增加了一些新东西,但对于初学者来说并不需要太多。
OpenGL是一种描述图形操作的某种接口的规范。这个接口是如何创建的不是 OpenGL 的一部分。因此,每个平台都有自己的方式来创建 OpenGL 上下文。Windows 使用带有 WGL 的 Win32 API。X-Windows 使用带有 GLX 函数的 X-Windows API。等等。
GLUT、GLFW 等库是抽象所有这些差异的库。他们为您创建和管理一个 OpenGL 窗口,因此您不必使用特定于平台的详细信息弄脏您的代码。您不必使用它们中的任何一个。
当然,如果您对学习OpenGL感兴趣,最好避免处理特定于平台的细节,例如如何处理 HWND 等。
我们还有 GLEW,它是扩展加载实用程序...等等...不是 GLUT/GLFW 已经是扩展了吗?有什么理由使用它,比如有什么真正重要的扩展可以引起兴趣吗?
这是另一个误解。GLUT 是一个库,而不是扩展。OpenGL 扩展是 OpenGL 的一部分。看,OpenGL 只是一个规范,一个文档。您当前使用的 OpenGL 实现实现了 OpenGL 图形系统,但它也可能实现该图形系统的许多扩展。
GLUT 不是 OpenGL 的一部分;它只是一个图书馆。GLUT 的工作是创建和管理一个 OpenGL 窗口。GLEW 也是一个库,用于加载 OpenGL 函数。它不是唯一的选择,但它是一种流行的选择。
到目前为止,我们已经创建了窗口(和一些实用程序),但是...... OGL 不负责加载纹理,也不负责加载 3D 模型。我还需要多少其他库?
OpenGL 不是游戏引擎。它是一个图形系统,专为与专用图形硬件接口而设计。这项工作与从任何类型的文件加载任何内容之类的事情无关。是的,制作游戏需要这个,但如前所述,OpenGL 不是游戏引擎。
如果您需要加载文件格式来执行您想做的事情,那么您将需要编写代码来执行加载(以及与 GL 接口所需的格式调整)或下载一个库来为您完成它。OpenGL Wiki 维护了一个很好的用于不同任务的工具列表。
有(在)著名的 NeHe 教程。使用 WinApi 用 C 语言编写,代码非常不清晰,解决方案过时,但仍然是最受欢迎的。可以找到一些像红皮书这样的东西,它们与 2.x 或 3.x 等版本相关,但是只有很少的(和未完成的)教程提到 4.x。
带什么去?
OpenGL Wiki 维护着一个在线资料列表,用于学习 OpenGL 的东西,包括老式的和更现代的。
警告:无耻的自我推销随之而来!
我关于学习图形的教程非常好,有很多部分,并且仍在积极进行中。它没有教授任何 OpenGL 4.x 特定的功能,但 OpenGL 3.3 与 4.2 完全兼容。所有这些程序都可以在 4.x 硬件上正常运行。