OpenGL核心和兼容性[关闭]
Posted
技术标签:
【中文标题】OpenGL核心和兼容性[关闭]【英文标题】:OpenGL Core and Compatibility [closed] 【发布时间】:2012-06-06 19:12:54 【问题描述】:我正在努力学习 OpenGL。我有使用 C 和 C++、设置构建环境以及所有这些爵士乐的经验,但我正试图找出一个好的起点。
我知道 OpenGL = 3.1 中推送的核心配置文件让我因为弃用而想要远离 FFP。但我对它在 3.1 及更高版本中的工作方式感到困惑。在 2.1 及以下版本中,您在绘制形状时拥有 glBegin(GL_WHATEVER) 和 glEnd()。在查看核心配置文件 API 时,我注意到的第一件事是这两个函数调用消失了。我意识到可能有一个简单的替换,但是看到从这样一个基本任务中取出一些东西(看起来很有用)是非常令人震惊的。似乎从 c 标准库中弃用 printf() 。当我阅读最新的红皮书时,他们仍然使用旧的已弃用代码,这进一步混淆了我的思维。
在阅读类似问题的各种答案时,我看到了典型的“基于着色器”或“全部由着色器完成”等。如果我想在黑色背景上绘制一个简单的白色方块(最新的第一个示例红皮书),我根本不明白着色器与绘制盒子有什么关系。他们不应该做......好吧......阴影?我已经考虑购买橙皮书和蓝皮书,但我不想再花钱购买将其全部隐藏在图书馆(蓝皮书)或将谈论编程着色器的东西在 3D 环境中执行一些照明任务(橙皮书)。
那么我从哪里开始呢?我如何只使用核心轮廓绘制一个盒子(或立方体或金字塔或其他任何东西)。我不是在这里要求代码 sn-p,我正在寻找一个广泛的教程或一本书或有人可以指出我的东西。如果之前已经回答过,但我没有找到,请重定向我。
【问题讨论】:
我会建议你拿起一本关于现代 OpenGL 的好“书”。我的第一个建议是arcsynthesis.org/gltut,它是在线免费的。这应该让你开始。 您也可以在 2.0 中使用可编程管道。无论版本如何,固定功能都很糟糕且效率低下。 @CatPlusPlus 这是我第一次听说有人将固定功能管道称为低效。 :) 你可能想重新考虑这个词。糟糕——我同意。 @ananthonline:效率低下。任何与 GL 打交道的人都会告诉你这一点。您应该限制在一帧中完成的绘图调用的数量,并且使用固定功能它会以指数方式飙升(您在单个 triangle 上发出 6 个调用,并带有纹理)。而使用 VBO 6 调用可以完成 2 个完整的 批处理。 真的吗?你听说过 glDrawElements 吗? glDrawArrays?也许您对立即模式渲染和固定管道感到困惑。固定功能管道没有顶点和像素着色器,仅此而已。它仍然可以进行批量渲染。 【参考方案1】:核心配置文件中突然出现“复杂性”的原因是固定功能管道并不能代表 GPU 实际为您所做的事情。大部分功能是在 CPU 上完成的,只有实际的绘图发生在 GPU 上。固定管道的另一个问题是这是一场失败的战斗。固定管道有很多旋钮和开关!因此,它不仅已经非常复杂,而且永远跟不上对新场景绘制方法的无尽需求。输入 GLSL,你就可以准确地告诉 GPU 你想如何绘制你的场景。这将权力转移给了开发人员,让每个人都不必等待新开关/旋钮的 OpenGL 更新。
现在,关于您对突然丢失 glBegin 和 glEnd 感到沮丧...有一些简单的框架可以在新的核心配置文件上模仿它们的行为,这是一件好事。再次,它将权力转移给开发人员选择他们如何处理管道。但是,在 FFP 上练习 3D 并没有错。无论如何,您首先需要学习 3D 数学和概念。这些概念适用于任何 API。 (矩阵数学将在 OpenGL 和 Direct3D 中拯救你的生命。)所以,首先你练习简单的三角形和颜色。然后你移动到纹理(带有纹理坐标)。然后添加法线(带照明)。然后,在你理解了所有这些概念之后,你停止使用 glBegin/glEnd,开始将大量顶点数据批处理到缓冲区中。如果您不理解 glBegin/glEnd,您将无法完全理解 glDrawElements。所以,学习这些工具是可以的。
【讨论】:
我同意,我认为要走的路是通读红皮书第一版(我认为是 1993 年),然后跳到最新的橙皮书或 2015 年的热门书籍……学习基础知识很好从 opengl 只有 120 个函数的时候开始。 谢谢你;这是我见过的最好的答案之一。很长一段时间以来,我一直在想,整个 OpenGL 社区似乎都失去了理智:每个人都在盲目地重复“固定管道很糟糕,你不应该使用它”的口头禅,同时提倡一种更复杂的替代方案,而且令人难以置信。陡峭的学习曲线,对绝大多数用户来说绝对没有明显的优势。这是我读过的第一篇文章,它让我瞥见了固定管道实际上可能存在的问题,并且你给出了一个清晰而理智的整体情况。 不客气。很高兴我能帮上忙。以上是关于OpenGL核心和兼容性[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
OpenGL 实践——在没有核心版本的情况下运行 OpenGL