Answers:
在查看OpenGL教程时要小心,因为其中的许多教程(NeHe)只是教给您您不应再做的事情。今天的OpenGL是10年前的另一种野兽。
可以在此处找到一些避免弃用的好示例:http : //www.g-truc.net/post-tech-content-sample.html
OpenGL Samples Pack 4.0.1.0是一个更新,将样本数量增加到58个。包括用于32位和64位Visual Studio 2008和2010的13个OpenGL 4样本,33个OpenGL 3.3样本和12个OpenGL 2样本。
您可以从中学到很多东西。从OpenGL新手的角度来看,这是我的想法。
您可以阅读很多示例代码。G-truc的示例相当广泛,涵盖了许多高级功能。
但是,如果您是初学者,从示例中学习是一种糟糕的学习方式。阅读您不太了解的代码不会告诉您它为什么起作用。确实,以上链接页面上的文字明确正确地指出这些示例不适用于初学者。
从裸露的源代码中学习,除非对其进行大量注释(此时它是教程),这并非易事。尝试这样做会鼓励货物崇拜式编程和复制粘贴代码。要说服自己很容易,当您真正要做的只是将代码从一个位置复制到另一个位置时,您就可以理解某些功能。您可能可以混合和匹配事物,但是如果没有适当的指导材料,则很难获得真正的理解。
有相当多的OpenGL开发实际可购买的书籍。我将在这里讨论两个最大的想法。
从纯粹的实践角度来看,这一点有些问题。请参阅,第7版涵盖GL 3.0和3.1。哪个比较老了。从那时起,OpenGL已经添加了许多有用的功能,这些功能改变了您编写事物的方式。并非全部都是硬件功能。
第8版即将“发布”,涵盖4.1版。关于它是否涵盖旧的固定功能方面尚无定论。
我会说这本书还可以。最大的问题是信息的组织。它更像是一本综合性的参考手册,而不是专为学习而设计的书。这就是我的意思。
教学时应做的最重要的事情之一就是不要给学生过多的重要信息。但是红皮书正是这样做的。引入材料时,会引入很多材料。它对于当前的任务来说是多余的。
您谈论的内容以及谈论的内容对于使您的书籍成为良好的学习资源至关重要。红皮书永远不会保留信息,直到更合适的时间为止。当谈到如何绘制三角形和图元时,它同时谈到了有关绘制三角形和图元的所有内容。它涵盖了每个选项,每个函数,每个参数等。
那不是一个好的信息组织。
本书的第五版仅涵盖核心GL 3.x,因此没有固定功能。
但是,本书的总体结构与第四版的结构大致相同。这似乎是不可能的,因为第4版使用了固定功能,直到很晚才引入着色器。
这是我对这本书的第一抱怨。本质上,作者构建了一个实现固定功能OpenGL形式的库。它包装了VAO,缓冲区对象,着色器和其他各种东西,因此他可以开始绘制对象,矩阵数学和纹理,而不必讨论诸如GL管道如何详细工作之类的事情。
通过隐藏所有这些细节,可以使材料更易于消化。但是,您经常会看到人们不知道如何在没有图书馆的情况下离开超级圣经。他们真的不了解着色器如何连接到缓冲区对象,数据如何沿管道流动等等。
这是一本可以使用的书,比《红皮书》还好。如果其他所有方法都失败了,它将完成工作。但我认为可能会更好。
而且,根据某些审阅者的说法,它似乎错过了某些有用的信息,例如使用归一化值打包属性数据等。
有许多在线资料可供学习。
讷河的教程,如其他人所说,是非常不合时宜的。他们专注于固定功能的OpenGL。人们经常说,固定功能的GL很容易学习,这是事实。但这并不是一个好主意。
了解如何在固定功能管线真正的工作是很难的。我什至可以说这比学习着色器难。一旦获得它,着色器就很简单。了解纹理环境的东西,组合器和诸如此类的东西的复杂性非常棘手,需要经常访问参考文档以确保所有设置正确。即使您正确理解了所有内容,也容易犯一个小错误,导致所有错误。
区别在于您可以在不了解固定功能的情况下使其工作。这鼓励了货物崇拜编程。这使得它可能得到的东西没有真正知道什么人做在屏幕上。在OpenGL.org论坛上,我们不断看到有关固定功能细节的问题,从不知道gluLookAt如何工作的人们到照明困难的人们,再到试图在纹理环境下获得某种特殊效果的人们。
所以不,我不认为NeHe是学习OpenGL的好方法。
上面的评论可用于任何基于非着色器的教程,例如Swiftless,Lighthouse等。
Wikibook OpenGL编程可能与NeHe等效。它涵盖了GL版本2.1,因为他们希望与移动平台保持联系。如果那对您很重要,那么一定要看这里。
NeHe以及本Wikibook的另一个问题是对源代码的高度关注。文本与代码的比率非常小;有很多代码,但是文本并没有真正解释它是如何工作的。
例如,请看教程2的底部。它介绍了混合。它没有说混合是如何工作的。它没有说出glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
实际含义或含义。它只是说:“这里有一些使事情变得透明的代码。”
那不是最好的学习环境。
Swiftless有一套OpenGL 4.x教程。榴莲软件还提供了一些基于着色器的OpenGL教程。还有“ OpenGLBook.com”教程。
这些共同点是...它们不完整且被遗弃。他们都参加了大约4-5个教程,然后被删除。他们都没有达到纹理,照明或类似的东西。好吧,榴莲确实打了纹理但没有打光。
可以从中得到很多帮助,但是也缺少很多。
回顾我自己的Modern 3D Graphics教程将是一个可怕的利益冲突。因此,我将详细介绍它们背后的组织以及我认为它们很好的原因。
哦,是的,我正在研究教程17。该项目还没有结束。
前三章实际上是关于学习OpenGL管道如何工作的。超级圣经失败了,因为它试图隐藏细节。相反,我试图非常好地解释这些细节。反复。引言以纯文本方式解释了管道。第一个教程通过代码伴奏对其进行了说明。第二篇教程将进一步介绍它。
从那里,我自然而然地开始定位对象。这引入了制服,但是我不想同时加入制服和透视投影。因此,我将两个概念分开。投影之后,深度缓冲似乎是下一步的合理选择,然后是变换和矩阵的工作方式。在那之后,相机。使用四元数进行旋转是后期添加的功能,但是对于新兴的图形程序员来说,这是一件重要的事情。
照明教程又一次建立在另一个之上。漫反射,然后是每个片段的照明,然后是镜面反射。动态范围是一个有趣的选择。大多数介绍性材料都试图避免这种情况,但是我接受了。如果您认为光强度始终在[0,1]范围内,那么您现在不是图形程序员。如果您不知道如何维护线性颜色管线,那么您现在不是图形程序员。
关于冒名顶替者的最后一盏照明灯很奇怪。我尝试设计解决问题的教程,而不仅仅是展示一些OpenGL功能,尤其是在本书编写过程中。我的大部分教程设计都来自于找到讨论某些主题的方法,同时仍然使它们成为真正的问题,而不是显而易见的,“我们现在正在学习X”。几何着色器很困难,因为它们并不能真正解决很多问题。
冒名顶替者代表了一个问题,即GS实际上可以解决问题。此外,它还使我可以谈论其他较少使用的事物,例如discard
更改片段的深度。它确实显示了着色器的功能:您可以使一个正方形变成一个球体。
纹理教程也很有趣。我之所以推迟谈论漫反射色纹理的原因之一,是直到第三次才推迟谈论sRGB纹理。这样,我可以讨论围绕纹理的基本问题(加载数据,将它们放入着色器,过滤,钳位等),而不必处理线性问题。因此,我可以将整个教程用于该主题。这使我真正非常强调保持线性颜色管线的重要性。
这是我的宠儿之一。
preamake
本身会失败:( ... ...这将有很大的帮助,如果您有空的话可以尝试使用Ubuntu + Eclipse执行代码教程。是使用您提供的阅读材料并将其与其他一些代码教程相关联,原因是到目前为止,“ arcsynthesis”是我在Web上学习新手OpenGL学习的最佳场所
从本教程系列开始,我会推荐它们,它们很好,并且比其他http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html使用了更现代的功能。
像往常一样,最好的学习方法就是做到这一点。我会推迟花钱,除非您觉得从一本教科书中读取真正受益,大多数(如果不是全部)信息都可以在网上找到。在学习OpenGL的基础上,您可能还希望重新学习线性代数,它永远不会伤害您。
我面临的最大问题是,在最新版本的OpenGL中已经描述了很多东西。
我一直能找到的最好的资源是Joe's Blog。最好是介绍现代管道,并以比我在其他地方可以找到的方式更具可读性的方式帮助您了解一些示例。似乎Nehe最近已经更新了几对,虽然他们的课程仍然很旧,但是一些新闻可能会引起人们的兴趣。Lazy Foo'也是一个很好的资源,但是像Nehe一样,其教程使用了专门的材料。
我认为在一个周末或2个星期后,一旦您感到舒适,就去做一个小项目以应用所有内容。突破或俄罗斯方块-您可以集中精力于代码本身。当您离开并尝试做一个实际的项目时,无论多么简单,您都会学到很多。
这是另一个。这很好。虽然只有4章。
另一个是http://www.arcsynthesis.org/gltut/。这是一个巨大的,缓慢的和高知名度的。
学习OpenGL的最好方法是使用它。我建议编写自己的引擎。这似乎是一项艰巨的任务,确实如此。您的第一个引擎不会很好,但是您会学到很多。
基本上:编写一个引擎,将其用于游戏中,弄清您不喜欢的引擎并重新编写。继续这样做,您会在OpenGL上变得更好。:)
您将需要什么:
这已经是很多工作了。
我们在iPhone的Orchard的Craps游戏中做了一些OpenGL(ES),但是它是由具有疯狂3D skillz的程序员处理的。因此,由于这个原因,我一直在学习OpenGL(ES),以便了解自己在说什么,并可以与团队一起编写代码。
Jeff LaMarche的博客(我提供了一系列教程)对我有所帮助,该站点是http://iphonedevelopment.blogspot.com,这是他的OpenGL帖子的链接:http : //iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html
在OpenGL.org中,有两个有用的链接:http : //www.opengl.org/code/和 http://www.opengl.org/resources/features/
最好的方法,上面已经说过几次了。跳进去做一些有趣的事情,然后逐步提高。这一切都与了解场景,相机和材质(着色器)有关。一旦掌握了这些概念,就可以开始研究物理引擎,碰撞检测,粒子效果等。!(^_^)
祝一切顺利,凯文
好吧,没有人谈论过《OpenGL编程指南》,我没有这个特定的版本,但是较旧的版本还不错。
我不会说这个视频教程系列是最好的方法,但是可以很好地解释它:www.71squared.com/2009/03/iphone-game-programming-tutorial-1
从NeHe开始,快速在屏幕上显示您的第一个三角形。在那里做一些初学者教程,以了解3D编程的基本概念。如您所暗示的,如果提到OpenGL ES,您已经了解3D编程的基础知识(什么是矩阵,它们的用途,如何使用不同的矩阵在屏幕上投影顶点,什么是顶点等),那么我建议您根本不要浪费时间与NeHe在一起,因为它可能会使您慢下来(通过教您一些事情,您以后必须“取消学习”)。
除此之外,我同意最好的学习方法就是边做边学。一个很好的第一个非Hello World项目可能是2D游戏(或2D游戏引擎)。使用适用于2D应用程序的现代OpenGL可以教给您很多相关概念(例如,使用缓冲区和着色器),并且它比3D项目要轻松得多。然后,随后,您可以应用在3D应用程序中学到的知识。
好吧,我一遍又一遍地被告知,nehe的教程是最好的,我想它们也适合您! http://nehe.gamedev.net/ 我买了红皮书...