了解OpenGL ES

作者: 黑眼豆豆_ | 来源:发表于2020-07-27 18:03 被阅读0次

    OpenGL ES(OpenGL for Embedded Systems)是以手持和嵌入式为目标的高级3D图形应用程序编程接口(API),它支持的平台包括iOS、Android、BlackBerry等等。它是OpenGL的子集,它消除了冗余功能。

    OpenGL ES provides a C-based interface for hardware-accelerated 2D and 3D graphics rendering. The OpenGL ES framework (OpenGLES.framework) in iOS provides implementations of versions 1.1, 2.0, and 3.0 of the OpenGL ES specification.
     This collection of documents describes the platform-specific APIs for OpenGL ES on iOS devices, also known as EAGL. EAGL provides graphics contexts that encapsulate all OpenGL ES state and the ability to configure a Core Animation layer to be the destination for OpenGL ES drawing commands. EAGL also allows OpenGL ES objects, such as textures, renderbuffers, and framebuffers, to be shared between two or more graphics contexts.

    图形管线

    图形管线.png
    • 顶点数据一般以顶点数组的形式存放在顶点缓冲区中
    • 顶点着色器负责确定图形的位置和大小(通过顶点数据)
    • 经过图元装配、光栅化等一系列流程后,处理好的数据最终给到片元着色器
    • 如果有纹理的话,纹理坐标可以给顶点着色器,传给片元着色器,或者直接给片元着色器这2种方式给到片元着色器
    • 片元着色器通过对每个像素点进行渲染后将处理的数据存入到帧缓冲区,最后扫描到屏幕上

    顶点着色器

    含义

    顶点着⾊器程序 —— 描述顶点上执⾏操作的顶点着⾊器程序源代码/可执⾏⽂件

    输入

    顶点着色器.png

    上图就是顶点着色的工作流程,我们可以通过3种方式将值传给顶点着色器.

    • 输入属性 —— ⽤顶点数组提供每个顶点的数据
    • 统一变量 —— 顶点/⽚元着⾊器使⽤的不变数据
    • 采样器 —— 代表顶点着⾊器使⽤纹理的特殊统⼀变量类型
      而经过一系列处理后,我们可以得到2个参数

    输出

    • gl_Position,定义了顶点的坐标位置,它属于内建变量。
    • gl_PointSize,定义了顶点的大小

    内建变量,即OpenGL ES已经做好了定义,直接使用,不需要重新定义。

    业务

    • 矩阵变换位置(旋转、缩放、平移)
    • 计算光照公式生成逐个顶点颜色
    • 生成、变换纹理坐标

    图元装配

    图元转配:将顶点数据计算成一个个图元,在这个阶段会执行裁剪、透视分割、视口(viewport)变换等操作。

    光栅化

    光栅化就是将图元转化成一组二维片段的过程,转化完成后的数据将传递给片元着色器进行渲染、绘制。


    光栅化.png

    片元着色器

    含义

    片元着色器 —— 描述片段上执行操作的片元着色器程序源代码/可执行文件

    输入

    片元着色器.png
    • 输入属性 —— 这时的输入属性是通过顶点着色器处理后传过来的。
    • 统一变量 —— 顶点/⽚元着⾊器使⽤的不变数据
    • 采样器 —— 代表顶点着⾊器使⽤纹理的特殊统⼀变量类型

    输出

    • gl_fragColor也是一个内建变量。

    业务

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

    EGL

    OpenGL ES API 并没有提供如何创建渲染上下⽂或者上下⽂如何连接到原⽣窗⼝系
    统,EGL 是Khronos 渲染API(如OpenGL ES) 和原⽣窗⼝系统之间的接⼝。

    唯一支持OpenGL ES却不支持EGL的平台是iOS,所以苹果提供自己的EGL API的iOS实现,称为EAGL

    • 渲染上下文:存储OpenGL ES的状态。
    • 绘制表面:是⽤于绘制图元的表⾯,它指定渲染所需要的缓存区类型,例如颜⾊缓存
      区,深度缓冲区和模板缓存区。

    相关文章

      网友评论

        本文标题:了解OpenGL ES

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