目录

渲染:

OpenGL:

OpenGL ES:

OpenGL上下文(OpenGL context)

EGL:

OpenGL 渲染

OpenGL 着色语言


渲染:

        用软件将模型生成图像的过程。是计算视频编辑软件中的效果,以生成最终视频的输出过程。

模型:用语言或者数据结构进行严格定义的三维物体或虚拟场景的描述;

图像:数字图像或者位图图像

渲染应用领域:计算机视频游戏,模拟、电影或者电视特效以及可视化设计(光学,视觉感知,数学、软件开发)

android打印apk Android打印渲染是什么意思_数据

  

android打印apk Android打印渲染是什么意思_数据_02

OpenGL:

功能强大、调用方便的底层图形库,可用于二维或三维图像的处理与渲染

OpenGL ES:

三维图形 OpenGL的子集,针对手机、ipad和游戏主机等嵌入式设备而设计

2.x 版本相比 1.x 版本有较大差异,1.x 版本为 fixed function pipeline,即固定管线硬件,而 2.x 版本为 programmable pipeline,可编程管线硬件。

固定管线中原本由系统做的一部分工作,在可编程管线中必须需要自己写程序实现,具体程序为 vertex shader(顶点着色器)和 fragment shader(片元着色器)。

OpenGL上下文(OpenGL context)

Opengl仅关注图像渲染的图像接口库,在渲染过程中需要将顶点信息、纹理信息、编译好的着色器等渲染状态信息存储起来,存储这些信息的数据结构就可以看作是OpenGL的上下文。

所有的渲染工作都依赖这些渲染状态信息来完成,当一个上下文被销毁时,对应的OpenGL渲染工作也将结束。

调用任何OpenGL函数前,必须已经创建了OpenGL cotext,GL context存储了OpenGL的状态变量以及其他渲染有关的信息

OpenGL采用Client-Server的模型来解释OpenGL程序,server存储OpenGL Context,Client提出渲染请求,Server给予响应

EGL:

因为OpenGL 不负责窗口管理,所以窗口的管理需要交给各个设备自己完成。IOS平台使用EAGL提供本地平台对OpenGL的实现,Android平台使用EGL提供本地平台对OpenGL的实现

EGL是OpenGL ES和Android底层平台视窗系统之间的接口,在OpenGL的输出与设备屏幕之间的连接者;为OpenGL 提供上下文环境和管理窗口

EGL 为双缓冲机制,有一个Back Frame Buffer和一个Front Frame Buffer,正常绘制目标是Back,绘制完成后调用eglBuffer API在Front显示出来

从代码层面看,OpenGL ES的opengles包下定义了平台无关的绘图指令,EGL定义了控制display(实际显示设备)、contexts(存储OpenGL ES绘图的状态信息)、surfaces(存储图像的内存区域Frame Buffer)的统一的平台接口

android打印apk Android打印渲染是什么意思_数据_03

使用EGL绘图的一般步骤:

  1. 获取EGL display对象
  2. 初始化与EGL display之间的连接
  3. 获取EGL config对象
  4. 创建EGL context实例
  5. 创建EGL Surface实例
  6. 连接EGL Context和EGL Surface
  7. 使用GL指令绘制图形
  8. 断开并释放与EGL Surface关联的EGL Context对象
  9. 删除EGL SUrface对象
  10. 删除EGL COntext对象
  11. 终止与EGL Display之间的连接

但是在Android平台上开发OpenGL ES应用,GLSurfaceView控件提供了对Display、Surface、Context的管理,简化了上述流程

OpenGL 渲染

渲染管线流程为:

顶点数据---顶点着色器--图元装配--几何着色器--光栅化--片段着色器--逐片端处理--帧缓冲

OpenGL 渲染管线流程就是OpenGL 渲染图像的过程,也是OpenGL将图片渲染到屏幕上的过程,可分为以下几阶段:

  1. 指定几何对象

提供顶点数据后确定具体要画的是点,线段还是三角形,由此确定具体要执行的绘制命令

  1. 顶点处理

根据模型视图(即根据几何图元创建的物体)和投影矩阵进行变换来改变顶点的位置,根据纹理坐标与纹理居正来改变纹理坐标的位置,如果是三维的渲染还需要处理光照算法和法线变换

总结是处理顶点坐标变换和光照处理,每个顶点单独处理,输入数据是每个顶点的属性特征,输出是变换后的顶点数据

  1. 图元组装

根据顶点属性,将顶点属性根据图元规则组装成图元

  1. 栅格化操作

将顶点/边/图形内部等图元数据分解成更小的单元(像素点),并对应于缓冲区的各个像素,这些单元称为片元,一个片元可能包含窗口颜色、纹理坐标等属性。

片元的属性是图元上的顶点数据经过插值而确定的,,即确定好每一个片元是什么

  1. 片元处理

栅格化操作构造了像素点,这个阶段则处理这些像素点,根据自己的业务处理(如提亮、饱和度、对比度等)来变换这个片元的颜色

  1. 逐片段处理

进行剪切、Alpha测试、混合等处理,这些操作将会影响其最后在帧缓冲区的颜色值

  1. 帧缓冲操作

此阶段主要执行帧缓冲的写入操作,也是渲染管线的最后一步,负责将最终的像素点写到帧缓冲区

OpenGL 着色语言

GLSL 全称为 OpenGL Shading Language,为了实现着色器功能而向开发人员提供的一种开发语言,可从以下几点了解该语言:

基本数据类型

Void、bool、int.....

vec2 vec3 vec4:n-维浮点数向量

bevc2 bvec3 bvec 4: n-维布尔向量

ivec2 ivec3 ivec4:n-维整数向量

mat2、mat3、mat4:2x2、3x3、4x4 浮点数矩阵

sampler2D:2D 纹理

samplerCube:盒纹理

变量修饰符

none:(默认的可省略)本地变量,可读可写,函数的输入参数既是这种类型

const:声明变量或函数的参数为只读类型

attribute:用于保存顶点或法线数据,它可以在数据缓冲区中读取数据,仅能用于顶点着色器

uniform:在运行时 shader 无法改变 uniform 变量,一般用来放置程序传递给 shader 的变换矩阵,材质,光照参数等等,可用于顶点着色器和片元着色器

varying:用于修饰从顶点着色器向片元着色器传递的变量

要注意全局变量限制符只能为 const、attribute、uniform 和 varying 中的某一个,不可复合。2

内置变量

GLSL 程序使用一些特殊的内置变量与硬件进行沟通,他们大致分成两种,一种是 input 类型,他负责向硬件(渲染管线)发送数据;另一种是 output 类型,负责向程序回传数据,以便编程时需要。

顶点着色器中 output 类型的内置变量如下:

highp vec4  gl_Position:放置顶点坐标信息

mediump float gl_PointSize:需要绘制点的大小,(只在gl.POINTS模式下有效)

片元着色器中 input 类型的内置变量如下:

mediump vec4 gl_FragCoord;:片元在 framebuffer 画面的相对位置

bool gl_FrontFacing:标志当前图元是不是正面图元的一部分

mediump vec2 gl_PointCoord:经过插值计算后的纹理坐标,点的范围是0.0到1.0

片元着色器中 output 类型的内置变量如下:

mediump vec4 gl_FragColor:设置当前片点的颜色

mediump vec4 gl_FragData[n]:设置当前片点的颜色,使用glDrawBuffers数据数组

内置常量

内置函数