【问题标题】:Deprecated OpenGL functions不推荐使用的 OpenGL 函数
【发布时间】:2012-12-19 18:17:48
【问题描述】:

我目前正在通过 5th Superbible 学习 OpenGL。它教你核心配置文件。但我真的很困惑。

我知道 khronos 在 3.3 中移除了固定函数管道,并声明一些函数已弃用。但是 Superbible 现在只是用自己的函数替换了那些已弃用的函数。

为什么 khronos 应该删除诸如 glRotate 或 matrixstack 之类的东西,以便我必须使用 3rd 方库(或我自己的)而不是官方库?

也许是极品有缺陷?

【问题讨论】:

标签: opengl


【解决方案1】:

glRotate() 等已被删除,因为 openGL 在内部处理矩阵,因此让您直接提供矩阵是一种更简洁的设计。

几乎所有复杂的 openGL 应用程序都会做一堆其他矩阵的东西,并且会有自己的矩阵类,openGL 更容易获取结果而不是坚持从一堆旋转/翻译/缩放通话。

他们本可以提供自己的矩阵类 - 但是您可以使用很多第三方库。 openGL 的一项政策(失败)是它确实依赖 3rd 方库来执行实际图形之外的任何事情。因此,初学者程序是 GLUT、GLEW、SDL 等的巧妙组合,可以在屏幕上显示任何内容 - 而 DirectX 提供所有内容。

【讨论】:

  • "matrix classes" – 不,他们不能,因为这会将 OpenGL API 限制为这些类库开发的语言。 OpenGL 是语言中立的,仅定义程序入口点应遵循主机系统的 C 调用约定。
  • DirectX 是库的集合(包括用于图形的 Direct3D),而 OpenGL 是单个库。该策略是一个陷阱,它需要更多样板代码/设置才能工作,但它的巨大优势在于它比 Direct3D 更便携。
  • @RobertRouhani 缺乏可移植性仅仅是因为 DirectX 只能从 MS 获得。没有什么技术可以阻止 Khronos 在 openGL 中包含 SDL/GLEW 类型的函数
  • 正是因为这个政策,OpenGL被用于从智能手机到超级计算机的所有东西。
  • 只是想明确一点,OpenGL 实际上只期望顶点着色器输出的顶点坐标位于剪辑空间中。如何做到这一点取决于您(例如:使用矩阵、巫毒教……)。
【解决方案2】:

Khronos 从核心配置文件中删除了这些功能,但它们在兼容性配置文件中仍然可用。 主要原因之一是性能:

在当今的大多数应用程序中,必须在渲染器和应用程序之间来回传递的信息量比十年前要大得多。因此 ARB 提出了缓冲区(顶点数组和顶点缓冲区对象),以最大限度地利用主系统和渲染硬件之间的可用带宽。但是,如果您开始使用 VBO 机制来传输数据,那么大多数遗留功能将变得无用。

也就是说,除了需要支持旧版应用程序(这是兼容性配置文件的充分理由)之外,我认为这个 API 对于学习目的仍然有用。

至于您的主要问题,上述内容仅适用于 OpenGL 的完整版本,而不适用于不支持旧原语的 ES,在这种情况下,需要一个仿真层。

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多