所以,目前我们有OpenGL 4.2版本,据我在某处读到,需要dx11硬件(这是什么意思?)和一组“附带的”库,例如创建窗口。
DX11硬件是...在箱子上写着“支持DirectX 11”的硬件。我不确定你在问什么;你不清楚什么是Direct3D,什么是D3D 11,或者什么将D3D 11与之前的版本分开吗?
FYI:D3D是在Windows上使用OpenGL访问渲染硬件的替代方法。第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硬件上正常运行。