初探OpenGL

大纲

  • 推荐书籍

  • 图形API简介

  • 图形API解决哪些问题?

  • OpenGL 中的专业名词解析(简述)

  • OpenGL坐标系解析(简述)

  • 图形/图片从文件渲染到屏幕过程解析(简述)

推荐书籍

业内红宝书:《OpenGL编程指南》、蓝宝书:《OpenGL超级宝典》

图形API简介

OpenGL: 跨编程、跨平台的编程图形程序接口、将计算机的资源抽象成为一个个OpenGL的对象,对这些资源的操作抽象为一个个OpenGL指令,一般用于PC端、MAC端开发

OpenGL ES:一般用于移动端(Android、iOS、黑莓等)、游戏主机、嵌入式设备等而设计的,是OpenGL三维图形API的子集,去除了需要不必要的性能较低的API接口

OpenCV:做识别,身份证、人脸、物体等,一般和人工智能结合运用,第三方代表:face++

DirectX:只用于PC端,不是单纯的图形API,是Windows上的一个多媒体处理框架,按照性质分类,可分四大类:显示部分、声音部分、输入部分、网络部分

Metal:类似opengl es,是Apple为了解决3D渲染而推出的框架

核心动画CoreGraphics、CoreAnimation、CoreImage,在2018年之前,最终都是通过OpenGL ES API来驱动GPU进行渲染绘制显示,2018年及之后,是通过OpenGL Metal

图形API解决什么问题?

  • 系统针对按钮、图片、视图、图层渲染问题
  • 游戏引擎,人物/场景渲染(图形APi)
  • 核心动画,旋转、缩放、平移、图层特效
  • 视频硬/软解码渲染显示(图形API)
  • 视频/图片特效(图形APi)
  • 解决离屏渲染

OpenGL 中的专业名词解析

上下文(context):上下文就是巨大的状态机,面向过程的,保存了OpenGL中的各种状态,记录修改,例如:记录glColor颜色修改、记录glPointSize点大小等

渲染:图片/按钮/视频等绘制显示到屏幕的过程

顶点数组:图片显示的位置,顶点数据都存放在顶点数组里,存放在内存中,顶点数据会传给顶点着色器

顶点缓存区:为了更高效的渲染绘制,顶点数据存放在显示器处理器缓存区,也就是我们常说的GPU显存

位图:就是纹理,就是解码之后的图片数据,位图的大小:像素宽x像素高xRGBA,例如120x120的位图,大小是120x120x4=57600字节

RGBA:一个颜色占一个字节,所以RGBA占4个字节

管线:类似生产流水线

固定管线:顾名思义,固定的,从视觉(OpenGL)角度来解释的话,就是调用系统封装好的固定API,无法自定义,一切都是封装好的,只管用就可以,类似固定着色器(存储着色器)

可编程管线:顾名思义,就是可以自定义的,从视觉(OpenGL)角度来解释的话,就是在顶点着色器和片元着色器这里的时候,可以自定义,用GLSL(着色器语言)来自定义实现绘制渲染

着色器:shader(着色器)图形API,类似函数、方法,通过调用,实现不同的图形构造(GPU)

固定着色器:Apple提供API,只需要调用传参数即可,无法自定义

自定义着色器:可以自定义,基于GLSL(着色器语言)有且只能自定义顶点着色器和片元着色器(像素着色器)

顶点着色器:用来处理顶点相关代码,1、位置、2、平移、旋转、缩放等位置换算 3、手机屏幕显示3D(手机屏幕实际2D,3D图形数据->2D投影换算)

片元着色器:也叫像素着色器,处理一个一个像素点,GPU并行计算

CPU的并行,实际上只是CPU快速的一个一个线程的调度而已,GPU才是真正的并行计算

图片的饱和度调整,也是片元着色器一个一个像素点的修改

GLSL:自定义着色器语言

关栅化:不可自定义,2个过程,1、确定像素范围,2、颜色附着到像素点上去

纹理:也叫位图,解压过后的图片,png/jpeg都是压缩过的图片,因为位图比较大,在网络上传输比较消耗流量,数据也比较大,所以需要压缩一下,在最终显示的时候,需要解压缩,拿到真正的数据绘制渲染显示

混合:2个图层叠加,混合行为,会出发离屏渲染

变换矩阵:根据观察者视角、物体的变化(平移、缩放、旋转等)投影方式,就需要使用变换矩阵

投影矩阵:将3D坐标转换为2D屏幕坐标,实际线条也将在2D坐标下进行绘制,投影方式有2种:

  • 1、正投影:显示2D效果,图片绘制不管远近,1:1进行绘制

  • 2、透视投影:远小近大的效果,3D效果

物体坐标:物体自身坐标系

OpenGL 坐标系

  1. 2D笛卡尔坐标系:坐标是由x、y决定的,如图:
img
  1. 3D笛卡尔坐标系:,坐标是由x、y、z决定的,该图显示的是右手坐标系,如图:
img
  1. 视口:

    img
    img

    观察者视角约近,看到的视口越小,反之,看到的视口越大,视口可以简单理解为物体显示的区域范围,在这个范围内的物体,才能被看到

    以上图标引用了另一位优秀的博主:收纳箱

glViewport(GLint x,GLint y,GLsizei width,GLsizei height)

OpenGL ES坐标系统包括:视窗坐标、规范坐标(规格化设备坐标)、裁剪坐标、视觉坐标、世界坐标、物体自身坐标(对象坐标)

  • 世界物体照相机空间是右手坐标系

  • 规范化设备坐标系用的是左手坐标系

img

视窗坐标系

  • 视窗坐标也就是我们手机窗口对应的坐标系统,以左上角为原点
img

规格化设备坐标系

  • 是左手坐标系,原点坐标为(0,0,0),也就是这个立方体的中心,而它左上角离我们最近的那个顶点的坐标就是(1,1,1),右下角离我们最远的那个顶点的坐标就是(-1,-1,-1),如图:
img

你可能感兴趣的:(初探OpenGL)