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

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

着色器程序(Shader)

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

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

OpenGL 流水线

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

坚持原创技术分享,您的支持将鼓励我继续创作!