OpenGL 4.x学习资源

prz*_*_li 40 opengl shader opengl-3 opengl-4

我知道有一些关于学习OpenGL的问题.这就是我所知道的:

  • 3D的数学
  • 三维理论

以下是我想知道的: - OpenGL 4.0 核心配置文件(或后者) - Shader Language 400(或后者) - 上面的每一部分(如果它不能在供应商之间工作那么它仍然不会打扰我)

这是我不想知道的 - 固定功能管道(永远不会使用它!) - 旧的OpenGL - 兼容性配置文件

我更喜欢大部分信息,如教程,系列文章,书籍.

PS如果您了解opengl 3.x核心配置文件的资源,也可以发布它们

Nic*_*las 31

我诚挚地不喜欢否定的答案,但我担心我必须给这个问题一个.

您最终要求使用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可以很好地收集这些链接.为了充分披露,我确实写了其中一个.

  • @przemo_li:"着色器,可编程的东西,gpu内存,实时阴影,延迟渲染"所有这些都可以在OpenGL 2.1上完成.着色器是2.1的核心.通过缓冲对象的GPU内存是核心.阴影映射和阴影卷可以在**1.4**中使用,并且可以在2.1中获得.2.1中的延迟渲染非常有用(尽管您需要EXT_frambuffer_object的帮助).你不明白的是这个:你在4.1中绘制一个三角形的方式是**完全相同**.这就是向后兼容的意思. (4认同)
  • @przemo_li:D3D API在DX9.x和DX10之间彻底改变.OpenGL API并没有从2.1到3.3从根本上改变.哦,有变化,但最大的是着色器,其中大部分是语法(属性和变化变为"进入"和"出").glVertexAttribPointer可以追溯到GL 1.4时期发布的扩展,其含义没有改变.glUseProgram的日期为2.0,并没有改变.实际上,根据您学习2.1内容的方式,您可以使用*minimal*代码更改切换到3.3; 只是避免内置的东西.对于DX9到DX10,这是不可能的. (3认同)
  • +1"......那么你也有足够的图形体验,你不需要明确的一步一步......" (2认同)

Fir*_*aad 11

OpenGL的OpenGL超级第五版已经最近发布.此版本反映了与OpenGL 4.0同时发布的OpenGL 3.3,该书仅涵盖核心配置文件,并且不承担任何先前的OpenGL知识.

无论如何,这就是我从书中的描述中得到的.我有第4版,它是OpenGL 2.0的优秀资源,所以我认为新版本和最新的OpenGL着色语言书将是您正在寻找的.

Durian Software有一系列涵盖现代OpenGL的教程.它们针对OpenGL 2.0,但避免在以后的版本中使用任何已弃用的功能.

  • 会有新的SuperBile,但我不喜欢第5版,因为它(我们将隐藏你的东西,直到你准备好== 90%的书)aproach.此外,它更适合2.1人,因为它涵盖过渡,以及从新东西使用什么,以模拟旧的. (3认同)
  • 榴莲缝死了:(并且盖得太少,对于那些想要过渡的人来说有很大用处:( (2认同)

ccx*_*vii 10

OpenGL 3.0和4.1之间的差别确实很小.如果您坚持使用3.0或更高版本的核心配置文件,则无法使用固定功能管道.你真正要求的是一个不使用固定功能管道的OpenGL教程.

Jason L. McKesson的优秀教程"学习现代3D图形编程"开始使用着色器进行最早的基础知识,并且从不触及固定功能管道.

http://www.arcsynthesis.org/gltut/index.html

我强烈推荐它.


bla*_*inn 5

我最近偶然发现了这本在线书: OpenGLBook.com

我还没有读过它,但是描述说它是在线图书格式的免费OpenGL 4.0编程资源.


Cal*_*602 4

很好的问题,真的。事实上,文档很少。

这里有一个很好的介绍: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