OpenGL的入门

OpenGL是什么

  • 一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。
  • 因为OpenGL规范并没有规定实现的细节,具体的OpenGL库允许使用不同的实现,只要其功能和结果与规范相匹配。
  • 实际的OpenGL库的开发者通常是显卡的生产商。

核心模式与立即渲染模式

  • 早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便。OpenGL的大多数功能都被库隐藏起来,开发者很少能控制OpenGL如何进行计算的自由。
  • 从OpenGL3.2开始,规范文档开始废弃立即渲染模式,这个分支的规范完全移除了旧的特性。
  • 当使用OpenGL的核心模式时,OpenGL迫使我们使用现代的函数。当我们试图使用一个已废弃的函数时,OpenGL会抛出一个错误并终止绘图。
  • 当使用新版本的OpenGL特性时,只有新一代的显卡能够支持你的应用程序。

扩展

  • 当一个显卡公司提出一个新特性或者渲染上的大优化,通常会以扩展的方式在驱动中实现。
  • 如果一个程序在支持这个扩展的显卡上运行,开发者可以使用这个扩展提供的一些更先进更有效的图形功能。
  • 使用扩展的代码示例:

状态机

  • OpenGL自身是一个巨大的状态机。
  • OpenGL的状态通常被称为OpenGL上下文。
  • 我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。我们使用当前OpenGL上下文来渲染。
  • 当使用OpenGL的时候,状态设置函数将会改变上下文。状态使用函数会根据当前OpenGL的状态执行一些操作。

对象

  • 在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集。
  • 使用一个对象时常用的结构:
  • OpenGL常用的工作流:
  • (1)首先创建一个对象,然后用一个id保存它的引用(实际数据被储存在后台)。
  • (2)将对象绑定至上下文的目标位置。
  • (3)设置窗口的选项。
  • (4)将目标位置的对象id设回0,解绑这个对象。
  • 具体实例如下所示:
  • 设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效。
  • 在我们执行一个使用OpenGL状态的操作的时候,只需要绑定含有需要的设置的对象即可。
  • 在我们想绘制其中任何一个模型的时候,只需绑定一个包含对应模型数据的对象就可以了。

参考网址:https://www.opengl.org/

                  https://www.khronos.org/registry/OpenGL/index_gl.php

猜你喜欢

转载自blog.csdn.net/LYKymy/article/details/83032595