OpenGL 入门一:基础知识及概念
1、什么是 OpenGL
OpenGL:open graphic library,即开发图形库。它被定义为“图形硬件的一种软件接口”。实质上是 3D 图形和模型库,它具有高度可移植性,并且具有非常快的速度。可以创建优雅漂亮的 3D 图形,具有出色的视觉质量。并且速度远快于光线追踪仪或软件渲染引擎。
1.1 OpenGL 是编程语言吗?
OpenGL 不是一种像 C 和 C++这样的编程语言,它更像是一个 C 运行函数库,提供了一些预包装的功能。实际上,并不存在像 OpenGL 程序这类东西,而是我们开发人员所写的程序,恰好使用了 OpenGL 作为编程接口之一。举个例子,Windows 是一种编程语言吗?并不是,所谓的 Windows 程序员也只是基于 Windows 提供的 API 开发软件的程序员而已。
1.2 OpenGL 和谁打交道
一般来说,OpenGL 是由那些专门用于显示和操纵 3D 图形的计算机硬件所使用的(显卡、GPU,后面我们逐步介绍到)。纯软件的通用 OpenGL 实现也是可以的。比如我们 Android 手机系统的硬件吗和硬编码,操作系统完全可以不实现这部分硬件,然后使用软件实现一套;还有我们的路由器,我们也完全可以不专门买路由器,而是搞一台主机,然后插两块网卡,用软件实现路由表,路由分发。微软实现方案类似于这种纯软件实现,性能表现并不是很好。
1.3 OpenGL 应用场景
OpenGL 使用非常广泛,比如 CAD 工业制图软件、PS 图像设计软件、电影特效、游戏等。随着硬件加速以及高速的 PC 微处理器的普及,3D 图形现已成为消费者和商业程序的典型组件,不在局限于游戏和科学应用。
1.4 OpenGL 演进历史
OpenGL 前身是 SGI(Silicon Graphics,Inc)公司(SGI 是一家久负盛名的公司,在计算机和动画方面处于领先的地位)的 IRISGL,也是 SGI 对 IRIS GL 的移植性进行改进和提高的结果。这个新的 API 不仅具有 GL 的功能,而且是一个开放的标准。他的输入来自于其他图形厂商,并且更容易应用到其他平台和操作系统。从根本上讲,OpenGL 就是为 3D 几何图形处理量身定做的。
SGI 希望更多计算机能够运行 OpenGL 软件,因此诞生了 ARB(OpenGL Architecture Reiview Board),尽管 SGI 控制 OpenGL API,但 ARB 的创立者还包括 SGI、 DEC、 IBM、 Intel、 Microsoft。ARB 每隔 4 年召开一次会议,对规范进行维护和改善,并对 OpenGL 标准进行升级。2006 年 SGI 公司已经破产,把 OpenGL 标准控制从 ARB 移交给了新的工作组:The Khronos Group(www.khronos.org)。Khronos 是一个由它的成员提供资金的行业协会,专注于开放媒体标准的创建和维护。大多数 ARB 成员也成为了
Khronos 成员,因此变动没有他打破。现在我们搜索 OpenGL 相关的知识结果都是 Khronos 小组的,Khronos 升级了 OpenGL 以及姊妹 API-OpenGL ES,并且推出了用于替换 OpenGL 的 Vulkan。
2、 学 OpenGL 到底学什么?
OpenGL 设计硬件、软件、接口、标准等一系列的知识,所以我们要真正深入了解 OpenGL 应该从以下几个方面入手:
OpenGL 标准接口;
数学方便知识(三角函数、矩阵等);
平台相关知识(EGL 等);
可编程管线中 Sharder 编程知识;
硬件相关知识和概念(比如 GPU 设计原理等)
系统通过我们系列文章可以对 OpenGL 有深入理解。
3、OpenGL 原理之变换
由上图,我们从(x,y)旋转到(x',y'),通过三角函数知识有:
近一步化简:
是不是我们的矩阵运算?
4、投影
我们一般有两种投影方式:
透视投影
正投影
我们日常生活就遵循透视投影规则:“远小近大”,《三体》里云天明将的故事中深水王子就是个“正投影”的怪物。体现在我们渲染中,如何做透视投影呢?
其实很像我们的小孔成像。有三个位置组成:人眼、远平面、近平面。最终两个平面形成的平截头体(棱台)中的物体被投射到二维平面的远平面中。
5、总结
本文介绍了 OpenGL 相关的知识:OpenGL 历史、OpenGL 发展、OpenGL 应用等,并且介绍了 OpenGL 需要掌握的知识,OpenGL 变换原理及投影成像原理。
版权声明: 本文为 InfoQ 作者【轻口味】的原创文章。
原文链接:【http://xie.infoq.cn/article/65c666c5061f0d64518062429】。文章转载请联系作者。
评论