C++ OpenGL核心与兼容性

C++ OpenGL核心与兼容性,c++,c,opengl,glsl,C++,C,Opengl,Glsl,我正在努力学习OpenGL。我有C和C++的经验,建立了一个构建环境,所有这些都很有说服力,但是我正在努力找出一个好的起点。p> 我知道OpenGL=3.1中突出的固定函数管道使我不想使用FFP,因为它遭到了反对。但我对3.1及以上版本中的所有工作原理感到困惑。在2.1及以下版本中,当您绘制形状时,可以使用glBegin(GL_which)和glEnd()。在浏览core profile API时,我注意到的第一件事是,这两个函数调用消失了。我意识到可能有一个简单的替代品,但看到从这样一个基本任

我正在努力学习OpenGL。我有C和C++的经验,建立了一个构建环境,所有这些都很有说服力,但是我正在努力找出一个好的起点。p> 我知道OpenGL=3.1中突出的固定函数管道使我不想使用FFP,因为它遭到了反对。但我对3.1及以上版本中的所有工作原理感到困惑。在2.1及以下版本中,当您绘制形状时,可以使用glBegin(GL_which)和glEnd()。在浏览core profile API时,我注意到的第一件事是,这两个函数调用消失了。我意识到可能有一个简单的替代品,但看到从这样一个基本任务中如此(似乎有用)地去掉了一些东西,这是相当令人震惊的。这几乎像是从c标准库中弃用printf()。当我阅读最新的红皮书时,他们仍然使用过时的代码,这进一步混淆了我的想法

当阅读类似问题的各种答案时,我会看到典型的“基于着色器”或“使用着色器完成一切”等。如果我想在黑色背景上绘制一个简单的白色正方形(最新红皮书中的第一个示例),我根本不理解着色器与绘制长方体的关系。他们不应该。。。好。。阴影?我已经考虑过购买橘子书和蓝皮书,但我不想再花更多的钱去买那些会把它全部隐藏在图书馆后面的东西(蓝皮书),或者一些会谈论编程着色器以在3D环境中执行一些照明任务的东西(橘子书)

那么我从哪里开始呢?我怎么画一个盒子(或者一个立方体,一个棱锥体或者其他什么),除了核心轮廓外什么都不用。我不是要这里的代码片段,我要的是一个扩展的教程或一本书或其他人可以指给我的东西。如果之前已经回答过,但我没有找到,请重定向我。

核心配置文件中突然出现“复杂性”的原因是,固定功能管道不能代表GPU实际为您做的事情。大部分功能都是在CPU上完成的,只有实际的绘图发生在GPU上。固定管道的另一个问题是,这是一场失败的战斗。固定管道有很多旋钮和开关!因此,它不仅已经复杂得令人痛苦,而且永远也跟不上新的场景绘制方法的不断需求。输入GLSL,您就可以准确地告诉GPU您希望如何绘制场景。这将权力转移到开发人员身上,使每个人都不必等待OpenGL更新新的开关/旋钮


现在,关于你对突然失去glBegin和glEnd的失望。。。有一些简单的框架可以在新的核心概要文件上模拟它们的行为,这是一件好事。同样,它将选择如何处理管道的权力转移给了开发人员。然而,在FFP上练习3D并没有什么错。无论如何,你需要先学习3D数学和概念。无论API如何,这些概念都适用。(矩阵数学将在OpenGL和Direct3D中拯救您的生命。)因此,首先,您将使用简单的三角形和颜色进行练习。然后移动到纹理(使用纹理坐标)。然后添加法线(使用照明)。然后,在理解所有这些概念后,停止使用glBegin/glEnd,开始将大量顶点数据批处理到缓冲区中。如果你无论如何都不理解glBegin/glEnd,你就不会那么好地理解GLD元素。因此,学习这些工具是可以的。

我建议您选择一本关于现代OpenGL的好书。我的第一个推荐是在线免费的。这应该让你开始了。你也可以在2.0中使用可编程管道。无论版本如何,固定函数都是蹩脚和低效的。@CatPlusPlus这是我第一次听说有人将固定函数管道称为低效的。:)你可能想重新考虑这个词。糟糕-我同意。@ananthonline:效率很低。任何与德国劳埃德船级社打交道的人都会告诉你这一点。您应该限制在一个帧中完成的绘图调用的数量,并且使用fixed函数,它会以指数级的速度增长(您在一个带有纹理的三角形上发出6个调用)。而VBO 6调用可以完成2整批。真的吗?你听说过元素吗?什么是阵列?也许您正在混淆即时模式渲染和固定管道。固定函数管道没有顶点和像素着色器,仅此而已。它仍然可以进行批量渲染。我同意,我认为应该先阅读红皮书第一版(我想是1993年),然后再阅读最新的橙色书,或者不管2015年的热度如何。。。从opengl只有120个函数的时候开始学习基础知识很好;这是我见过的最好的答案之一。很长一段时间以来,我一直在想,整个OpenGL社区似乎都失去了理智:每个人都在无意识地重复着“固定管道坏了,你不应该使用它”的咒语同时提倡一种更为复杂的替代方案,具有难以置信的陡峭学习曲线,对绝大多数用户来说绝对没有明显优势。这是我读过的第一篇文章,它让我大致了解了固定管道的实际问题,你给出了一个清晰而理智的整体图景。欢迎你。很高兴我能帮忙。