To learn OpenGL I'm trying to adapt the Graphics->OpenGL->Touch Rotate cube in the ApiDemo to respond to sensors.
Has anyone done this or knows of a good tutorial on how to control a 3D object using Android's sensors?
Here's what I've done so far (it kind of works):
- Code: Select all
class TouchSurfaceView extends GLSurfaceView {
private final float SENSOR_SCALE_FACTOR = 90.0f / 9;
public TouchSurfaceView(Context context) {
super(context);
mRenderer = new CubeRenderer();
setRenderer(mRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensorManager.registerListener(sensorListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST);
}
private final SensorEventListener sensorListener = new SensorEventListener() {
@Override public void onAccuracyChanged(Sensor arg0, int arg1) {}
@Override
public void onSensorChanged(SensorEvent event) {
boolean changed=false;
float[] mValues = event.values;
if (Math.abs(event.values[0])>1) { // don't render on small change
mRenderer.mAngleX = event.values[0] * SENSOR_SCALE_FACTOR;
changed=true;
}
if (Math.abs(event.values[1])>1) {
mRenderer.mAngleY = event.values[1] * SENSOR_SCALE_FACTOR;
changed=true;
}
if (changed) requestRender();
}
};


