I'm trying to create a game for Android. I have experience using
DirectX and XNA, but I have never used OpenGL before, and it is really
starting to frustrate me. I've looked over several examples of how to
draw a sprite with OpenGL, I would use the Android drawing API (matter
of fact I have used it to do a proof of concept) however there are a
large number of sprites on the screen and it really slows down. Thus,
I am switching it over to OpenGL. Here is the Render that I have
attached to my GLSurfaceView:
package com.testing.GLSpriteTest;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLU;
import android.opengl.GLSurfaceView.Renderer;
import android.util.Log;
public class SpriteRenderer implements Renderer {
private static FloatBuffer spriteVertices;
private int h, w;
/* (non-Javadoc)
* @see
android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
*/
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// Setup the MODELVIEW matrix
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(w/2, h/2, 0);
// Draw Square
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, spriteVertices);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
/* (non-Javadoc)
* @see
android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
int, int)
*/
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// avoid division by zero
if (height == 0) height = 1;
// draw on the entire screen
gl.glViewport(0, 0, width, height);
// setup projection matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
Log.d("SpriteRenderer", width + "x" + height);
GLU.gluOrtho2D(gl, 0, width, height, 0);
float qWidth = 5;
float[] quadCoords = new float[] {
-qWidth, -qWidth,
qWidth, -qWidth,
-qWidth, qWidth,
qWidth, qWidth,
};
ByteBuffer bb =
ByteBuffer.allocateDirect(quadCoords.length*4);
bb.order(ByteOrder.nativeOrder());
spriteVertices = bb.asFloatBuffer();
spriteVertices.put(quadCoords);
w = width;
h = height;
}
/* (non-Javadoc)
* @see
android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
javax.microedition.khronos.egl.EGLConfig)
*/
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(0, 0, 0, 0);
gl.glDisable(GL10.GL_LIGHTING);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glDisable(GL10.GL_CULL_FACE);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
GL10.GL_FASTEST);
}
}
>From what I have read, I thought this would work, but when I run it on
my G1 I see a white square bigger than I intended flash on the screen,
then disappear. I'm sure I'm missing something, but I honestly don't
have a clue what it is. If someone can point out my mistake and how
to fix or where I can find a solid tutorial on drawing in 2d using
OpenGL, I would be very thankful.
--
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.
NEW! Try asking and tagging your question on Stack Overflow at
http://stackoverflow.com/questions/tagged/android
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en