用OpenGL取代Canvas – Android

我试图用快速的opengl-es表面来replace基于Canvas的渲染系统,但是,我似乎无法得到一个openGL渲染器来符合它作为2d字段,而不是一个透视图。

我目前的渲染器代码如下所示:

@Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glOrthof(0.0f, width, 0.0f, height, 0.0f, 1.0f); gl.glShadeModel(GL10.GL_FLAT); gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000); gl.glEnable(GL10.GL_TEXTURE_2D); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); gl.glClearColor(0.5f, 0.5f, 0.5f, 1); gl.glShadeModel(GL10.GL_FLAT); gl.glDisable(GL10.GL_DEPTH_TEST); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glDisable(GL10.GL_DITHER); gl.glDisable(GL10.GL_LIGHTING); gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); } 

我将如何设置渲染器,以便翻译转换将与屏幕上的像素相匹配? (所以翻译右5会移动5个像素)

Solutions Collecting From Web of "用OpenGL取代Canvas – Android"

请注意,在OpenGL中,Y坐标是倒置的。 否则全部是一样的。
至于正确的标志,我build议你看看开源的Android游戏副本岛: http : //code.google.com/p/replicaisland/

以下是我在自己的代码中使用的内容:

 public void onSurfaceChanged(GL10 gl, int width, int height) { mViewWidth = width; mViewHeight = height; gl.glViewport(0, 0, mViewWidth, mViewHeight); gl.glLoadIdentity(); GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0); } public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glClearColor(0.5f, 0.5f, 0.5f, 1); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); gl.glShadeModel(GL10.GL_FLAT); gl.glDisable(GL10.GL_DEPTH_TEST); gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); gl.glViewport(0, 0, mViewWidth, mViewHeight); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); gl.glShadeModel(GL10.GL_FLAT); gl.glEnable(GL10.GL_TEXTURE_2D); GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0); } 

其中mViewWidthmViewHeight是显示的大小。