Android OpenGL es 2D绘图代码(英文)
The way I started with openGL with start by looking at the very
basic GLSurfaceView samples/demos.
Start, by setting up your app activity, and set up the basic
canvas.
Take a loot at the replica island source code file:
GameRenderer.java for how to setup your canvas with the proper GL
flags for 2D (sprite) rendering. You should really take a look at
SpriteMethodTest by the same author of replica island: http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest
After you have your canvas set up, you start by calling
something like: gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
After that you're ready to render a sprite. First, you'll need
to load the sprite into a texture: http://qdevarena.blogspot.com/2009/02/how-to-load-texture-in-android-opengl.html
This is how I do it, I have a class named Texture.java:
publicclassTexture{publicfloatx=0;publicfloaty=0;publicfloatz=0;publicfloatwidth=0;publicfloatheight=0;privateGL10 gl;publicint[]texture;//holds the texture in integer formprivateinttexture_name;privateint[]mCropWorkspace;privatefinalBitmapFactory.OptionssBitmapOptions;publicTexture(GL10 gl_obj){gl=gl_obj;texture=newint[1];mCropWorkspace=newint[4];sBitmapOptions=newBitmapFactory.Options();sBitmapOptions.inPreferredConfig=Bitmap.Config.RGB_565;//Log.d(TAG, "Initializing Texture Object");}publicintget_texture_name(){returntexture_name;}publicbooleanLoad(Bitmapbitmap)//rename this to glLoad and don't have it as an initializer parameter{if(gl==null){Log.e(TAG,"Failed to load resource. Context/GL is NULL");returnfalse;}interror;inttextureName=-1;gl.glGenTextures(1,texture,0);textureName=texture[0];//Log.d(TAG, "Generated texture: " + textureName);gl.glBindTexture(GL10.GL_TEXTURE_2D,textureName);gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR);gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_S,GL10.GL_CLAMP_TO_EDGE);gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_T,GL10.GL_CLAMP_TO_EDGE);gl.glTexEnvf(GL10.GL_TEXTURE_ENV,GL10.GL_TEXTURE_ENV_MODE,GL10.GL_REPLACE);GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bitmap,0);mCropWorkspace[0]=0;mCropWorkspace[1]=bitmap.getHeight();mCropWorkspace[2]=bitmap.getWidth();mCropWorkspace[3]=-bitmap.getHeight();((GL11)gl).glTexParameteriv(GL10.GL_TEXTURE_2D,GL11Ext.GL_TEXTURE_CROP_RECT_OES,mCropWorkspace,0);error=gl.glGetError();if(error!=GL10.GL_NO_ERROR){Log.e(TAG,"GL Texture Load Error: "+error);}//Log.d(TAG, "Loaded texture: " + textureName);returntrue;}
}
Then in my onDrawFrame() method I simply do:
Texturetexture=...gl.glBindTexture(GL10.GL_TEXTURE_2D,texture.texture[0]);((GL11Ext)gl).glDrawTexfOES((float)(draw_x+0.5),(float)(draw_y+0.5),0,tile_width,tile_height);
That should get you going with drawing 2D sprites on an openGL
canvas. I've noticed that there is really no straightforward
tutorial on this. Hopefully in the future I will post one in my dev
blog: http://developingthedream.blogspot.com/
Good luck.