为了在Android Application中使用OpenGL ES绘制图形。您必须为它门创建一个视图容器。其中直接的方法就是实现GLSurfaceView和GLSurfaceView.Renderer。GLSurfaceView是使用OpenGL绘制图形的视图容器,GLSurfaceView.Renderer控制在该视图中绘制的内容。有关这些类的更多信息,请参阅OpenGL ES开发人员指南。
GLSurfaceView只是应用程序包含OpenGL ES图形的一种方法。对于全屏或接近全屏图形视图,这是一个合理的选择。如果您想在Layout的某一部分包含OpenGL ES图形,因该看下TextureView。您也可以使用SurfaceView构建OpenGL ES视图,这需要编写相当多的额外代码。
要使用OpenGL ES,需在AndroidManifest.xml中声明。
使用OpenGL ES 2.0 API 这样声明:
<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创建Activity:
public class OpenGLES20Activity 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需要Android 2.2(API级别8)或更高版本,因此请确保您的Android项目以该API或更高版本为目标。
创建GLSurfaceView object
class MyGLSurfaceView extends GLSurfaceView {
private final MyGLRenderer mRenderer;
public MyGLSurfaceView(Context context){
super(context);
// Create an OpenGL ES 2.0 context
setEGLContextClientVersion(2);
mRenderer = new MyGLRenderer();
// 设置渲染器
setRenderer(mRenderer);
}
}
你还可以设置渲染器模式:
/*仅在绘图数据发生更改时才渲染视图*/
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
创建Renderer:控制关联GLSufaceView的绘制内容
public class MyGLRenderer implements GLSurfaceView.Renderer {
/**
*设置视图的OpenGL ES环境时调用一次
*/
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
// Set the background frame color
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 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);
}
}
上面的代码示例创建了一个简单的Android应用程序,它使用OpenGL显示黑屏。 虽然这段代码没有做任何有趣的事情,但通过创建这些类,您已经奠定了开始使用OpenGL绘制图形元素所需的基础。
网友评论