我目前正在通过 5th Superbible 学习 OpenGL。它教你核心配置文件。但我真的很困惑。
我知道 khronos 在 3.3 中删除了固定函数管道,并将某些函数声明为已弃用。但是 Superbible 现在只是用自己的函数替换了那些不推荐使用的函数。
为什么 khronos 应该删除 glRotate 或 matrixstack 之类的东西,以便我必须使用 3rd 方库(或我自己的)而不是官方库?
或许是极品有缺陷?
我目前正在通过 5th Superbible 学习 OpenGL。它教你核心配置文件。但我真的很困惑。
我知道 khronos 在 3.3 中删除了固定函数管道,并将某些函数声明为已弃用。但是 Superbible 现在只是用自己的函数替换了那些不推荐使用的函数。
为什么 khronos 应该删除 glRotate 或 matrixstack 之类的东西,以便我必须使用 3rd 方库(或我自己的)而不是官方库?
或许是极品有缺陷?
glRotate() 等已被删除,因为 openGL 在内部处理矩阵,因此让您直接提供矩阵是一种更简洁的设计。
几乎所有复杂的openGL应用程序都会做一堆其他矩阵的东西,并且会有自己的矩阵类,openGL更容易得到结果,而不是坚持从一堆旋转/平移/缩放中创建它们来电。
他们本可以提供自己的矩阵类 - 但是您可以使用很多第 3 方库。openGL 的一项政策(失败)是它确实依赖 3rd 方库来执行实际图形之外的任何事情。因此,初学者程序是 GLUT、GLEW、SDL 等的巧妙组合,可以在屏幕上显示任何内容 - 而 DirectX 拥有开箱即用的所有内容。
Khronos 从核心配置文件中删除了这些功能,但它们仍然在兼容性配置文件中可用。主要原因是性能之一:
在当今的大多数应用程序中,必须在渲染器和应用程序之间来回传递的信息量比十年前要大得多。因此 ARB 提出了缓冲区(顶点数组和顶点缓冲区对象),以最大限度地利用主系统和渲染硬件之间的可用带宽。但是,如果您开始使用 VBO 机制来传输数据,那么大多数遗留功能将变得毫无用处。
也就是说,除了需要支持遗留应用程序(这是兼容性配置文件的充分理由)之外,我认为这个 API 对于学习目的仍然有用。
至于您的主要问题,上述内容仅适用于 OpenGL 的完整版本,而不是不支持旧原语的 ES 版本,在这种情况下,需要一个仿真层。