OpenGL ES

作者: 可乐爱加菲猫 | 来源:发表于2019-05-31 20:45 被阅读0次

    OpenGL ES

    什么是 OpenGL ES?

    OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,各显卡制造商和系统制造商来实现这组 API。

    OpenGL 基本概念

    因为 OpenGL ES 是 OpenGL 的一个子集,所以下面就主要介绍一些有关 OpenGL 的一些基本概念。

    OpenGL 的结构可以从逻辑上划分为下面 3 个部分:

    • 图元(Primitives)
    • 缓冲区(Buffers)
    • 光栅化(Rasterize)

    图元(Primitives)

    在 OpenGL 的世界里,我们只能画点、线、三角形这三种基本图形,而其它复杂的图形都可以通过三角形来组成。所以这里的图元指的就是这三种基础图形:

    • :点存在于三维空间,坐标用(x,y,z)表示。
    • 线:由两个三维空间中的点组成。
    • 三角形:由三个三维空间的点组成。

    缓冲区(Buffers)

    OpenGL 中主要有 3 种 Buffer:

    • 帧缓冲区(Frame Buffers) 帧缓冲区:这个是存储OpenGL 最终渲染输出结果的地方,它是一个包含多个图像的集合,例如颜色图像、深度图像、模板图像等。

    • 渲染缓冲区(Render Buffers) 渲染缓冲区:渲染缓冲区就是一个图像,它是 Frame Buffer 的一个子集。

    • 缓冲区对象(Buffer Objects) 缓冲区对象就是程序员输入到 OpenGL 的数据,分为结构类和索引类的。前者被称为“数组缓冲区对象”或“顶点缓冲区对象”(“Array Buffer Object”或“Vertex Buff er Object”),即用来描述模型的数组,如顶点数组、纹理数组等; 后者被称为“索引缓冲区对象”(“Index Buffer Object”),是对上述数组的索引。

    光栅化(Rasterize)

    在介绍光栅化之前,首先来补充 OpenGL 中的两个非常重要的概念:

    • 顶点(Vertex) 就是图形中顶点,一系列的顶点就围成了一个图形。
    • 片元(Fragment) 是三维空间的点、线、三角形这些基本图元映射到二维平面上的映射区域,通常一个 Fragment 对应于屏幕上的一个像素,但高分辨率的屏幕可能会用多个像素点映射到一个 Fragment,以减少 GPU 的工作。

    光栅化是把点、线、三角形映射到屏幕上的像素点的过程。

    着色器程序(Shader)

    Shader 用来描述如何绘制(渲染),GLSL 是 OpenGL 的编程语言,全称 OpenGL Shader Language,它的语法类似于 C 语言。OpenGL 渲染需要两种 Shader:Vertex ShaderFragment Shader

    • 顶点着色器(Vertex Shader) 对于3D模型网格的每个顶点执行一次,主要是确定该顶点的最终位置
    • 片元着色器(Fragment Shader) 对光栅化之后2D图像中的每个像素处理一次。3D物体的表面最终显示成什么样将由它决定,例如为模型的可见表面添加纹理,处理光照、阴影的影响等等。

    OpenGL 流水线

    OpenGL 中有两种流水线,一种是固定流水线,另外一种则是可编程流水线。

    image.png

    其中,OpenGL 1.0 版本支持固定流水线。

    从OpenGL 2.0版本开始,OpenGL支持可编程的流水线。也就是说,程序员可以通过Shader(一种程序)来控制GPU渲染的过程。

    相关文章

      网友评论

          本文标题:OpenGL ES

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