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绘制流程.pngOpenGL可编程管线
可编程管线.jpg坐标系(重点)
OpenGL世界坐标系
opengl世界坐标系.pngOpenGL纹理坐标系
OpenGL纹理坐标系.pngAndroid屏幕坐标系
Android屏幕坐标系.pngShader着色器(重点)
着色器(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 | 高精度 |