学习现代OpenGL(3.0或更高版本)的良好资源?[关闭]


73

我偶然发现了从OpenGL(3.0或更高版本)开始的良好资源搜索。好吧,我发现了很多书,但是没有一本可以被认为是很好的资源!

这里有两个例子:

OpenGL编程指南(第7版) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 这是已弃用的材料!几乎每个章节都以注释开头。

OpenGL Superbible(第5版) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 本书使用作者创建的库来解释主要的论点,隐藏您想学习的内容!我不想学习如何使用您的图书馆!我想学习OpenGL!

我希望您理解的问题不像“嘿,我无法使用Google ...告诉我如何学习OpenGL”之类的问题。我刚刚完成了一次全面而深入的搜索,但是我找不到一个很好而又完整的资源来学习“新的” OpenGL,避免了过时的主题。

有人可以朝正确的方向前进吗?我知道C ++,我有10年的开发经验...在哪里可以找到好的资源?我想花时间在上面,并且我想深入学习。

Answers:


69

我同意以上几本书,但有几点注意事项:

  • OpenGL编程第八版指南现已发布,并且已针对现代OpenGL 4.3重做。

  • SuperBible 5th ed确实为您提供了一个拐杖库,但是当您翻阅本书时,您会重新实现该库的功能,因此,在书的最后,您应该完全精通。如果您使用面向对象的语言,我也强烈建议将OpenGL内容包装在某种东西中。我正在自己的图书馆工作,很有趣,这似乎是必须走的路,我自己实现了它,我了解了所有的来龙去脉,并且只需要放入我实际使用的部分即可。您还可以抽象化一些东西,例如将数据发送到着色器(不是ShinyMaterial.setColor(Red)更好),这还可以让您通过提供旧的替代方法来回溯某些东西。也有oglplus

学习现代“核心” OpenGL的主要问题是,即使只是绘制一个立方体,也要建立并运行基本管道,您需要了解以下内容:

  • 矩阵运算(如果使用C ++,请使用GLM,在这里也需要MatrixStack OpenGL非官方SDK的版本,或者在这里简单的版本。)
  • GLSL着色器编程。
  • 将数据绑定到着色器和顶点缓冲区对象。如果您只想学习真正的纯核心配置文件,那么它们都需要同时实现,并且如果有任何损坏,您将什么也看不到,并且几乎不知道哪里出了问题。这还不包括基本照明(除了编程语言之外,您还需要学习着色算法)之类的内容。

但是,您无需从核心配置文件入手。在开始时使用一些不推荐使用的功能,几乎所有内容仍将支持它,然后对其进行现代化。

另一个问题是,“现代” OpenGL确实可以指三件事:

  • 第一个是可编程着色器管线,而不是固定功能管线。自OpenGL 2.0于2004年发布以来,核心的“现代”技术就已成为可能,当时引入的着色器(本教程只是未更新)也具有1.5的顶点缓冲对象(Vertex Buffer Objects)是现代OpenGL的另一个基石。一个问题是,即使在今天,OpenGL开发人员可能甚至无法利用所有这些东西,那里有很多糟糕的上网本,其中只有那些仅支持OpenGL 1.5的英特尔芯片组和仅支持老版本iPhone / Android的手机OpenGL ES 1.1。OpenGL 2.0和OpenGL 3.x / 4.x中这些内容之间的唯一真正区别是,现在对于核心配置文件是强制性的。

  • 现代OpenGL也可以引用3.x,4.x中的新内容。诸如顶点数组对象缓冲区对象统一缓冲区对象 / std140布局限定符GLSL子例程之类的东西等等。我发现的许多内容可以使编写程序变得更好。他们还可以巧妙地改变您的整体发动机管道。这些东西还可以使您通过创建辅助函数等来进行反向移植(例如,编写一个通用的着色器管理器对象,可用于设置统一,如果支持UBO,则可以手动将值上传到着色器) ,也许在其中放一些着色器来重写内容以使其自动化)。这些东西只能在新的视频卡上运行,您不会看到任何支持它的上网本或任何当前的视频游戏机(它们使用自己的OpenGL子集,类似于OpenGL ES)。最新的OSX只有3。

  • 超现代的下一代OpenGL。OpenGL 4.3刚刚发布。它带有计算着色器,glMultiDrawElementsIndirect和着色器存储缓冲区。这允许根本不同的流水线,您可以在其中将所有顶点数据上载到GPU,然后使用计算着色器来计算应绘制的内容,而不是在程序中进行绘制。不幸的是,这是非常新的,所以我不了解任何不错的教程。看一下OpenGL 4.3审查,它概述了它是如何工作的(作者还说有GPU Pro文章即将发布以解释它)。由于是全新的,因此在此阶段将无法获得任何支持(除非您使用的是带有Beta驱动程序的较新的nvidia卡)。尽管您可以使用OpenCL / CUDA来实现其中的一些功能。

