============= ↑↑↑↑ 罗里吧嗦一大堆 ↑↑↑↑=============== ↓↓↓↓ 下面开始正文吧 ↓↓↓↓=============
老子反手就是一巴掌,先来了解下 OpenGL 是个什么鬼东西
What is OpenGL
OpenGL 于 1992年7月 蛋(诞)生哒,还记得那是个月黑风高的。。咳 咳 。。SGL公司发布了1.0版本
1.OpenGL是一种应用程序编程接口,它是一种可以对图形硬件设备特性进行访问的软件库
2.OpenGL被设计为一个现代化的、硬件无关的接口,因此我们可以再不考虑计算机操作系统或窗口系统的前提下,在多种不同的图形硬件系统上,或者完全通过软件的方式实现OpenGL接口。
3.OpenGL自身并不包含任何执行窗口任务,或者处理用户输入的函数。
4.OpenGL也没有提供任何用于表达三维物体模型,或者读取图像文件的操作。我们需要通过一系列的几何图元(点、线段、三角形、以及patch)来创建三维空间物体。
5.OpenGL API 是过程性的,不是描述性的,即OpenGL不是面向对象的,所以OpenGL无法利用面向对象的特性。使用的时候只需要:程序与OpenGL的实现链接就可以了!
6.OpenGL的实现可以是软件实现,也可以是硬件实现。
软件实现:是对OpenGL函数调用时做出的响应并创建二位或者三维图像的函数库。
硬件实现:通过设置能够绘制图形或者图像的图形卡驱动程序
那么了解了这些它可以用来做什么呢
应用领域:视频 图形 图片处理, 2D/3D游戏引擎开发,科学可视化,医学软件的开发,CAD(计算机辅助技术),虚拟实境(AR、VR),AI人工智能。
OpenGL ES 和 OpenGL有啥子关系呢?(ES是一个在移动平台能够支持OpenGL的最基本功能的精简规范)
1.OpenGL ES 是 OpenGL 的子集,针对 手机 Pad 和游戏主机 嵌入式设备而设计。
2.OpenGL ES 是从 OpenGL 裁剪定制而来的,去除了glBegin/glEnd, 四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元, 和许多非必要的特性,剩下最核心有用的部分。
OpenGL程序需要执行的主要操作步骤
1.从OpenGL的几何图元中设置数据,用于构建形状;
2.使用不同的着色器对输入的图元数据执行计算操作,判断位置,颜色以及其他渲染性;
3.将输入图元的数学描述转为与屏幕位置对应的像素片元,这个过程也称为 光栅化 ;
4.针对光栅化过程产生的每个片元,执行片元着色器,从而决定这个片元的最终颜色和位置;
5.如果有必要可以对片元执行一些额外的操作。
例如:判断片元对应的对象是否可见,或者将片元的颜色与当前屏幕位置的颜色进行融合。
OK,至此咱和这个可恶的家伙来个约法三章 (开发语言与编程约定)
我们以后见到的OpenGL函数多是以 gl 开头,因为OpenGL的函数遵循一定的命名约定,他可以告诉我们这个函数来自于哪个函数库,并且还可以告诉我们这个函数的参数个数和类型。
上个书写格式:
< 函数库前缀 > < 根命令 > < 可选的参数数量 > < 可选的参数类型 >
来张图解
在此我们还需要了解一下坐标系与变换
1.在开发OpenGL程序时,需要用到两个坐标系:
一个称为对象坐标系:(物体坐标系)我们在开发中使用的坐标系。
另一个称为世界坐标系:(窗口坐标系 或 屏幕坐标系)这个坐标系中的单位是像素。
2.在绘制过程中,OpenGL会 自动实现从对象到窗口坐标系的转换 ,所需要的信息是屏幕中显示的窗口尺寸和用户希望显示对象空间的大小。
3.OpenGL所需要的坐标系变换需要两个矩阵决定
即:模型视图矩阵 和 投影矩阵 ,这些矩阵是OpenGL的状态的一部分。
设置这两种矩阵的典型步骤包括以下三个步骤:
1.指定我们希望修改的矩阵;
2.将矩阵设为单位矩阵;
3.修改当前矩阵为用户期望的矩阵。
为什么使用OpenGL ES 呢?
直接上图
没有OpenGL时是将数据从一块内存复制到另一块内存的,速度比较慢,而且在内存复制数据时 cup 和 GPU是不能对该数据进行操作的。
有了OpenGL之后 可以通过 缓存区来操作数据这样可以更加有效的利用 cup和GPU。
12点了。。困死。扯呼......