OpenGL ES

作者: FireStroy | 来源:发表于2020-09-21 17:07 被阅读0次

OpenGL ES

OpenGL ES是OpenGL的子集。是针对嵌入式设备及移动终端设备的高级3D图形应用程序,例如iOS、Android、Windows等。OpenGL ES 是跨平台的,本身不会提供窗口相关方法,需要依靠各自平台提供。

OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它消除了冗余功能,提供了了一个既易于学习又更易于
在移动图形硬件中实现的库。

苹果提供了一份iOS端的文档OpenGL ES Programming Guide

OpenGL ES架构

penGL ES允许应用程序利⽤底层图形处理器的强大功能。iOS设备上的GPU可以执行复杂的2D和3D绘图,以及最终图像
中每个像素的复杂着⾊计算。

Client-Server Architecture来自苹果官方提供

OpenGL ES 图形管道

图形管道-官方文档

Application:提供图元、图像数据。
Vertex:顶点数据的变换。
Geometry:指定顶点数据的连接方式(图元装配)、超出视口部分的裁剪。
Fragment:纹理处理 雾化处理
Framebuffer Operation(帧缓冲区):透明度混合、模板、深度测试;最后在混合,放入缓冲区等待显示。

顶点着色器 Vertex

  1. 着色器程序—描述顶点上执行操作的顶点着⾊器程序源代码/可执⾏行文件
  2. 顶点着⾊器输⼊(属性) — ⽤顶点数组提供每个顶点的数据
  3. 统⼀变量(uniform)—顶点/片元着色器使用的不变数据
  4. 采样器—代表顶点着⾊器使⽤纹理的特殊统⼀变量类型.

顶点着色器样例:

attribute vec4 position;
attribute vec2 textCoordinate; 
uniform mat4 rotateMatrix; 
varying lowp vec2 varyTextCoord; 
void main(){
varyTextCoord = textCoordinate;
vec4 vPos = position;
vPos = vPos * rotateMatrix;
gl_Position = vPos; 
}

顶点着色器的主要业务:

  1. 矩阵变换位置
  2. 计算光照公式⽣生成逐顶点颜色
  3. ⽣生成/变换纹理理坐标

输出的结果会存放在内建变量gl_Position、gl_PointSize中。

图元装配

顶点着器之后,下⼀个阶段就是图元装配. 图元(Primitive): 点,线,三⻆角形等.
图元装配: 将顶点数据计算成⼀个图元.在这个阶段会执⾏裁剪、透视分割和 Viewport变换操作。
图元类型和顶点索确定将被渲染的单独图元。对于每个单独图元及其对应的顶点,图 元装配阶段执行的操作包括:将顶点着⾊器的输出值执⾏裁剪、透视分割、视⼝变换 后进⼊光栅化阶段。

光栅化

在这个阶段绘制对应的图元(点/线/三⻆形). 光栅化就是将图元转化成⼀一组二维片段的过程.⽽这些转化的⽚段将由片元着⾊器器处理.这些⼆维片段就是屏幕上可绘制的像素.

⽚段着⾊器/⽚元着⾊器 Fragment

输入主要是由3种:

  1. 由顶点着色器桥接传递过来的纹理坐标等
  2. 通过uniform通道输入统一变量,即顶点/片元着色器中使用的不变的数据
  3. 采样器:表示顶点着色器使用纹理的特殊统一变量类型,例如纹理就是通过采样器传递

主要业务:

  • 计算颜色
  • 获取纹理值
  • 往像素点中填充颜色值(纹理值/颜色值)

示例:
varying:变量名需要和顶点着色器一致否则读取不到数据。
sampler2D 采样器类型
texture2D(纹理采样器,纹理坐标):获取对应位置/坐标的颜色值,简称获得纹素
输出结果gl_FragColor。

varying lowp vec2 varyTextCoord; 
uniform sampler2D colorMap;
void main() {
gl_FragColor = texture2D(colorMap, varyTextCoord); }

相关文章

网友评论

      本文标题:OpenGL ES

      本文链接:https://www.haomeiwen.com/subject/wzjuyktx.html