package com.marcodinacci.book.acb;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLU;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.view.WindowManager;
import com.marcodinacci.android.commons.opengl.Cube;
public class SpinningCubeActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// go fullscreen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
GLSurfaceView view = new OpenGLSurfaceView(this);
setContentView(view);
}
}
class OpenGLSurfaceView extends GLSurfaceView implements Renderer {
private Cube mCube;
private float mXrot;
private float mYrot;
private float mXspeed;
private float mYspeed;
public OpenGLSurfaceView(Context context) {
super(context);
setRenderer(this);
requestFocus();
setFocusableInTouchMode(true);
mCube = new Cube();
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.d("OPENGL", "key up: " + keyCode);
if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
mYspeed -= 0.1f;
else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
mYspeed += 0.1f;
else if(keyCode == KeyEvent.KEYCODE_DPAD_UP)
mXspeed -= 0.1f;
else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
mXspeed += 0.1f;
return true;
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
GL10.GL_NICEST);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);
gl.glRotatef(mXrot, 1.0f, 0.0f, 0.0f);
gl.glRotatef(mYrot, 0.0f, 1.0f, 0.0f);
mCube.draw(gl);
gl.glLoadIdentity();
mXrot += mXspeed;
mYrot += mYspeed;
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 100.0f);
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
}