OpenGL ES初步了解

前面学习了OpenGL相关知识,下面过渡到OpenGL ES的学习中,本章主要是对OpenGL ES的初步了解。

OpenGL ES (OpenGL for Embedded Systems) 是以手持和嵌入式为目标的高级3D图形应用程序编程接口(API)。OpenGL ES 是目前智能手机中占据统治地位的图形API,⽀持的平台: iOS, Andriod , BlackBerry ,bada ,Linux ,Windows。
OpenGL ES是OpenGL的简化版本,它消除了冗余功能,提供了一个既易于学习又更易于在移动图形硬件中实现的库,有允许应用程序利用底层图形处理器的强⼤功能。iOS设备上的GPU可以执行复杂的2D和3D绘图,以及最终图像中每个像素的复杂着色计算。

下面我们来初步了解OpenGL ES中的可编程部分:顶点着色器和片元着色器。

  • 顶点着色器

    1)顶点着色器输入:

    1、着色器程序-描述顶点上执⾏操作的顶点着⾊器程序源代码/可执⾏文件(GLSL编写的代码)
    2、顶点着⾊器输⼊(属性) -⽤顶点数组提供每个顶点的数据(顶点、纹理、法线坐标数据)
    3、统⼀变量(uniform)-顶点/⽚元着⾊器使⽤的不变数据(矩阵变换)
    4、采样器-代表顶点着⾊器使⽤纹理的特殊统⼀变量类型(采样纹理)
    

    2)顶点着色器业务

    1、通过矩阵变换位置
    2、计算光照公式⽣成逐顶点颜色
    3、生成/变换纹理坐标
    总结:可编程性就是可以用于执⾏自定义计算,实施新的变换,光照或者传统的固定功能所不允许的基于顶点的效果.
    

    3)顶点着色器代码案例
    基本格式:通道修饰符 精度 变量类型 变量名

    attribute vec4 position;
    attribute vec2 textCoordinate;
    uniform mat4 rotateMatrix;
    varying lowp vec2 varyTextCoord;
    void main()
    {
    // 把textCoordinate交给varyTextCoord,就可以把纹理坐标传递到片元着色器里面去。
        varyTextCoord = textCoordinate;
    
        vec4 vPos = position;
        vPos = vPos * rotateMatrix;// 让每一个顶点都和旋转矩阵相乘
    
        gl_Position = vPos;// gl_Position是一个内建变量,是vec4类型的,必须给它赋值。
    }
    
  • 片元着色器

    1)片元着色器输入:

    1、着色器程序-描述片元上执⾏操作的片元着⾊器程序源代码/可执⾏文件(GLSL编写的代码)
    2、输⼊变量-光栅化单元⽤插值为每个片段⽣成的顶点着⾊器输出
    3、统⼀变量(uniform)-顶点/⽚元着⾊器使⽤的不变数据(矩阵变换)
    4、采样器-代表片元着⾊器使⽤纹理的特殊统⼀变量类型(采样纹理)
    

    2)片元着色器业务

    1、计算颜色
    2、获取纹理值
    3、往像素点中填充颜⾊值(纹理值/颜色值)
    总结:可编程性就是可以用于图片/视频/图形中每个像素的颜色填充(⽐如给视频添加滤镜,实际上就是将视频中每个图片的像素点颜色填充进行修改)。
    

    3)片元着色器代码案例
    基本格式:通道修饰符 精度 变量类型 变量名

    varying lowp vec2 varyTextCoord;
    uniform sampler2D colorMap;
    void main()
    {
        // texture2D(纹理采样器, 纹理坐标); 为了取得纹素(纹理对应坐标上的颜 色值),比如取到了一个rgba四维变量
      gl_FragColor = texture2D(colorMap, varyTextCoord);
    }
    

注意事项:

1、顶点着色器里的 varying lowp vec2 varyTextCoord;和片元着色器里的 varying lowp vec2 varyTextCoord;必须定义的一模一样才行,包括通道、精度、类型和变量名都要一致,这样才能从顶点着色器传进来,否则拿不到对应数据。
2、uniform sampler2D colorMap 是由 uniform 通道传进来的纹理采样器,通过它可以拿到对应的纹理。

你可能感兴趣的:(OpenGL ES初步了解)