当大多数教程过时时,从OpenGL开始[关闭]


16

我确定已经有很多这样的问题,但是OpenGL库的不断更新使它们全都消失了,而在一两个月后,这里的答案将再无价值。

我准备开始使用C ++在OpenGL中进行编程。我有一个正在运行的编译器(DevCpp;不要问我切换到VC ++,不要问我为什么)。现在,我只是在寻找有关如何使用OpenGL进行编程的可靠教程。我的助手找到了NeHe Productions提供的教程,但是当我发现时,它已经过时了!(尽管我确实汇总了一个基本窗口以支持OpenGL画布)

然后我上网,找到了明显使用freeglut的OpenGL SuperBible?但是我想知道的是SuperBible 5th Edition是否已经更新。我发现关于freeglut的建议说最新版本是2.6.0,但现在是2.8.0!

  • OpenGL SuperBible仍然是一个不错的,相当新的起点吗?
  • 有没有更好的学习OpenGL的地方?
  • 我是否可以将freeglut简单地存储在DevCpp include目录中(也许在GL中),或者有一些重要的过程吗?
  • 因为我才刚刚开始,有什么我想问的意见或建议吗?

@dreta为我清除了一些问题,因此现在我对要问的问题有了更好的了解:

我想我想使用包装器库从OpenGL开始,而不是直接访问OpenGL。
我只是认为,对于初学者来说,对我而言,编程和获得良好结果会更容易,而我还不必了解所有肮脏的细节(如@stephelton所述)。

问题是,我找不到没有对不再支持的函数的未定义引用的任何库。Freeglut听起来可以运行,但仍使用GLU。
有人知道我能做什么吗?
另外,我尝试编译第一个SuperBible的源代码,但是由于没有将GLAPI定义为类型,所以出现了错误,该错误源自GLU库。

我想使用《 SuperBible》,但我不知道该如何解决。


2
您应该切换到GCC。
notlesh

DevCpp只是一个IDE。运行GCC(具体来说是Mingw)。但是自从提到它以来,Eclipse CDT将是更可取的,因为它在过去十年中一直没有被遗弃。
卡斯珀·拜耶

4
@Casper DevCpp遗产的继承者是Code :: Blocks,并且仍会定期更新。
亚历克斯·谢泼德

1
如果您想要围绕OpenGL的包装器库,建议您尝试SFML。SFML提供了诸如窗口创建,计时器等常用功能,同时还允许您绘制文本和简单形状。您可以随时使用“原始” OpenGL,将SFML函数和原始API调用混合使用。
Oskar N.

1
您无法通过在标题中添加“ {CLOSED}”来“关闭”问题。主持人将关闭问题,或者如果有足够的用户投票关闭该问题。我要你滚回来编辑..“关闭”,如果版主决定关闭它会自动被添加到您的标题..
bummzack

Answers:


19

我们的居民Nicol Bolas维护着一本有关现代图形编程的在线书。它使用现代OpenGL,所有内容均以易于使用的速度进行介绍,是一个不错的起点。我一直在用它来学习现代的OpenGL,并且在过去的两个月里一直在为我带来奇迹。

除此之外,到处都是知识。OpenGL Wiki维护得很好。该代码不是“最佳实践”,有时在OpenGL版本中存在歧义,但是在那些罕见的情况之外,它是一个很好的资源。

如果您想了解GLSL,请参阅lighthouse3D 的GLSL核心教程。尽管这是我在网站上“信任”的唯一核心知识,但其他方面往往已经过时。

一旦开始了解现代OpenGL是如何完成的,您将可以轻松地寻找特定信息,过滤掉过时的代码并最重要的是阅读规范。您只需要从某个地方开始。

实际上,即使不是全部,大多数可用的OpenGL书籍也已过时。新的《 SuperBible》是某种怪胎,我不会推荐给任何人。OpenGL 4.1的OpenGL编程指南将于9月16日发布,很幸运,第七版使用了已弃用的代码,所以您肯定要等一下。

当然,您可以随时在这里提出问题。


1
你为什么不建议超级圣经?
Codesmith 2012年

3
@AUTO SuperBible的第5版在OpenGL周围使用了自定义包装,以使其“可访问”。许多示例都过度使用了自定义包装器。它没有教您OpenGL核心规范所支持的内容。我的看法是,如果您不必显式学习过时的OpenGL,那就忘了它甚至存在。学习毫无意义。核心规范更加清晰和强大。
德雷塔

@AUTO最初,核心规范要求更高,这是一件好事。这将迫使您处理大多数渲染过程,从而使您完全了解并控制它。与不推荐使用的代码相比,它提供了更多的可能性。在那之后,如果您可以学习操作系统的API并在其中使用lanuch OpenGL而又没有诸如glut的问题,那么您就进入了仙境。
德雷塔

好的,让我问一个重要问题:GLU库似乎已被弃用,并且完全不受支持;通过使用规范,我可以绕过对GLU的需求而直接访问吗?这样,我将不会再收到GLU库引用的不存在的函数的链接器错误?
Codesmith 2012年

