什么是 OpenGL ES

2021-10-17  本文已影响0人  木扬音

OpenGL ES简介

OpenGL ES渲染流程

Apple官方文档

渲染流程

OpenGL ES 图形管道

image.png

顶点着色器

处理顶点数据的着色器程序

输入
输出

gl_Position:GLSL的内建变量,即处理后的最终顶点数据
gl_PointSize:顶点着色器中点的大小,不怎么使用

image.png
使用场景

可以⽤于执⾏⾃定义计算,实施新的变换,照明或者传统的固定功能所不允许
的基于顶点的效果

代码案例
attribute vec4 position; //四维向量
attribute vec2 textCoordinate; //二维向量
uniform mat4 rotateMatrix; //4*4矩阵
varying lowp vec2 varyTextCoord; //纹理坐标传入片元着色器
void main()
{
    varyTextCoord = textCoordinate;
    vec4 vPos = position;
    vPos = vPos * rotateMatrix;//旋转
    gl_Position = vPos; 
}

图元装配

将顶点数据计算成一个个图元,这个阶段会执行裁剪、透视分割和Viewport变换

光栅化

将图元转化为一组二维片段的过程,主要是由于屏幕是2D的,所以转换的像素点也是二维的

片元着色器

输入
输出
image.png
使用场景
代码案例
varying lowp vec2 varyTextCoord; //必须和顶点着色器中一模一样,这样才能传递纹理坐标
uniform sampler2D colorMap;//采样器类型
void main() {
    gl_FragColor = texture2D(colorMap, varyTextCoord); //获取对应位置/坐标的颜色值
}

总结

顶点着色器、片元着色器都是代码段,类似于iOS中有返回值的函数/方法,

这两个返回值都属于GLSL中的内建变量,是封装好的,直接将数据赋值给它即可

OpenGL ES的应用

图片滤镜

视频滤镜

原理以及处理方式是一样的(GLSL代码),视频也是一帧一帧处理的,而一帧就是一张图片

上一篇 下一篇

猜你喜欢

热点阅读