我是靠谱客的博主 寂寞电灯胆,这篇文章主要介绍Android OpenGL ES2.0基础(一、最简单的使用)Android OpenGL ES2.0基础(一、最简单的使用),现在分享给大家,希望可以做个参考。

https://blog.csdn.net/tianzhaoai/article/details/60963418

 

Android OpenGL ES2.0基础(一、最简单的使用)

2017年03月09日 17:14:07 xyTianZhao 阅读数:4477 标签: android opengl 更多

个人分类: Android

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianzhaoai/article/details/60963418

一、OpenGL ES是什么

OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的3D图形库。广泛应用于游戏、娱乐、VR等领域.安卓系统中的核心库层就有这个。OpenGL ES是在OpenGL基础上针对移动端而裁剪的 。OpenGL ES由当初的1.0、2.0发展到现在的3.0了。我这个系列是针对2.0的.因为3.0的只支持android 4.3以上的版本,即时是4.3以上,有的手机硬件也还不支持3.0 。

二、开发要点

复制代码
1
2
对于OpenGL最简单的开发只需用两个类即可,GLSurfaceView和GLSurfaceView.Renderer。
  • 1
  1. GLSurfaceView可以直接new,也可以放到布局里。
  2. 一个GLSurfaceView要配套一个Renderer,这个Renderer是一个接口,里面有三个函数。这点跟Surfaceiew很像。尤其是其中的onDrawFrame()可以类比为Android里View的onDraw()函数。
复制代码
1
2
3
4
5
6
7
8
interface GLSurfaceView.Renderer { //在Surface创建的时候调用,可以在这里进行一些初始化操作 public void onSurfaceCreated(GL10 gl, EGLConfig config); //在Surface改变的的时候调用 public void onSurfaceChanged(GL10 gl, int width, int height); //在Surface上绘制的时候调用 public void onDrawFrame(GL10 gl); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 记得在Manifests文件中添加
复制代码
1
2
3
<uses-feature android:glEsVersion="0x00020000" android:required="true" /> <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /> <supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />
  • 1
  • 2
  • 3

三、着(kai)手(shi)开(ru)发(keng)

  1. 新建一个Android项目
  2. 新建GLSurfaceView实例
  3. 创建渲染器Renderer实例
  4. 给GLSurfaceView设置Renderer实例
  5. 显示GLSurfaceView

MyGLSurfaceView继承自GLSurfaceView

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import android.content.Context; import android.opengl.GLSurfaceView; import android.view.MotionEvent; /** * Created by Administrator on 2017/3/8. * description : */ public class MySurfaceView extends GLSurfaceView { MyRenderer mRenderer; public MySurfaceView(Context context) { super(context); init(); } private void init(){ // 创建一个OpenGL ES 2.0 context setEGLContextClientVersion(2); //创建渲染器实例 mRenderer = new MyRenderer(); // 设置渲染器 setRenderer(mRenderer); //设置渲染模式 setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

Render的渲染模式有两种

  1. GLSurfaceView.RENDERMODE_CONTINUOUSLY
    不间断的绘制,默认渲染模式是这种
  2. GLSurfaceView.RENDERMODE_WHEN_DIRTY
    不会主动绘制,也就是当调用GLSurfaceView的requestRender()方法后才会执行一次(第一次运行的时候会自动绘制一次)

MyRender继承自GLSurfaceView.Renderer,一些初始化和一些逻辑都在这里进行

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MyRenderer implements GLSurfaceView.Renderer { // Surface创建的时候调用 @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 设置清屏颜色 GLES20.glClearColor(0f, 1f, 0f, 0f); } // Surface改变的的时候调用 @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // 设置窗口大小 GLES20.glViewport(0, 0, width, height); } // 在Surface上绘制的时候调用 @Override public void onDrawFrame(GL10 gl) { //调用glClear(GL10.GL_COLOR_BUFFER_BIT)方法清除屏幕颜色,执行这个方法之后 //屏幕就会渲染之前通过glClearColor设置的清屏颜色. GLES20.glClear(GL10.GL_COLOR_BUFFER_BIT); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在MainActivity中使用

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; /** * Created by Administrator on 2017/3/8. * description : */ public class MainActivity extends AppCompatActivity { MySurfaceView mySurfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mySurfaceView = new MySurfaceView(this); setContentView(mySurfaceView); } @Override protected void onPause() { super.onPause(); mySurfaceView.onPause(); } @Override protected void onResume() { super.onResume(); mySurfaceView.onResume(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

运行效果

这里写图片描述

最后

以上就是寂寞电灯胆最近收集整理的关于Android OpenGL ES2.0基础(一、最简单的使用)Android OpenGL ES2.0基础(一、最简单的使用)的全部内容,更多相关Android内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部