在学系OpenGL 之前,首先了解一波它的名词术语;
因为深入理解这些术语, 对后面的学习会更舒服一些;
如果有玩过3D MAX 会对其中一些概念理解起来比较容易,如纹理 贴图 坐标系等
01. 计算机图形API有哪些?
- OpenGL
2D和3D的跨平台,跨编程语言图形API,它将计算机资源抽象成一个个对象,对这些对象的操作抽象成了OpenGL指令, 利用并行的高运算的GPU能力,加速渲染图形
- OpenGL ES
OpenGL三维图形的子集, 针对手机、游戏机等嵌入式设备设计的一套图形API,去除了不必要和性能较低的接口;
- DirectX
windows平台图形API, 所以不属于跨平台;
- Matel
苹果为游戏开发者推出的新平台技术Matel, 该技术能为3D图像渲染提高10倍性能,Matel是为解决3D渲染推出的框架;
02. OpenGL context
OpenGL 上下文环境, 是一个庞大的状态机,保存了一堆控制开关
不管在什么编程语言中,都是类似c语言面向过程的函数,因此可以通过对OpenGL指令的封装,可以将OpenGL相关调用封装成为一个面向对象的图形API;
当上状态机进入特殊状态 比如停机状态, 就不接受输入
切换上下文环境 会有较大的开销 ,因此在应用中,可以创建不同的上下文, 在不同的线程中使用不同的上下文,上下文之间可以共享纹理,缓冲区等资源,这种方案比切换上下文更加合理高效;
04. 渲染(Rendering)是指什么?
将数学和图形数据转换成3D空间的图像叫做渲染(Rendering)
- 作为动词 在计算机中指的是创建三维图像的过程
- 作为名词 指最终产生的作品 (图片、按钮、视频 显示到屏幕的过程)
05. 顶点数组和顶点缓存区
- 顶点数组保存在内存中,
- 顶点缓存区 顶点数据存储在GPU的显存中
06. 管线
相当与一条流水线, 单向,把图形图像从管道的一头流到另一头,从开始执行到末尾,管线是一个抽象概念
有点像Linux管道命令,用 | 分割, 先做什么,后做什么, 一步一步来;
把图形图像渲染到屏幕的过程
核心要点
- 任务严格按照顺序依次执行
07. 固定管线与可编程管线
- 固定管线 对应非常多的固定着色器,由一系列着色器程序组成的管线
- 可编程管线 自定义编程模具(GLSL语法驱动GPU) 因为随着场景的丰富,固定管线或者着色器程序不能满足开发,OpenGL就将相关部分开放成可编程,可以freestyle,直到OpenGL ES3.0, 只开放了顶点着色器和片元着色器可供编辑;
07. 固定存储着色器程序(shader)
- 顶点着色器
- 片元着色器(像素着色器)
- 自定义着色器
7.1 顶点着色器
处理顶点数据的几何关系,
1 确定位置
2 旋转 平移 缩放 换算
3 3D到2D的投影换算
7.2 片元着色器
片元着色器
片元着色器 主要负责处理像素点,对每一个像素点进行颜色的计算
08. GLSL (OpenGL Shading Language)
着色器语言, 就像开发iOS用Objective-C, Swift, 开发android用Java, Kotlin, 开发shader, 使用GLSL;
09. 光栅化(Rasterization)
把顶点数据转化为片元的过程,其实就是将几何图元转换为二维图形的过程,包含
10. 纹理(Texture)
可以理解为一张图片(位图),
11. 混合(Blending)
混合,可以理解在photoshop中的,叠加模式, 不同的图层叠加在一起,产生混合的的效果,
12. 矩阵
- 变换矩阵
图形想发生平移 缩放 旋转 就需要使用变换矩阵 - 投影矩阵
将3D坐标转换为二维屏幕坐标
13. 渲染上屏/交换缓存区(SwapBuffer)
投影
- 透视投影
远小近大 3D图形 - 正投影 (平行投影)
1:1进行绘制 2D图形
OpenGL 坐标系
- 2D笛卡尔坐标系
- 3D笛卡尔坐标系
位图 Bitmap
也称之为点阵图 栅格图 是由一个个像素(Pixel)点组成的
位图大小,120120的图片= 120120 = 14400 * 4 = 位图大小(Byte)
网友评论