OpenGL 核心和兼容性
OpenGL Core and Compatibility
我正在尝试学习OpenGL。 我有 C 和 C++、设置构建环境以及所有这些爵士乐的经验,但我正在努力找出一个好的起点。
我知道 OpenGL <= 2.1 中突出的固定函数管道,它似乎相对容易上手。 但是,OpenGL 在 OpenGL>= 3.1 中推送的核心配置文件使我想由于弃用而远离 FFP。 但我对它在 3.1 及更高版本中的工作原理感到困惑。 在 2.1 及更低版本中,当您绘制形状时,您可以使用 glBegin(GL_WHATEVER) 和 glEnd()。 在查看核心配置文件 API 时,我注意到的第一件事是这两个函数调用消失了。 我意识到可能有一个简单的替代品,但看到如此(看似有用)的东西从这样一个基本任务中取出来是相当令人震惊的。 这几乎看起来像是从 c 标准库中弃用 printf()。 当我阅读最新的红皮书时,他们仍然使用旧的弃用代码,这进一步混淆了我的想法。
在阅读类似问题的各种答案时,我看到了典型的"基于着色器"或"这一切都是用着色器完成的"等。 如果我想在黑色背景上绘制一个简单的白色方块(最新红皮书中的第一个示例),我根本不明白着色器与绘制框有什么关系。 他们不应该这样做吗...井。。描影法? 我已经考虑过购买橙皮书和蓝皮书,但我不想再花钱买一些会把一切都藏在图书馆后面的东西(蓝皮书)或者谈论编程着色器以在3D环境中执行一些光照任务的东西(橙皮书)。
那么我从哪里开始呢? 我如何只使用核心轮廓绘制一个盒子(或立方体或金字塔或其他任何东西)。 我在这里不要求代码片段,我正在寻找一个广泛的教程或一本书或有人可以指出我的东西。 如果之前已经回答过这个问题,但我没有找到它,请重定向我。
核心配置文件中突然"复杂"的原因是,固定的功能管道并不能代表GPU实际为您做什么。大部分功能是在 CPU 上完成的,只有实际的绘制发生在 GPU 上。固定管道的另一个问题是这是一场失败的战斗。固定管道有很多旋钮和开关!因此,它不仅已经非常复杂,而且永远无法跟上对绘制场景的新方法的无休止的需求。输入 GLSL,您就可以准确地告诉 GPU 您想要如何绘制场景。这将权力转移给开发人员,使每个人都不必等待OpenGL更新以获取新的开关/旋钮。
现在,关于您对突然失去 glBegin 和 glEnd 的沮丧......有一些简单的框架可以模仿它们在新的核心配置文件上的行为,这是一件好事。同样,它将权力转移给开发人员,让他们选择如何处理管道。但是,在FFP上练习3D并没有错。无论如何,您都需要先学习3D数学和概念。无论 API 如何,这些概念都适用。(矩阵数学将在OpenGL和Direct3D中挽救你的生命。所以,首先你练习简单的三角形和颜色。然后转到纹理(带有纹理坐标)。然后添加法线(带照明)。然后,在了解所有这些概念后,停止使用 glBegin/glEnd,并开始将大量顶点数据批处理到缓冲区中。如果你不理解glBegin/glEnd,你就不会那么了解glDrawElements。因此,可以学习这些工具。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 在c++中初始化矩阵时出现分段错误(核心转储)
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- MPI突然停止了对多个核心的操作
- 在多个核心中处理一个HTTP请求
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 运算符继承和 cpp 核心准则 c.128 的问题
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 提升序列化 1:73 的向后兼容性问题
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- 当要求兼容性时,核心OpenGL上下文?
- OpenGL 核心和兼容性