openGL ES进阶教程(一)之粒子光束

2016AR/VR喊的火热,这些在Android上的实现或多或少与openGL 有关。 OpenGL能做的事情太多了!很多程序也看起来异常复杂。更有可能因为某一步的顺序错误导致最后渲染出错,这是因为,OpenGL和我们现在使用的C++、java这种面向对象的语言不同,OpenGL中的大多数函数使用了一种基于状态的方法。你可以看到Android中的播放器原理,就是API改变播放状态,逻辑性非常强~

本篇我们用openGL ES实现一个炫酷的粒子光束效果(参考自openGL应用实践指南),以实际的例子来学习openGL
当然在看本篇文章之前你必须需要了解openGL ES的一些基本开发知识,这些在网上很容易找到。
还有一些图形学知识你也有必要知道。我这里总结了一些图形学知识,你可以先看一下:

学openGL必知道的图形学知识 :http://blog.csdn.net/king1425/article/details/71425556

本篇效果如图:

这里写图片描述

Android支持OpenGL ES API的几个版本:

OpenGL ES 1.0和1.1 -这个API规范支持Android 1.0和更高版本。
OpenGL ES 2.0 -这个API规范支持Android 2.2(API级别8)和更高。
OpenGL ES 3.0 -这个API规范支持Android 4.3(API级别18)和更高。
OpenGL ES 3.1 -这个API规范支持Android 5.0(API级别21)和更高。
OpenGL ES 3.2 -这个API规范支持Android 7.0(API级别24)和更高。

Android中使用OpenGL ES版本

OpenGL ES 3.0:

<uses-feature android:glEsVersion="0x00030000" android:required="true" />

OpenGL ES 3.2:

<uses-feature android:glEsVersion="0x00030002" android:required="true" />

java代码:

 final ActivityManager activityManager =
                (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();

final boolean supportsEs3 = configurationInfo.reqGlEsVersion >= 0x30000;
    if (supportsEs3) {
      glSurfaceView.setEGLContextClientVersion(3);

Renderer:

//这个函数在Surface被创建的时候调用,每次我们将应用切换到其他地方,再切换回来的时候都有可能被调用,
 // 在这个函数中,我们需要完成一些OpenGL ES相关变量的初始化
    @Override
    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {

        glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

    }

    //每当屏幕尺寸发生变化时,这个函数会被调用(包括刚打开时以及横屏、竖屏切换),width和height就是绘制区域的宽和高
    @Override
    public void onSurfaceChanged(GL10 gl10, int width, int height) {
        glViewport(0, 0, width, height);
    }


//这个是主要的函数,我们的绘制部分就在这里,每一次绘制时这个函数都会被调用,
// 之前设置了GLSurfaceView.RENDERMODE_CONTINUOUSLY,也就是说按照正常的速度,每秒这个函数会被调用60次.
    @Override
    public void onDrawFrame(GL10 gl10) {
        glClear(GL_COLOR_BUFFER_BIT);
    }

onSurfaceCreated 方法中 glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
设置清空屏幕用的颜色,分别对应红色、绿色和蓝色,最后一个为透明度。

在 onSurfaceChanged 方法中 glViewport(0, 0, width, height); 设置了视口尺寸,告诉 OpenGL 可以用来渲染的 surface 的大小。

在 onDrawFrame 方法中 glClear(GL_COLOR_BUFFER_BIT); 会擦除屏幕上的所有颜色,并用 glClearColor 中的颜色填充整个屏幕。

在使用 OpenGL 的方法时候,可能要在前面加入 GLES20. , 为了方便我们可以使用组织导入: import static android.opengl.GLES20.

下面我们就开始实现上图的效果

分析:假定图片上是三个向上发射激光
那么我们需要实现一个个的光束,即粒子。粒子有,

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值