我知道有一些关于学习 OpenGL 的问题。这是我所知道的:
- 3D数学
- 3D理论
这是我想知道的: - OpenGL 4.0核心配置文件(或更高版本) - 着色器语言 400(或后者) - 上面的每个部分(如果它不适用于供应商,那么它仍然不会打扰我)
这是我不想知道的 - 固定功能管道(永远不会使用它!) - 较旧的 OpenGL - 兼容性配置文件
我更喜欢更多的信息,比如教程、系列文章、书籍。
PS 如果您知道有关 opengl 3.x 核心配置文件的资源,请也发布它们
我真诚地不喜欢否定的答案,但恐怕我必须对这个问题给出一个答案。
您最终要求的是使用OpenGL 4.0 及更高版本独有功能的初学者材料。好吧,让我们看看 4.x 的一些独特功能。
也许最大的特点是镶嵌。这意味着什么?这意味着对基元进行细分以生成更多基元。在人们开始理解这意味着什么之前,必须首先了解基元是如何渲染的。它使用 4.x 之前的级别功能。
但是即使对渲染的工作原理有了深刻的理解,仍然存在一个问题。为了对曲面细分着色器进行有意义的讨论,首先必须对曲面细分算法有深入的了解。这不是一个简单的主题。对于教用户使用曲面细分着色器的教程,该教程首先必须介绍样条曲线和面片或细分曲面。这两个都是冗长的主题,有大量的白皮书专门讨论它们。只有在详细介绍了算法之后,用户才能准备好查看这些算法是如何在曲面细分着色器中实现的。
或者,换句话说,曲面细分着色器不是初学者材料。我什至不认为它们是中级材料。
4.x 级硬件的另一个重要特性是着色器图像加载存储(及其伴侣,原子计数器),4.2 中的核心。它允许一些非常漂亮的事情,包括与订单无关的透明度。然而,为了让用户甚至开始了解它周围的所有怪癖,用户需要非常熟悉现代着色器硬件的深层工作原理。因此,任何教程都必须首先解释现代基于 VLIW/SIMD 的硬件如何工作,以及着色器如何与此类硬件一起使用。同样,这不是微不足道的材料。
4.x 硬件的另一大特点是间接渲染。也就是说,将参数放入缓冲区对象本身的 glDraw 调用中。问题在于,使用此功能实际上只有一个原因:因为 GPU 将数据直接生成到一个或多个缓冲区中以供以后渲染。这样做通常涉及某种形式的 GPGPU 操作,这在很大程度上不是初学者级别的话题。
所有这些功能都很有用并且有真正的目的。但是初学者都不应该使用它们;在某些情况下,即使是中级程序员也不应该碰它们。
现在完全公平地说,有一些 4.2 功能既不是基于硬件的(因此它们通常在 3.3 和更低版本上实现)并且非常有用。例如,单独的程序对象。这些功能在我编写基于 3.3 的教程时遇到了,我考虑过回顾它们并合并此功能。我没有这样做的唯一原因是因为实现(驱动程序)在此功能方面仍然不完全稳定。但这样做会很有用。
我要表达的主要观点是:如果您在图形知识方面处于准备好利用 GL 4.x 硬件的独特功能的阶段,那么您也有足够的图形体验,而您却没有。不需要明确的分步说明材料来实现图形硬件的功能。你会是那种可以阅读 GL_ARB_tessellation_shader 扩展规范并了解如何让他们做你需要做的事情的人。
话虽如此,如果您对教授 OpenGL 核心 3.0 或更高版本的材料感兴趣,OpenGL Wiki有一个很好的此类链接集合。为了充分披露,我确实写了其中之一。
OpenGL SuperBible 第 5 版已于近期发布。该版本反映了与 OpenGL 4.0 同时发布的 OpenGL 3.3,本书仅涵盖核心配置文件,假设您没有任何 OpenGL 知识。
无论如何,这就是我从书中的描述中得到的。我有第 4 版,它是 OpenGL 2.0 的极好资源,所以我认为新版以及最新的OpenGL 着色语言书将是您正在寻找的。
Durian Software有一系列涵盖现代 OpenGL 的教程。它们针对 OpenGL 2.0,但避免在以后的版本中使用任何已弃用的功能。
OpenGL 3.0 和 4.1 之间的差别真的很小。如果坚持 3.0 或更高版本的核心配置文件,则无法使用固定功能管道。您真正需要的是不使用固定功能管道的 OpenGL 教程。
Jason L. McKesson 的优秀教程“学习现代 3D 图形编程”开始使用着色器作为最早的基础知识,从未涉及固定函数管道。
http://www.arcsynthesis.org/gltut/index.html
我强烈推荐它。
我最近偶然发现了这本在线书籍: OpenGLBook.com
我还没有读过它,但描述说它是在线书籍格式的免费 OpenGL 4.0 编程资源。
很好的问题,真的。事实上,文档很少。
这里有一个很好的介绍:http ://sites.google.com/site/opengltutorialsbyaks/
您可能还喜欢 groovounet 的 ogl4 示例包:http ://www.g-truc.net/post-0310.html
但恐怕仅此而已。潜伏在 opengl 讨论板上以获取更多信息...
编辑:几秒钟前发现的。直接来自 SIGGRAPH http://nvidia.fullviewmedia.com/siggraph2010/02-dev-barthold-lichtenbelt-mark-kilgard.html
http://www.opengl.org/sdk/docs/man4/
有 OpenGL 4.1 的手册页,它们在开发时被证明是有用的。
我认为您最大的希望之一是乔的博客。它有一些关于现代 OpenGL 的很好的介绍性文章,还有更多(据说)在路上。
Swiftless 正在更新教程以包含新的上下文。一个很好的入门教程,关于快速简单的 VAO、VBO 和渲染更加直接,位于swiftless.com
OpenGL 4 的重点是镶嵌,所以我想建议从 OpenGL 4 镶嵌的独立教程开始,即:http ://prideout.net/blog/?p=48
在手册和教程之后,一个很好的后续是查看基于“新”OpenGL 3/4 之上的开源引擎。作为开发人员之一,我会指出Linderdaum Engine。