@AUTO GLU完全没有必要,我在图形编程课上只用过10英尺的杆就碰到了它(我猜我们不得不使用不推荐使用的代码,这很痛苦,标准的变化比课程程序要快)。它只是一个有助于使用已弃用代码的库。如果您使用GLU设置了代码,那么它可能会发臭。
德雷塔

1

自问这个问题已经有一段时间了,但我希望这将对与您有相同问题的人们有所帮助。

通过阅读上的一本迷你书,我开始使用OpenGL arcsynthesis.org。不知道是谁写的。该网站的注册似乎已失效或有其他原因,但是您应该可以在这里找到它:http : //web.archive.org/web/20140209181347/http : //www.arcsynthesis.org/gltut/。它使用的是OpenGL 3.3,因此您将使用现代的流水线以及所有需要的实践,但是您不会接触到细分或计算着色器。

另一个值得关注的站点是https://open.gl/。它似乎非常适合初学者,没有涵盖比上述材料更深入的内容,但是对于刚开始的人们来说,这可能是一个很好的起点。

如果需要帮助,请记住阅读OpenGL Wiki,并用Google搜索您的函数名称。Wiki上的某些页面是完全无用的,但另一些页面作为参考和学习材料却非常有用。


1
接受的答案中提到的人写道:Nicol Bolas-gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey

0

这些旧教程对初学者仍然非常重要。实际上,我建议从那里开始,而不是从OpenGL的最新版本开始。最新版本放弃了一些更简单的几何图形绘制方法(即即时模式绘制)。

使用最新版本时,您必须准备并发送顶点数组,并告诉视频卡您在提供的数组中顶点的排列方式。这些东西调试起来很麻烦。

某些版本(即OpenGL ES 2.x)要求您提供自己的照明方程式(以“片段着色器”的形式)并转换自己的顶点数据,以便最终将其显示在所需的屏幕上(“顶点着色器”)。这甚至更难调试,对于初学者来说,这是没有地方的(我认为)。

因此,我实际上建议您回到那些NeHe教程(等)并从那里开始。它们可能已经“过时”,但它们仍然有效。当您开始了解OpenGL渲染管道中实际发生的情况并了解使这些东西起作用的一些数学概念时,您将准备好研究一些最新的方法。在OpenGL中渲染。


实际上,它们不起作用。这就是为什么我发布这个问题。他们使用的函数gluPerspective已过时,并且没有绝对替代项。
Codesmith 2012年

1
那不是OpenGL函数。这是另一个库提供的单独的实用程序功能。您可以轻松找到它的代码-这不是很难。
notlesh 2012年

谢谢,但是我只发现了一个不完美的替代品,我不知道该如何使用。它接受一个参数“ float * matrix”,而旧的使用一些内部矩阵。那我该怎么办呢?
Codesmith

在Google上首次搜索“ gluPerspective实现”正是您所需要的。它称为glFrustum,在某些最新版本的OpenGL中不可用(ES 2.x不包括它)。即使那样也很难找到暗示。
notlesh 2012年

0

正如其他人所说,大多数书籍已过时或过高。尽管如此,我还是建议使用SuperBible的第5版,但这只是为了快速概述OpenGL可以完成的工作,并熟悉诸如视图/投影之类的内容。

立即投入使用现代OpenGL可能一开始会让您不知所措,所以请考虑学习在现在不推荐使用的版本中做一些基本的事情。

我还想添加一个网站,其中包含我最近在http://ogldev.atspace.co.uk/中找到的优秀教程。


谢谢,我将检查该教程。但是要使用OpenGL SuperBible,我的问题仍然存在:既然freeglut是基于GLU的,我该如何修复GLU?
Codesmith 2012年

@AUTO:FreeGLUT不是“基于” GLU。一些 FreeGLUT函数调用GLU,但是如果您不调用这些函数,则不会有问题。
尼科尔·波拉斯

但是,SuperBible是否可能调用了这些功能?如果确实如此,我不能
Codesmith

确实,我的意见是不要打扰SuperBible随附的源代码。阅读它,然后尝试从头开始制作所有内容。关于GLU的问题,我最好的猜测是您没有正确配置/安装库。下载最新版本的MinGW。还可以下载最新版本的freeglut并进行编译,或者找到一个预编译的库。无论如何,您应该开始学习一些东西,而不是花太多时间计划如何开始。
Grieverheart

@AUTO:为何《 SuperBible》会称呼他们?如果确实调用了它们,则SuperBible的代码将无法正常工作。这就是为什么它称呼他们。
Nicol

0

不幸的是,arcsynthesis.org(已接受的答案中提到的网站)似乎崩溃了。(编辑:在此链接可用!)。

安东·格德兰(Anton Gerdelan)的OpenGL 4教程可读性强,并且截至2014年中是最新的。前几个是免费的,其余的都可以在亚马逊上获得,它们的评论价格低廉,但价格很高。到目前为止,我一直很高兴。

http://www.opengl-tutorial.org/上还有一些针对OpenGL 3.3+的免费教程。它们可以追溯到2012年,但可能是其他来源的很好的补充材料。


OGLDev是最新,深度和免费的。ogldev.atspace.co.uk/index.html
Yattabyte


很高兴看到它可用!我还将检查这些材料。
iHateCamelCase 2016年
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.