2012-06-06 65 views
8

我想学习OpenGL。我有C和C++的经验,建立了一个构建环境,以及所有的爵士乐,但我试图找出一个好的起点。OpenGL的核心和兼容性

我知道在OpenGL < = 2.1中显着的固定功能流水线,并且它似乎比较容易开始使用。但是,OpenGL在OpenGL> = 3.1中推动的核心配置文件让我想要因为弃用而远离FFP。但是我很困惑它是如何在3.1及更高版本中工作的。在2.1和更低版本中,当你绘制形状时,你有你的glBegin(GL_WHATEVER)和glEnd()。我在浏览核心配置文件API时注意到的第一件事是,这两个函数调用都没有了。我意识到可能有一个简单的替代方案,但看到这样一个基本任务(看起来很有用)的东西是非常令人震惊的。它几乎看起来像从c标准库中废弃printf()。当我通过最新的红皮书工作时,他们仍然使用旧的弃用代码,这进一步混淆了我的想法。

在阅读类似问题的各种答案时,我看到了典型的“基于着色器”或“它全部用着色器”等。如果我想在黑色背景上绘制一个简单的白色正方形(第一个示例最新的红皮书),我不明白着色器如何与绘制盒子相关。他们不应该......好吗..底纹?我已经考虑过购买橙皮书和蓝皮书,但我不想再花钱购买那些将它藏在图书馆后面的东西(蓝皮书),或者将讨论编程着色器的东西在3D环境(橙皮书)中执行一些照明任务。

那么我从哪里开始呢?我怎么画一个盒子(或一个立方体或一个金字塔或其他什么),只用核心配置文件。我不是在这里要求一个代码片段,我正在寻找一个广泛的教程或一本书或某人可以指向我的东西。如果之前已经回答了这个问题,但我没有找到它,请重定向我。

+4

我建议你在现代OpenGL上选择一本好书。我的第一个建议是http://www.arcsynthesis.org/gltut/,它在线和免费。这应该让你开始。 – Bart

+1

您也可以在2.0中使用可编程管道。无论版本如何,固定功能都很糟糕,效率低下。 –

+0

@CatPlusPlus这是我第一次听说有人将固定功能管道称为效率低下。 :)你可能想重新考虑这个词。蹩脚 - 我同意。 – Ani

回答

11

核心配置文件中突然“复杂”的原因是固定功能流水线并不代表GPU实际为您做的事情。很多功能都是在CPU上完成的,并且只有实际的绘图发生在GPU上。固定管道的另一个问题是,这是一场失败的战斗。固定管道有sooooooo许多旋钮和开关!所以,它不仅已经非常复杂,而且也永远无法跟上新方法绘制场景的无尽需求。输入GLSL,并且您可以精确地告诉GPU如何绘制场景。这将权力转移给开发人员,并让每个人不必等待新开关/旋钮的OpenGL更新。

现在,关于您对glBegin和glEnd的突然丧失感到沮丧......有一些简单的框架模仿了他们在新核心配置文件中的行为,这是件好事。再次,它将权力转移到开发人员,以选择他们如何接近管道。但是,在FFP上练习3D没有任何问题。无论如何,你首先需要学习3D数学和概念。这些概念适用于任何API。 (矩阵数学可以在OpenGL和Direct3D中保存你的生活。)所以,首先你用简单的三角形和颜色练习。然后移动到纹理上(使用纹理坐标)。然后你添加法线(带照明)。然后,在了解了所有这些概念之后,就不再使用glBegin/glEnd,并开始将大量顶点数据分批存入缓冲区。无论如何,如果你不了解glBegin/glEnd,你将无法理解glDrawElements。所以,学习这些工具是可以的。

+0

我同意,我认为要走的路是通过红色书第一版(1993年我认为),然后跳入最新的橙皮书或任何2015年的热点......好好学习opengl只有120个功能的基本知识。 – 2014-06-01 00:15:27

+0

谢谢你的这个;这是我见过的最好的答案之一。很长一段时间,我一直在怀疑整个OpenGL社区是如何失去理智的:每个人都无意识地重复“固定管道不好,你不应该使用它”的口头禅,同时主张一个更复杂的替代方案,令人难以置信陡峭的学习曲线,对绝大多数用户绝对没有明显的优势。这是我读过的第一件能够看到固定管道实际上可能存在的问题的一瞥,并给出了一个清晰而完整的整体画面。 –

+0

不客气。很高兴我能帮上忙。 – TheBuzzSaw