我将跳过glBegin,glEnd,glVertex *,glNormal *,glTextCoord *,glTranslate *,glRotate *,glLoadIdenity,glModelViewMatrix等。取而代之的是从没有着色器的顶点缓冲对象开始学习,此时不要只尝试一个白色三角形来尝试3D,因此您不必使用矩阵进行3D操作(因为您将需要学习将它们绑定到着色器,因此在学习旧方法方面毫无意义)。接下来添加到着色器中,由于现在要使用顶点属性,因此您需要更改绑定顶点缓冲区对象的方式。了解如何通过制服向他们传达属性。然后使用GLM学习矩阵运算,将矩阵绑定到着色器并获得3D效果。完成此操作后,基本上就是学习诸如贴图,

一些通用的在线现代OpenGL教程,涵盖了大多数与OpenGL 2.0+兼容的着色器编程管道:

用于其他一般学习资源。OpenGL ES可能是一个很好的起点。OpenGL ES删除了所有不推荐使用的内容。OpenGL 4.1与OpenGL ES完全兼容,因此应该可以使用OpenGL ES程序并在OpenGL 4.1中运行它。两者的基本原理是相同的。

需要注意的一点是,OpenGL ES 3.0刚刚发布,但是由于它是新的,它还没有任何教程或硬件支持。它似乎没有任何重大的根本变化(例如我们在OpenGL ES 1.0-> 2.0中看到的固定管线和着色器模型之间的差异)。因此,您可能不会学习任何过时的东西。

同样,OpenGL ES将经常使用EGL,因此您将需要学习另一种打开窗口的方法,但这并不难。否则,周围会有一些OpenGL ES封装器/仿真器,或者如果有的话(或使用它们的仿真器),您可以在Android / iPhone上学习。

有《Addison Wesley OpenGL ES 2.0编程指南》,与红皮书相当。

您也可以查看GLSL着色器专用的东西,因为这是大多数现代OpenGL所居住的地方。您只需要确保所学内容涵盖OpenGL绑定“胶水”方面即可。

查看OpenGL Shading Language 2nd Edition(橙皮书)。

OpenGL 4.0阴影语言手册涵盖了更多OpenGL前沿内容,但它本身并不是一个全面的教程。一定值得一看,以了解最新的现实世界OpenGL实践,例如统一缓冲区对象和GLSL子例程。

最后,您可以看看WebGL,尽管使用JavaScript会有所不同,并且调试起来会更加困难。


3
+1,哇 我建议的唯一变化是在一开始使用客户端顶点数组,因为它们是通向VBO的简便方法,但没有初学者会陷入的一些陷阱。
Maximus Minimus 2012年

1
我认为最好避免专门学习/使用不推荐使用的功能,因为那将是必须学习的东西。我建议使用的其他已弃用的东西是OpenGL默认会做的事情,例如能够在不使用着色器的情况下进行渲染,并假设顶点属性0是打开核心配置文件时都应该爆炸的位置。
David C. Bishop

2
SuperBible的第六版刚刚发布,比第五版要好得多。我强烈推荐使用它,很容易遵循和学习现代OpenGL。
菲利普(Philip)

2
Arcsynthesis gltut网站不再可用,但仍可以从bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

15

至少在第8版编程指南问世之前,就不要再看书了。

