9

我正在尝试学习 OpenGL。我有使用 C 和 C++、设置构建环境以及所有这些爵士乐的经验,但我正试图找出一个好的起点。

我知道 OpenGL <= 2.1 中突出的固定功能管道,而且它似乎相对容易上手。但是,OpenGL 在 OpenGL >= 3.1 中推送的核心配置文件让我因为弃用而想要远离 FFP。但我对它在 3.1 及更高版本中的工作方式感到困惑。在 2.1 及以下版本中,当您绘制形状时,您有 glBegin(GL_WHATEVER) 和 glEnd()。在查看核心配置文件 API 时,我注意到的第一件事是这两个函数调用消失了。我意识到可能有一个简单的替换,但是看到从这样一个基本任务中取出的东西(看似有用)是非常令人震惊的。似乎从 c 标准库中弃用 printf() 。当我阅读最新的红皮书时,

在阅读类似问题的各种答案时,我会看到典型的“基于着色器”或“全部由着色器完成”等。如果我想在黑色背景上绘制一个简单的白色方块(最新红皮书中的第一个示例) ,我根本不明白着色器与绘制盒子有什么关系。他们不应该做......好吧......阴影?我已经考虑购买橙皮书和蓝皮书,但我不想再花钱购买将其全部隐藏在图书馆(蓝皮书)或将谈论编程着色器的东西在 3D 环境中执行一些照明任务(橙皮书)。

那么我从哪里开始呢?我如何只使用核心轮廓绘制一个盒子(或立方体或金字塔或其他任何东西)。我不是在这里要求代码片段,我正在寻找一个广泛的教程或一本书或有人可以指出我的东西。如果之前已经回答过,但我没有找到,请重定向我。

4

1 回答 1

14

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

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

于 2012-06-07T17:58:20.330 回答