概述
这是一个系列的Android平台下OpenGl ES介绍,从最基本的使用最终到VR图的展示的实现,属于基础篇。(后面针对VR视频会再有几篇文章,属于进阶篇)
OpenGL ES之一——概念扫盲
OpenGL ES之二——Android中的OpenGL ES概述
OpenGL ES之三——绘制纯色背景
OpenGL ES之四——绘制点,线,三角形
OpenGL ES之五——相机和投影,绘制等腰三角形
OpenGL ES之六——绘制矩形和圆形
OpenGL ES之七——着色器语言GLSL
OpenGL ES之八——GLES20类和Matrix类
OpenGL ES之九——相机和投影
OpenGL ES之十——纹理贴图(展示一张图片)
OpenGL ES之十一——绘制3D图形
OpenGL ES之十二——地球仪和VR图
本篇概述
从本文起开始进入编程阶段,本文目的主要是介绍如何使用OpenGL Es绘制纯色背景,通过这个过程让大家了解一下其使用流程
。
流程大致如下(由于是全屏渲染成纯色,这里也不会涉及到顶点着色器和片段着色器):
1.新建一个Android工程
2.配置OpenGL ES环境
3.GLSurfaceView作为展示View
4.实现自己的GLSurfaceView.Renderer完成具体的绘制工作
一. 配置OpenGL ES环境
在AndroidManifest.xml清单文件中添加如下
<uses-feature android:glEsVersion="0x00030000" android:required="true" />
二. GLSurfaceView作为展示View
布局文件如下
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.PureBackgroundActivity">
<android.opengl.GLSurfaceView
android:id="@+id/pure_background_glsrufaceview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
渲染器如下
此时各个实现都是空的,后面详解渲染过程
public class PureBackgroundRender implements GLSurfaceView.Renderer{
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
}
@Override
public void onDrawFrame(GL10 gl) {
}
}
Activity如下
public class PureBackgroundActivity extends AppCompatActivity {
private GLSurfaceView glSurfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_pure_background);
initView();
}
private void initView() {
glSurfaceView = findViewById(R.id.pure_background_glsrufaceview);
//设置OpenGL ES版本,这里我使用3.0;当然为了兼容更低版本系统可以使用2.0;如何选择和实现兼容性前一篇文章已写。
glSurfaceView.setEGLContextClientVersion(3);
//实例化渲染器
GLSurfaceView.Renderer renderer = new PureBackgroundRender();
//GLSurfaceView设置渲染器
glSurfaceView.setRenderer(renderer);
}
}
三.实现自己的GLSurfaceView.Renderer
public class PureBackgroundRender implements GLSurfaceView.Renderer{
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//设置背景颜色
GLES30.glClearColor(0, 0, 1, 1);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
//设置视图窗口
GLES30.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
//把颜色缓冲区设置为我们预设的颜色
GLES30.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
}