我是靠谱客的博主 寂寞电灯胆,最近开发中收集的这篇文章主要介绍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 。
二、开发要点
对于OpenGL最简单的开发只需用两个类即可,GLSurfaceView和GLSurfaceView.Renderer。
- 1
- GLSurfaceView可以直接new,也可以放到布局里。
- 一个GLSurfaceView要配套一个Renderer,这个Renderer是一个接口,里面有三个函数。这点跟Surfaceiew很像。尤其是其中的onDrawFrame()可以类比为Android里View的onDraw()函数。
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
- 记得在Manifests文件中添加
<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)
- 新建一个Android项目
- 新建GLSurfaceView实例
- 创建渲染器Renderer实例
- 给GLSurfaceView设置Renderer实例
- 显示GLSurfaceView
MyGLSurfaceView继承自GLSurfaceView
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的渲染模式有两种
- GLSurfaceView.RENDERMODE_CONTINUOUSLY
不间断的绘制,默认渲染模式是这种 - GLSurfaceView.RENDERMODE_WHEN_DIRTY
不会主动绘制,也就是当调用GLSurfaceView的requestRender()方法后才会执行一次(第一次运行的时候会自动绘制一次)
MyRender继承自GLSurfaceView.Renderer,一些初始化和一些逻辑都在这里进行
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中使用
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 OpenGL ES2.0基础(一、最简单的使用)Android OpenGL ES2.0基础(一、最简单的使用)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复