1
头图

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应该从以下几个方面入手:

  1. OpenGL标准接口;
  2. 数学方便知识(三角函数、矩阵等);
  3. 平台相关知识(EGL等);
  4. 可编程管线中Sharder编程知识;
  5. 硬件相关知识和概念(比如GPU设计原理等)

系统通过我们系列文章可以对OpenGL有深入理解。

3、OpenGL原理之变换

image.png

由上图,我们从(x,y)旋转到(x',y'),通过三角函数知识有:

x' = r * cos(a + b);
   = r * (cos(a)*cos(b) - sin(a)*sin(b));
   = x * cos(a) - y * sin(a);
y' = r * sin(a + b);
   = r * [sin(a)cos(b) + cos(a)*sin(b)];
   = x * sin(a) + y * cos(a);

近一步化简:

x' = x * cos(a) - y * sin(a);
y' = x * sin(a) + y * cos(a);

是不是我们的矩阵运算?

image.png

4、投影

我们一般有两种投影方式:

  • 透视投影
  • 正投影

我们日常生活就遵循透视投影规则:“远小近大”,《三体》里云天明将的故事中深水王子就是个“正投影”的怪物。体现在我们渲染中,如何做透视投影呢?

image.png

其实很像我们的小孔成像。有三个位置组成:人眼、远平面、近平面。最终两个平面形成的平截头体(棱台)中的物体被投射到二维平面的远平面中。

5、总结

本文介绍了OpenGL相关的知识:OpenGL历史、OpenGL发展、OpenGL应用等,并且介绍了OpenGL需要掌握的知识,OpenGL变换原理及投影成像原理。


轻口味
16.9k 声望3.9k 粉丝

移动端十年老人,主要做IM、音视频、AI方向,目前在做鸿蒙化适配,欢迎这些方向的同学交流:wodekouwei


引用和评论

0 条评论