美文网首页
(一)OpenGL ES 3.0简介

(一)OpenGL ES 3.0简介

作者: YongtaoHuang | 来源:发表于2019-10-10 10:03 被阅读0次

    下一篇:(二)你好,三角形:https://www.jianshu.com/p/4dfd7510178e

    Open GL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。

    OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。

    OpenGL ES 3.0是从Open GL 3.3规范衍生而来。

    OpenGL ES 3.0

    OpenGL ES 3.0实现了具有可编程着色功能的图形管线由两个规范组成:Open GL ES 3.0 API规范和Open GL ES 着色语言3.0 规范。下图概述OpenGL ES 3.0图形管线流程:

    OpenGL ES3.0图形管线.png

    顶点着色器

    顶点着色器.png
    // 版本 OpenGL ES 3.0
    #version 300 es 
    uniform mat4 u_mvpMatrix; // 统一变量 投影矩阵
    
    in vec4 a_position; // 输入变量 顶点位置值
    in vec4 a_color; // 输入变量 顶点颜色值
    
    out vec4 v_color; // 输出变量 顶点颜色值
    void main() {
        v_color = a_color;
        // 内建变量gl_Position 表示变换后的位置
        gl_Position = u_mvpMatrix * a_position; 
    }
    

    图元装配

    图元(Primitive)是三角形、直线或者点精灵几何对象。将图元安置在视锥体(屏幕上可见的3D空间区域)的过程即为图元装配。

    光栅化

    光栅化是将图元转化为一组二维片段的过程,然后这些片段将由片段着色器处理。


    光栅化.png

    片段着色器

    片段着色器.png
    #version 300 es
    precision mediump float; // 设置默认精度
    
    in vec4 v_color; // 输入变量 从顶点着色器输入的顶点颜色
    
    out vec4 fragColor; // 输出变量 片段颜色
    void main(){
        fragColor = v_color;
    }
    

    逐片段操作

    逐片段操作.png

    逐片段操作即在帧缓冲区的(x, y)位置写入片段的颜色、深度或者模板值。

    OpenGL ES 3.0新功能

    在纹理、着色器、几何形状、缓冲区对象、帧缓冲区等方面有许多改进。
    1、渲染管线多重增强,实现先进视觉效果的加速,包括遮挡查询(Occlusion Query)、变缓反馈(Transform Feedback)、实例渲染(Instanced Rendering)、四个或更多渲染目标支持。
    2、高质量ETC2/EAC纹理压缩格式成为一项标准功能,不同平台上不再需要需要不同的纹理集。
    3、新版GLSL ES 3.0着色语言,全面支持整数和32位浮点操作。
    4、纹理功能大幅增强,支持浮点纹理、3D纹理、深度纹理、顶点纹理、NPOT纹理、R/RG单双通道纹理、不可变纹理、2D阵列纹理、无二次幂限制纹理、阴影对比、调配(swizzle)、LOD与mip level clamps、无缝立方体贴图、采样对象、纹理MSAA抗锯齿渲染器。
    5、一系列广泛的精确尺寸纹理和渲染缓冲格式,便携移动应用更简单。

    OpenGL ES 3.0和后向兼容

    OpenGL ES 3.0完全后向兼容OpenGL ES 2.0,意味着OpenGL ES 2.0的所有程序都可在3.0上正常运行。

    EGL

    EGL是Khronos渲染API和原生窗口系统之间的接口。
    任何OpenGL ES应用程序都必须在开始渲染之前使用EGL执行以下任务:
    1、查询并初始化设备商可用的显示器;
    2、创建渲染表面;
    3、创建渲染上下文;
    OpenGL ES应用程序必须包括以下头文件:

    #include <EGL/egl.h>
    #include <GLES3/gl3.h>
    

    EGL命令语法

    所有EGL命令都以egl前缀开头,例如eglCreateWindowSurface()。
    EGL数据类型如下:


    EGL数据类型.png

    OpenGL ES命令语法

    所有OpenGL ES命令都以gl为前缀,以输入参数类型与个数为后缀。
    例如:glUniform2i(location, 1, 0)表示用于指定统一变量,输入两个32位有符号整型的命令。

    错误处理

    若不正确使用OpenGL ES命令,应用程序会生成一个错误代码。通过glGetError()命令获得。


    基本错误代码.png

    基本状态管理

    启用和停用管线的某个阶段
    glEnable()
    glDisable()
    检查某个管线阶段状态
    glisEnalbed()

    延申阅读

    OpenGL ES 3.0
    https://www.khronos.org/registry/OpenGL-Refpages/es3.0/
    EGL
    https://www.khronos.org/egl

    下一篇:(二)你好,三角形:https://www.jianshu.com/p/4dfd7510178e

    相关文章

      网友评论

          本文标题:(一)OpenGL ES 3.0简介

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