OpenGL


什么是OpenGL

Open Graphics Library
图形领域的工业标准,是一套跨编程语言、跨平台的、专业的图形编程(软件)接口。它用于二维、三维图像,是一个功能强大,调用方便的底层图形库。

与硬件无关。可以在不同的平台如Windows、Linux、Mac、Android、IOS之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。

OpenGL ES 1.0 和 1.1 :Android 1.0和更高的版本支持这个API规范。
OpenGL ES 2.0 :Android 2.2(API 8)和更高的版本支持这个API规范。�
OpenGL ES 3.0 :Android 4.3(API 18)和更高的版本支持这个API规范。
OpenGL ES 3.1 :Android 5.0(API 21)和更高的版本支持这个API规范。

还须要由设备制造商提供了实现支持, 目前广泛支持的是 2.0
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>

Android OpenGL ES

针对手机、PDA和游戏主机等嵌入式设备而设计的OpenGL API 子集。

  • GLSurfaceView

继承至SurfaceView,它内嵌的surface专门负责OpenGL渲染。
管理Surface与EGL
允许自定义渲染器(render)。
让渲染器在独立的线程里运作,和UI线程分离。
支持按需渲染(on-demand)和连续渲染(continuous)。

  • OpenGL是一个跨平台的操作GPU的API,但OpenGL需要本地视窗系统进行交互,这就需要一个中间控制层, EGL就是连接OpenGL ES和本地窗口系统的接口,引入EGL就是为了屏蔽不同平台上的区别。

OpenGL绘制流程

opengl绘制流程.png

OpenGL可编程管线

可编程管线.jpg

坐标系(重点)

OpenGL世界坐标系

opengl世界坐标系.png

OpenGL纹理坐标系

OpenGL纹理坐标系.png

Android屏幕坐标系

Android屏幕坐标系.png

Shader着色器(重点)

着色器(Shader)是运行在GPU上的小程序。

  • 顶点着色器(vertex shader)
    如何处理顶点、法线等数据的小程序。

  • 片元着色器(fragment shader)
    如何处理光、阴影、遮挡、环境等等对物体表面的影响,最终生成一副图像的小程序

GLSL

OpenGL着色语言(OpenGL Shading Language)


glsl.png

数据类型

类型 描述
float 浮点型
vec2 含两个浮点型数据的向量
vec4 含四个浮点型数据的向量(xyzw,rgba,stpq)
sampler2D 2D纹理采样器(代表一层纹理)

修饰符

类型 描述
attribute 属性变量。只能用于顶点着色器中。一般用该变量来表示一些顶点数据,如:顶点坐标、纹理坐标、颜色等。
uniforms 一致变量。在着色器执行期间一致变量的值是不变的。与const常量不同的是,这个值在编译时期是未知的是由着色器外部初始化的。
varying 易变变量。是从顶点着色器传递到片元着色器的数据变量。

内建函数

texture2D (采样器, 坐标) 采样指定位置的纹理。

内建变量

变量 描述
gl_Position vec4类型,表示顶点着色器中顶点位置
gl_FragColor vec4类型,表示片元着色器中颜色

其他

名称 描述
precision lowp 低精度
precision mediump 中精度
precision highp 高精度
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容