除了提到的教程之外,我发现该站点也很有帮助,因为它很快就超越了基础知识。它们都是现代OpenGL的精彩介绍。一旦超过了该限制,您只需要文档即可,一旦熟悉了OpenGL,它就易于使用。其余的是计算机图形学理论和数学。


11

我和你的处境完全一样,终于找到了前进所需要的东西。

首先从这里开始:http : //www.arcsynthesis.org/gltut/。这个站点很棒,很好的工作示例,并且对发生的事情有深入的解释。即使代码是用C ++编写的,我还是用它来教我用Lisp编写OpenGL演示。它还完全摆脱了旧的做事方式,因此您不必担心养成不良习惯。

我要强调的是,尽管它只是“另一个网站”,但我还没有找到能像这样简洁明了地解释基本知识的书籍。

通过上面的网站后,您将已经对着色器有了基本的了解,现在可以谷歌搜索很多您需要知道的内容(对opengl es或webgl资源进行了很好的了解,因为它们删除了所有不推荐使用的内容)或在opengl Wiki网站中找到。如果您不掌握反电弧合成站点的基础知识,那么后面的内容将是非常令人费解的,但是当您大致了解所需内容时,这将非常有帮助。

另外,如果要深入了解GLSL,请访问:OpenGL Shader Language(橙皮书),尽管我正在慢慢进行,但是会带给您理解编写着色器的知识,以使您可以进一步进行这项工作。我要警告您,用审阅者的话说,这本书确实有“将200页的高质量内容打包到600页的书中”的内容,但是额外的历史记录和信息可以提供理解OpenGL的路线所需的上下文标准下降了(无论如何,它对我有帮助!)

希望对您有帮助,并祝您好运,我希望将来能看到/播放您的作品!

更新

令人遗憾的是,arcsynthesis似乎已离线,但是此处该站点已转换为pdf 并且该代码已在此处进行镜像。

自从我最初的答案以来的几年里,learnopengl.com /也变得绝对辉煌。虽然我仍然推荐arcsynthesis,因为它对现代opengl的介绍非常出色,但learningopengl站点涵盖的内容远远超过arcsysthesis,并且使用可访问的语言进行管理,我们制作了示例和开放源代码。基本上,该死的好,去看看!

关于书籍,我对橙色书籍的看法不算太深,但是可以推荐第三版“实时渲染”。一旦您准备好了技术知识,这本书就是金矿。


2
我的天啊!第一个链接太棒了!
MatterGoal

该gltut网站不再可用,但本教程仍然可以从下载bitbucket.org/alfonse/gltut/wiki/Home
阿尔托Bendiken

好点,我也会用额外的建议来更新我的帖子。
Baggers


5

对我非常有帮助的两个站点是:http : //www.arcsynthesis.org/gltut/http://ogldev.atspace.co.uk/

此外,OpenGL Wiki是一个非常好的最新资源。

阅读完这些内容后,我强烈建议您硬着头皮阅读OpenGL规范。然后,您将成为专业人士。


是的,我发现在线教程比大多数书籍都有用。SuperBible 5th Edition非常令人失望。
菲利普(Philip)

该gltut网站不再可用,但本教程仍然可以从下载bitbucket.org/alfonse/gltut/wiki/Home
阿尔托Bendiken

4

我见过的涵盖“现代” OpenGL的最好的书是http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

即使它是一本“食谱”,它也会带您逐步完成设置渲染的必要步骤以及所需的配套库类型(图像库,矢量数学库)。

除此之外,它还涉及您可能要使用OpenGL进行的各种常见操作,而无需深入研究任何内容(例如对于阴影,它涵盖了阴影贴图和过滤阴影贴图,但不涉及其他任何内容)复杂的阴影映射方法)。

我也建议拿橙皮书。


谢谢@Jari。它不是仅关于着色器吗?我的意思是,这本书是否介绍了OpenGL技术以及着色器?
MatterGoal

2
@MatterGoal:现代OpenGL几乎完全基于着色器。本书确实涵盖了OpenGL绑定方面的内容。我也推荐这本书,但作为其他书籍的伴侣,它并不是真正的核心学习书,但确实展示了现代实践中的一些出色用法。
David C. Bishop

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.