如何使用Android中的OpenGL ES媒体效果
准备
为了开始本次的教程,你必须具备:
1.一款支持Android开发的IDE,如果你没有的话,可以在Android Developer website下载最新版本的Android studio。
2.一款运行Android4.0之上Android手机,并且GPU支持OpenGL ES2.0
3.对OpenGL的基本知识了解
设置OpenGL ES环境
创建GLSurfaceView
为了显示OpenGL的图形,你需要使用GLSurfaceView类,就像其他任何的View子类意义,你可以将它添加到你的Activity或Fragment之上,通过在布局xml文件中定义或者在代码中创建实例。
在本次的教程中,我们使用GLSurfaceView作为唯一的View在我们的Activity中,因此,为了简便,我们在代码中创建
GLSurfaceView的实例并将其传入setContentView中,这样它将会填充你的整个手机屏幕。Activity中的onCreate方
法如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GLSurfaceView view = new GLSurfaceView(this);
setContentView(view);
}123456123456
因为媒体效果的框架仅仅支持OpenGL ES2.0及以上的版本,所以在setEGLContextClientVersion 方法中传入2;
view.setEGLContextClientVersion(2);11
为了确保GLSurfaceView仅仅在必要的时候进行渲染,我们在setRenderMode 方法中进行设置:
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);11
创建Renderer
Renderer负责渲染GLSurfaceView中的内容。
创建类实现接口GLSurfaceView.Renderer,在这里我们打算将这个类命名为EffectsRenderer,添加构造函数并覆写接口中的抽象方法,如下:
public class EffectsRenderer implements GLSurfaceView.Renderer {
public EffectsRenderer(Context context){
super();
初学OpenGL的几个注意点
1,OpenGL是一个状态机,当前设定某个状态之后,效果将一直持续到下次重新设定。状态可以查询。2,关于变换(矩阵):i)变换矩阵分为三类,其一是“模型视图”矩阵,其二是“投影”矩阵,其三是“纹理”矩阵;不同命令形成的矩阵将自动归到不同类别,例如glRotatef生成的矩阵属于模型视图,gluPerspective生产的矩阵自动归到投影矩阵那类。但是当你要glLoadIdentity时,你发现它无法自动归类,再或者说你要使用glMultMatrixf时,它也不知道归到哪一类时,这时你必须用命令glMatrixMode来指明清楚,让他归到哪一类。其实说是说三类,实际上当前矩阵就三个(设为M,P,T),假设现在又新生成一个模型视图矩阵A,那么实际上就是在当前的模型视图矩阵M后面再乘以M,即更新后的模型视图矩阵是M*A,都是右边乘上去。ii)关于变换顺序的理解:如果要在全局坐标系中理解,那么变换得反着看;如果想象成局部坐标系,那么变换就是顺着看(非归一化的缩放除外);iii)关于矩阵堆栈,有一点必须要明白,那就是当前矩阵总是在栈顶的,也可以说,栈顶就是存放当前矩阵的地方。和i)类似,有三个堆栈(堆栈深度分别为32,2,2),分别用于存取三类矩阵。假设当前三个矩阵为(M,P,T),首先得通过glMatrixMode来指明清楚你即将使用哪个堆栈,如果用的是GL_MODELVIEW参数,然后再glPushMatrix时,就把当前的模型视图矩阵M复制一个(也就是把modelview栈的栈顶复制一个),然后压进了栈顶端(原来的栈顶成了现在的第二了,当然,现在栈顶和第二两个矩阵都是一样的,这样就起到保存当前设置的作用,因为接下来当前矩阵的改变实质是改变栈顶,第二及其以下都是不动的,除非使用pop后),假设你现在手头控制的模型视图矩阵还是M,假设现在又新生成一个模型视图矩阵A,那么当前的模型视图矩阵就是是M*A,同时栈顶端的矩阵也是M*A(因为栈顶就是当前矩阵),此时如果glPopMatrix的话(栈顶自己丢掉,第二个矩阵成栈顶了,因为栈顶就是当前,所以),那么当前的模型视图矩阵又成了M,因为栈顶是M,取出来之后作为当前的视图模型矩阵。 最后,由于深度有限,尽量少push,以免出错。
如何使用Android中的OpenGL ES媒体效果
为了开始本次的教程,你必须具备:
1.一款支持Android开发的IDE,如果你没有的话,可以在Android Developer website下载最新版本的Android studio。
2.一款运行Android4.0之上Android手机,并且GPU支持OpenGL ES2.0
3.对OpenGL的基本知识了解
设置OpenGL ES环境
创建GLSurfaceView
为了显示OpenGL的图形,你需要使用GLSurfaceView类,就像其他任何的View子类意义,你可以将它添加到你的Activity或Fragment之上,通过在布局xml文件中定义或者在代码中创建实例。
在本次的教程中,我们使用GLSurfaceView作为唯一的View在我们的Activity中,因此,为了简便,我们在代码中创建
GLSurfaceView的实例并将其传入setContentView中,这样它将会填充你的整个手机屏幕。Activity中的onCreate方
法如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GLSurfaceView view = new GLSurfaceView(this);
setContentView(view);
}123456123456
因为媒体效果的框架仅仅支持OpenGL ES2.0及以上的版本,所以在setEGLContextClientVersion 方法中传入2;
view.setEGLContextClientVersion(2);11
为了确保GLSurfaceView仅仅在必要的时候进行渲染,我们在setRenderMode 方法中进行设置:
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);11
创建Renderer
Renderer负责渲染GLSurfaceView中的内容。