展会信息港展会大全

Android中建立一个OpenGL ES的开发环境
来源:互联网   发布日期:2016-01-19 11:28:05   浏览:1918次  

导读:在使用OpengGL ES 2 0的API时,也许你会很奇怪这些方法中为什么会包含有GL10参数,这是因为这些方法的签名是重用了2 0的API,以保证Android框架的代 码更加简单。要用OpenGl ES在应用程序中绘制图像,首先你 ...

在使用OpengGL ES 2.0的API时,也许你会很奇怪这些方法中为什么会包含有GL10参数,这是因为这些方法的签名是重用了2.0的API,以保证Android框架的代 码更加简单。

要用OpenGl ES在应用程序中绘制图像,首先你要创建与之对应的视图容器。当中最直接的方法就是使用GLSurfaceView和 GLSurfaceView.Renderer接口。GLSurfaceView是OpenGL所绘制的图形的视图容器,而 GLSurfaceView.Renderer控制在视图上所绘制的图像。想获取更多关于这两个类的信息,请参考OpenGl ES开发指南。

GLSurfaceView只是把OpenGL ES图像组合到应用程序的其中一种方法,但对于绘制全屏或接近全屏的图形来说,它是一个很好的选择。开发者如果想把OpenGL ES图像组合成布局中的一小部分,可以查看TextureView。事实上,独立开发者也可以在SurfaceView上创建OpenGL ES视图,但这需要写更多额外的代码。

这节课将介绍如何在应用程序中最低限度地实现GLSurfaceView和GLSurfaceView.Renderer。

在Manifest声明OpenGL ES的使用 Declare OpenGL ES Use in the Manifest

要在应用程序中使用 OpenGL ES 2.0 API,你必须在Manifest添加以下的声明:

<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" />

想获取更多关于纹理压缩格式的信息,请参考OpenGl ES开发指南。

创建OpenGL ES的Activity Create an Activity for OpenGL ES Graphics

Android使用到OpenGL ES的应用程序和其他的应用程序的activities一样,都有一个用户界面。当中最大的不同就是,在activity的布局中你使用了什么控件,在很 多应用中,你可能会使用TextView,Button和ListView,在使用了OpenGL ES的应用程序,你还可以添加GLSurfaceView。

下面的示例代码中,呈现了一个Activity使用GLSurfaceView作为主视图的最低实现:

public class OpenGLES20 extends Activity {

private GLSurfaceView mGLView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// Create a GLSurfaceView instance and set it

// as the ContentView for this Activity.

mGLView = new MyGLSurfaceView(this);

setContentView(mGLView);

}

}

备注:OpenGL ES 2.0需要Android2.2(API 8)以上使用,请确定你的Android工程的API设置正确。

创建GLSurfaceView对象 Build a GLSurfaceView Object

GLSurfaceView是一个可以绘制OpenGL ES图像的专门视图,它本身没有处理功能,所绘制的图像都是由你所设置的GLSurfaceView.Renderer来控制的。事实上,该对象的代码很 简单,你可能宁愿自己创建一个没有定义好的GLSurfaceView实例,而不去继承它,但是千万不要这样做。你需要继承这个类,才能捕获触摸事件,这 些将会在Responding_to_Touch_Events |触摸响应这节课中有介绍到。

GLSurfaceView的必要代码是很少的,为了一个快速的实现,最常见的做法是在activity中创建一个内部类:

class MyGLSurfaceView extends GLSurfaceView {

public MyGLSurfaceView(Context context){

super(context);

// Set the Renderer for drawing on the GLSurfaceView

setRenderer(new MyRenderer());

}

}

在使用OpenGL ES 2.0时,你必须在你的GLSurfaceView构造器中添加多一句代码,以声明你是使用OpenGL ES 2.0的API:

// Create an OpenGL ES 2.0 context

setEGLContextClientVersion(2);

备注:如果你使用的是OpenGL ES 2.0的API,请确认你已经在应用程序的manifest进行了声明。更多的信息,请参考在Manifest声明OpenGL ES的使用 Declare OpenGL ES Use in the Manifest

使用GLSurfaceView.RENDERMODE_WHEN_DIRTY可以设定GLSurfaceView实现的渲染模式:当应用程序的图 数据发生变化时,才绘制试图。该设置是可选的,设置如下:

// Render the view only when there is a change in the drawing data

setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

该设置可以防止GLSurfaceView图像被重新绘制,直到你调用了equestRender())方法,这在样例应用程序中更体现了其的价 值。

创建渲染器类 Build a Renderer Class

GLSurfaceView.Renderer类或渲染器的实现,使得使用了OpenGL的应用程序开始变成一个有趣的事情。这个类控制与之关联的 东西可以被绘制在GLSurfaceView。渲染器中提供了三种方法给Android系统调用,以控制什么可以,以及怎样绘制在 GLSurfaceView上。

* onSurfaceCreated()) - 设置视图的OpenGL ES环境,只需调用一次

* onDrawFrame()) - 重新绘制每个视图时调用

* onSurfaceChanged()) - 视图的几何发现变化时调用,例如,设备的屏幕的方向发生变化

下面是对于OpenGL ES渲染器一个很基本的实现,只在GLSurfaceView上绘制了一个灰色的背景:

public class MyGL20Renderer implements GLSurfaceView.Renderer {

public void onSurfaceCreated(GL10 unused, EGLConfig config) {

// Set the background frame color

GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);

}

public void onDrawFrame(GL10 unused) {

// Redraw background color

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

}

public void onSurfaceChanged(GL10 unused, int width, int height) {

GLES20.glViewport(0, 0, width, height);

}

}

这就是这节课所介绍的所有东西。上面的示例代码创建了一个简单的应用程序:使用OpenGL绘制灰色的背景。虽然代码没有做什么有趣的事情,但是通 过建立这些类,你奠定了使用OpenGL绘制图像的基矗

在使用OpengGL ES 2.0的API时,也许你会很奇怪这些方法中为什么会包含有GL10参数,这是因为这些方法的签名是重用了2.0的API,以保证Android框架的代 码更加简单。

如果你对OpenGL ES的API已经熟悉,你已经可以在你的应用程序中建立OpenGL ES环境并且绘制图形了。但是,如果你还需要更多的帮助来开始OpenGL,你可以继续下节课的学习,以获取更多的提示。

赞助本站

人工智能实验室

相关热词: OpenGL ES 开发环境

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港