2
0
Эх сурвалжийг харах

improvements to Android camera, but it is already bugged

mikymod 13 жил өмнө
parent
commit
3689ada85a
72 өөрчлөгдсөн 250 нэмэгдсэн , 245 устгасан
  1. 1 1
      android/jni/CMakeLists.txt
  2. 1 1
      android/jni/Camera.cpp
  3. 1 1
      android/jni/Camera.h
  4. 1 1
      android/jni/Config.h
  5. 1 1
      android/jni/Crown.h
  6. 1 1
      android/jni/Data.h
  7. 1 1
      android/jni/Device.cpp
  8. 1 1
      android/jni/Device.h
  9. 1 1
      android/jni/EventBuffer.cpp
  10. 1 1
      android/jni/EventBuffer.h
  11. 1 1
      android/jni/FPSSystem.cpp
  12. 1 1
      android/jni/FPSSystem.h
  13. 1 1
      android/jni/Filesystem.cpp
  14. 1 1
      android/jni/Filesystem.h
  15. 1 1
      android/jni/Font.cpp
  16. 1 1
      android/jni/Font.h
  17. 1 1
      android/jni/FontManager.cpp
  18. 1 1
      android/jni/FontManager.h
  19. 1 1
      android/jni/Glyph.h
  20. 1 1
      android/jni/Image.cpp
  21. 1 1
      android/jni/Image.h
  22. 1 1
      android/jni/ImageLoader.cpp
  23. 1 1
      android/jni/ImageLoader.h
  24. 1 1
      android/jni/IndexBuffer.h
  25. 1 1
      android/jni/Log.cpp
  26. 1 1
      android/jni/Log.h
  27. 1 1
      android/jni/Material.cpp
  28. 1 1
      android/jni/Material.h
  29. 1 1
      android/jni/MaterialManager.cpp
  30. 1 1
      android/jni/MaterialManager.h
  31. 1 1
      android/jni/Mesh.cpp
  32. 1 1
      android/jni/Mesh.h
  33. 1 1
      android/jni/MeshChunk.cpp
  34. 1 1
      android/jni/MeshChunk.h
  35. 1 1
      android/jni/MeshLoader.h
  36. 1 1
      android/jni/MeshManager.cpp
  37. 1 1
      android/jni/MeshManager.h
  38. 1 1
      android/jni/MovableCamera.cpp
  39. 1 1
      android/jni/MovableCamera.h
  40. 1 1
      android/jni/OcclusionQuery.h
  41. 1 1
      android/jni/Pixel.cpp
  42. 1 1
      android/jni/Pixel.h
  43. 1 1
      android/jni/Renderer.cpp
  44. 1 1
      android/jni/Renderer.h
  45. 1 1
      android/jni/Resource.h
  46. 1 1
      android/jni/ResourceManager.cpp
  47. 1 1
      android/jni/ResourceManager.h
  48. 1 1
      android/jni/Skybox.cpp
  49. 1 1
      android/jni/Skybox.h
  50. 1 1
      android/jni/SpriteAnimator.cpp
  51. 1 1
      android/jni/SpriteAnimator.h
  52. 1 1
      android/jni/System.h
  53. 1 1
      android/jni/Terrain.cpp
  54. 1 1
      android/jni/Terrain.h
  55. 1 1
      android/jni/TextRenderer.cpp
  56. 1 1
      android/jni/TextRenderer.h
  57. 1 1
      android/jni/Texture.h
  58. 1 1
      android/jni/TextureManager.h
  59. 1 1
      android/jni/VertexBuffer.h
  60. 1 1
      android/jni/World.cpp
  61. 1 1
      android/jni/World.h
  62. 1 1
      android/jni/core
  63. 1 1
      android/jni/input
  64. 1 1
      android/jni/loaders
  65. 1 1
      android/jni/network
  66. 1 1
      android/jni/os
  67. 1 1
      android/jni/renderers
  68. 0 168
      android/src/crown/android/CrownAccelerometer.java
  69. 7 6
      android/src/crown/android/CrownActivity.java
  70. 174 0
      android/src/crown/android/CrownSensor.java
  71. 1 1
      samples/android/triangle.cpp
  72. 1 3
      src/MovableCamera.cpp

+ 1 - 1
android/jni/CMakeLists.txt

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/CMakeLists.txt
+../../src/CMakeLists.txt

+ 1 - 1
android/jni/Camera.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Camera.cpp
+../../src/Camera.cpp

+ 1 - 1
android/jni/Camera.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Camera.h
+../../src/Camera.h

+ 1 - 1
android/jni/Config.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Config.h
+../../src/Config.h

+ 1 - 1
android/jni/Crown.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Crown.h
+../../src/Crown.h

+ 1 - 1
android/jni/Data.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Data.h
+../../src/Data.h

+ 1 - 1
android/jni/Device.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Device.cpp
+../../src/Device.cpp

+ 1 - 1
android/jni/Device.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Device.h
+../../src/Device.h

+ 1 - 1
android/jni/EventBuffer.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/EventBuffer.cpp
+../../src/EventBuffer.cpp

+ 1 - 1
android/jni/EventBuffer.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/EventBuffer.h
+../../src/EventBuffer.h

+ 1 - 1
android/jni/FPSSystem.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/FPSSystem.cpp
+../../src/FPSSystem.cpp

+ 1 - 1
android/jni/FPSSystem.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/FPSSystem.h
+../../src/FPSSystem.h

+ 1 - 1
android/jni/Filesystem.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Filesystem.cpp
+../../src/Filesystem.cpp

+ 1 - 1
android/jni/Filesystem.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Filesystem.h
+../../src/Filesystem.h

+ 1 - 1
android/jni/Font.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Font.cpp
+../../src/Font.cpp

+ 1 - 1
android/jni/Font.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Font.h
+../../src/Font.h

+ 1 - 1
android/jni/FontManager.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/FontManager.cpp
+../../src/FontManager.cpp

+ 1 - 1
android/jni/FontManager.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/FontManager.h
+../../src/FontManager.h

+ 1 - 1
android/jni/Glyph.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Glyph.h
+../../src/Glyph.h

+ 1 - 1
android/jni/Image.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Image.cpp
+../../src/Image.cpp

+ 1 - 1
android/jni/Image.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Image.h
+../../src/Image.h

+ 1 - 1
android/jni/ImageLoader.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/ImageLoader.cpp
+../../src/ImageLoader.cpp

+ 1 - 1
android/jni/ImageLoader.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/ImageLoader.h
+../../src/ImageLoader.h

+ 1 - 1
android/jni/IndexBuffer.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/IndexBuffer.h
+../../src/IndexBuffer.h

+ 1 - 1
android/jni/Log.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Log.cpp
+../../src/Log.cpp

+ 1 - 1
android/jni/Log.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Log.h
+../../src/Log.h

+ 1 - 1
android/jni/Material.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Material.cpp
+../../src/Material.cpp

+ 1 - 1
android/jni/Material.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Material.h
+../../src/Material.h

+ 1 - 1
android/jni/MaterialManager.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MaterialManager.cpp
+../../src/MaterialManager.cpp

+ 1 - 1
android/jni/MaterialManager.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MaterialManager.h
+../../src/MaterialManager.h

+ 1 - 1
android/jni/Mesh.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Mesh.cpp
+../../src/Mesh.cpp

+ 1 - 1
android/jni/Mesh.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Mesh.h
+../../src/Mesh.h

+ 1 - 1
android/jni/MeshChunk.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MeshChunk.cpp
+../../src/MeshChunk.cpp

+ 1 - 1
android/jni/MeshChunk.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MeshChunk.h
+../../src/MeshChunk.h

+ 1 - 1
android/jni/MeshLoader.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MeshLoader.h
+../../src/MeshLoader.h

+ 1 - 1
android/jni/MeshManager.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MeshManager.cpp
+../../src/MeshManager.cpp

+ 1 - 1
android/jni/MeshManager.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MeshManager.h
+../../src/MeshManager.h

+ 1 - 1
android/jni/MovableCamera.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MovableCamera.cpp
+../../src/MovableCamera.cpp

+ 1 - 1
android/jni/MovableCamera.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/MovableCamera.h
+../../src/MovableCamera.h

+ 1 - 1
android/jni/OcclusionQuery.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/OcclusionQuery.h
+../../src/OcclusionQuery.h

+ 1 - 1
android/jni/Pixel.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Pixel.cpp
+../../src/Pixel.cpp

+ 1 - 1
android/jni/Pixel.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Pixel.h
+../../src/Pixel.h

+ 1 - 1
android/jni/Renderer.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Renderer.cpp
+../../src/Renderer.cpp

+ 1 - 1
android/jni/Renderer.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Renderer.h
+../../src/Renderer.h

+ 1 - 1
android/jni/Resource.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Resource.h
+../../src/Resource.h

+ 1 - 1
android/jni/ResourceManager.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/ResourceManager.cpp
+../../src/ResourceManager.cpp

+ 1 - 1
android/jni/ResourceManager.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/ResourceManager.h
+../../src/ResourceManager.h

+ 1 - 1
android/jni/Skybox.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Skybox.cpp
+../../src/Skybox.cpp

+ 1 - 1
android/jni/Skybox.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Skybox.h
+../../src/Skybox.h

+ 1 - 1
android/jni/SpriteAnimator.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/SpriteAnimator.cpp
+../../src/SpriteAnimator.cpp

+ 1 - 1
android/jni/SpriteAnimator.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/SpriteAnimator.h
+../../src/SpriteAnimator.h

+ 1 - 1
android/jni/System.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/System.h
+../../src/System.h

+ 1 - 1
android/jni/Terrain.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Terrain.cpp
+../../src/Terrain.cpp

+ 1 - 1
android/jni/Terrain.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Terrain.h
+../../src/Terrain.h

+ 1 - 1
android/jni/TextRenderer.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/TextRenderer.cpp
+../../src/TextRenderer.cpp

+ 1 - 1
android/jni/TextRenderer.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/TextRenderer.h
+../../src/TextRenderer.h

+ 1 - 1
android/jni/Texture.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/Texture.h
+../../src/Texture.h

+ 1 - 1
android/jni/TextureManager.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/TextureManager.h
+../../src/TextureManager.h

+ 1 - 1
android/jni/VertexBuffer.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/VertexBuffer.h
+../../src/VertexBuffer.h

+ 1 - 1
android/jni/World.cpp

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/World.cpp
+../../src/World.cpp

+ 1 - 1
android/jni/World.h

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/World.h
+../../src/World.h

+ 1 - 1
android/jni/core

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/core
+../../src/core

+ 1 - 1
android/jni/input

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/input
+../../src/input

+ 1 - 1
android/jni/loaders

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/loaders
+../../src/loaders

+ 1 - 1
android/jni/network

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/network
+../../src/network

+ 1 - 1
android/jni/os

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/os
+../../src/os

+ 1 - 1
android/jni/renderers

@@ -1 +1 @@
-/home/mikymod/Repositories/git/crown/src/renderers
+../../src/renderers

+ 0 - 168
android/src/crown/android/CrownAccelerometer.java

@@ -1,168 +0,0 @@
-package crown.android;
-
-import java.util.List;
-import java.lang.Math;
-
-import android.content.Context;
-import android.util.Log;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-
-import crown.android.CrownEnum;
-
-
-/**
-*	CrownAccelerometer manage Accelerometer sensor
-*	for Android Devices.
-*/
-public class CrownAccelerometer
-{
-    private static final float MIN_VALUE = 0.0f;
-    private static final float MAX_VALUE = 1.0f;
-
-    private static SensorManager sensorManager;
-    private static Sensor sensor;
-    private static SensorEventListener sensorEventListener;
-
-    private static float mX;
-    private static float mY;
-    private static float mZ; 
-    private static float lastX;
-    private static float lastY;
-    private static float lastZ;
-
-//-----------------------------------------------------------------------------------
-    private static boolean initAccelerometer(Context context)
-    {
-    	// already initialized!
-    	// if (sensorEventListener != null)
-    	// {
-    	//     return true;
-    	// }
-
-    	sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
-
-    	sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
-
-    	sensorEventListener = new SensorEventListener()
-    	{
-	    	@Override
-	    	public void onAccuracyChanged(Sensor sensor, int accuracy) 
-			{
-	    	}
-
-	    	@Override
-	    	public void onSensorChanged(SensorEvent event) 
-			{
-                mX = event.values[0];
-                mY = event.values[1];
-                mZ = event.values[2];
-
-				CrownLib.pushFloatEvent(CrownEnum.OSET_ACCELEROMETER, mX, mY, mZ, 0);
-
-                lastX = mX;
-                lastY = mY;
-                lastZ = mZ;
-    		}    		
-    	};
-
-		sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_GAME);
-		return true;
-    }
-
-//-----------------------------------------------------------------------------------
-    public static boolean startListening(Context context)
-    {
-    	return initAccelerometer(context); 
-    }
-
-//-----------------------------------------------------------------------------------
-    public static void stopListening()
-    {
-    	sensorManager.unregisterListener(sensorEventListener);
-    }
-
-//-----------------------------------------------------------------------------------
-    public static float getX()
-    {
-    	return mX;
-    }
-
-//-----------------------------------------------------------------------------------
-    public static float getY()
-    {
-    	return mY;
-    }
-
-//-----------------------------------------------------------------------------------
-    public static float getZ()
-    {
-    	return mZ;
-    }
-
-//-----------------------------------------------------------------------------------
-    public static float getLastX()
-    {
-    	return lastX;
-    }
-
-//-----------------------------------------------------------------------------------
-    public static float getLastY()
-    {
-    	return lastY;
-    }
-
-//-----------------------------------------------------------------------------------
-    public static float getLastZ()
-    {
-    	return lastZ;
-    }
-
-// //-----------------------------------------------------------------------------------
-//     private void lowPassFiltering(float uX, float uY, float uZ)
-//     {
-//         float updateFreq = 30; // match this to your update speed
-//         float cutOffFreq = 0.9f;
-//         float timeRC = 1.0f / cutOffFreq;
-//         float dt = 1.0f / updateFreq;
-//         float filterConstant = timeRC / (dt + timeRC);
-//         float alpha = filterConstant;                 
-//         float kAccelerometerMinStep = 0.033f;
-//         float kAccelerometerNoiseAttenuation = 3.0f;
-
-//         float d = clamp((Math.abs(norm(mX, mY, mZ) - norm(uX, uY, uZ)) / kAccelerometerMinStep - 1.0f), MIN_VALUE, MAX_VALUE);
-//         alpha = d * filterConstant / kAccelerometerNoiseAttenuation + (1.0f - d) * filterConstant;
-
-//         mX = (float) (alpha * (mX + uX - lastX));
-//         mY = (float) (alpha * (mY + uY - lastY));
-//         mZ = (float) (alpha * (mZ + uZ - lastZ));
-
-//         lastX = mX;
-//         lastY = mY;
-//         lastZ = mZ;
-//     }
-
-// //-----------------------------------------------------------------------------------
-//     private float clamp(float v, float min, float max)
-//     {
-//         if (v <= min)
-//         {
-//             v = min;
-//         }
-//         else if (v >= max)
-//         {
-//             v = max;
-//         }
-
-//         return v;
-//     }
-
-// //-----------------------------------------------------------------------------------
-//     private float norm(float x, float y, float z)
-//     {
-//         float v = (float)Math.pow(x, 2) + (float)Math.pow(y, 2) + (float)Math.pow(z, 2);
-//         return (float)Math.sqrt(v);
-//     }
-}

+ 7 - 6
android/src/crown/android/CrownActivity.java

@@ -29,7 +29,8 @@ public class CrownActivity extends Activity
 	private CrownView 			mView;
 	private CrownView 			mView;
 
 
 	// Input attributes
 	// Input attributes
-	private CrownTouch 			mTouchListener;
+	private CrownTouch 			mTouch;
+	private CrownSensor			mSensor;
 
 
 	/**
 	/**
 	*
 	*
@@ -47,7 +48,8 @@ public class CrownActivity extends Activity
 		setContentView(mView);
 		setContentView(mView);
 
 
 		// Init Input
 		// Init Input
-		mTouchListener = new CrownTouch();
+		mTouch = new CrownTouch();
+		mSensor = new CrownSensor(this);
     }
     }
 
 
 	/**
 	/**
@@ -75,9 +77,8 @@ public class CrownActivity extends Activity
         mView.onResume();
         mView.onResume();
 		
 		
 		// init accelerometer
 		// init accelerometer
-		if (!CrownAccelerometer.startListening(this))
+		if (!mSensor.startListening(this))
 		{
 		{
-			Log.i(TAG, "Device has no accelerometer. App terminated.");
 			finish();
 			finish();
 		}
 		}
 	}
 	}
@@ -99,7 +100,7 @@ public class CrownActivity extends Activity
 		super.onStop();
 		super.onStop();
 
 
 		// stop accelerometer
 		// stop accelerometer
-		CrownAccelerometer.stopListening();
+		mSensor.stopListening();
 	}
 	}
 
 
 	/**
 	/**
@@ -116,7 +117,7 @@ public class CrownActivity extends Activity
 	*/
 	*/
 	public boolean onTouchEvent(MotionEvent event)
 	public boolean onTouchEvent(MotionEvent event)
 	{
 	{
-		mTouchListener.onTouch(event);
+		mTouch.onTouch(event);
 		return true;
 		return true;
 	}
 	}
 }
 }

+ 174 - 0
android/src/crown/android/CrownSensor.java

@@ -0,0 +1,174 @@
+package crown.android;
+
+import java.util.List;
+import java.lang.Math;
+
+import android.content.Context;
+import android.util.Log;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+
+import crown.android.CrownEnum;
+
+
+/**
+*	CrownSensor manage sensors for Android Devices.
+*/
+public class CrownSensor
+{
+    private final float MIN_VALUE = 0.0f;
+    private final float MAX_VALUE = 1.0f;
+    private final static float RAD2DEG = (float) (180.0f / Math.PI);
+
+    private SensorManager sensorManager;
+    private Sensor mAccelerometerSensor;
+    private Sensor mCompassSensor;
+    private SensorEventListener mAccelerometerEventListener;
+    private SensorEventListener mCompassEventListener;
+    private boolean isAccelerometerAvailable;
+    private boolean isCompassAvailable;
+
+    private float[] mRotationMatrix;
+    private float[] mGravity;
+    private float[] mLastGravity;
+    private float[] mBufferedAccelGData;
+    private float[] mGeoMagn;
+    private float[] mBufferedMagnetData;
+    private float[] mOrientation;
+
+    private float[] mRotAngle;
+ 
+
+//-----------------------------------------------------------------------------------
+    public CrownSensor(Context context)
+    {
+        mRotationMatrix = new float[16];
+        mGravity = new float[3];
+        mLastGravity = new float[3];
+        mGeoMagn = new float[3];
+        mOrientation = new float[3];
+        mRotAngle = new float[3];
+
+        isAccelerometerAvailable = context.getPackageManager().hasSystemFeature("android.hardware.sensor.accelerometer");
+        isCompassAvailable = context.getPackageManager().hasSystemFeature("android.hardware.sensor.compass");
+
+        if (hasAccelerometerSupport())
+        {
+            mAccelerometerEventListener = new SensorEventListener()
+            {
+                public void onAccuracyChanged(Sensor sensor, int accuracy) 
+                {
+                }
+
+                public void onSensorChanged(SensorEvent event)
+                {
+                    mGravity[0] = (mGravity[0] * 2 + event.values[0]) * 0.33334f;
+                    mGravity[1] = (mGravity[1] * 2 + event.values[1]) * 0.33334f;
+                    mGravity[2] = (mGravity[2] * 2 + event.values[2]) * 0.33334f;
+
+                    CrownLib.pushFloatEvent(CrownEnum.OSET_ACCELEROMETER, mGravity[0], mGravity[1], mGravity[2], 0.0f);
+                }
+            };           
+        }
+
+        if (hasCompassSupport())
+        {
+            mCompassEventListener = new SensorEventListener()
+            {
+                public void onAccuracyChanged(Sensor sensor, int accuracy) 
+                {
+                }
+
+                public void onSensorChanged(SensorEvent event)
+                {
+                    mGeoMagn[0] = (mGeoMagn[0] + event.values[0]) * 0.5f;
+                    mGeoMagn[1] = (mGeoMagn[1] + event.values[1]) * 0.5f;
+                    mGeoMagn[2] = (mGeoMagn[2] + event.values[2]) * 0.5f; 
+
+                    // CrownLib.pushFloatEvent(CrownEnum.OSET_ACCELEROMETER, mGeoMagn[0], mGeoMagn[1], mGeoMagn[2], 0.0f);
+                }                
+            };
+        }
+    }
+
+//-----------------------------------------------------------------------------------
+    public boolean startListening(Context context)
+    {
+        sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
+
+        mAccelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+        mCompassSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
+
+        sensorManager.registerListener(mAccelerometerEventListener, mAccelerometerSensor, SensorManager.SENSOR_DELAY_GAME);
+        sensorManager.registerListener(mCompassEventListener, mCompassSensor, SensorManager.SENSOR_DELAY_GAME);
+
+        return true;
+    }
+
+//-----------------------------------------------------------------------------------
+    public void stopListening()
+    {
+    	sensorManager.unregisterListener(mAccelerometerEventListener);
+        sensorManager.unregisterListener(mCompassEventListener);
+    }
+
+//-----------------------------------------------------------------------------------
+    public boolean hasAccelerometerSupport()
+    {
+        return isAccelerometerAvailable;       
+    }
+
+//-----------------------------------------------------------------------------------
+    public boolean hasCompassSupport()
+    {   
+        return isCompassAvailable;
+    }
+
+ //-----------------------------------------------------------------------------------
+    private void lowPassFiltering(float x, float y, float z)
+    {
+        float updateFreq = 30; // match this to your update speed
+        float cutOffFreq = 0.9f;
+        float timeRC = 1.0f / cutOffFreq;
+        float dt = 1.0f / updateFreq;
+        float filterConstant = timeRC / (dt + timeRC);
+        float alpha = filterConstant;                 
+        float kAccelerometerMinStep = 0.033f;
+        float kAccelerometerNoiseAttenuation = 3.0f;
+
+        float d = clamp((Math.abs(norm(mGravity[0], mGravity[1], mGravity[2]) - norm(x, y, z)) / kAccelerometerMinStep - 1.0f), MIN_VALUE, MAX_VALUE);
+        alpha = d * filterConstant / kAccelerometerNoiseAttenuation + (1.0f - d) * filterConstant;
+
+        mGravity[0] = (float) (alpha * (mGravity[0] + x - mLastGravity[0]));
+        mGravity[1] = (float) (alpha * (mGravity[1] + y - mLastGravity[1]));
+        mGravity[2] = (float) (alpha * (mGravity[2] + z - mLastGravity[2]));
+
+        mLastGravity[0] = mGravity[0];
+        mLastGravity[1] = mGravity[1];
+        mLastGravity[2] = mGravity[2];
+    }
+
+//-----------------------------------------------------------------------------------
+    private float clamp(float v, float min, float max)
+    {
+        if (v <= min)
+        {
+            v = min;
+        }
+        else if (v >= max)
+        {
+            v = max;
+        }
+
+        return v;
+    }
+
+//-----------------------------------------------------------------------------------
+    private float norm(float x, float y, float z)
+    {
+        float v = (float)Math.pow(x, 2) + (float)Math.pow(y, 2) + (float)Math.pow(z, 2);
+        return (float)Math.sqrt(v);
+    }
+}

+ 1 - 1
samples/android/triangle.cpp

@@ -62,7 +62,7 @@ public:
 		GetDevice()->GetRenderer()->SetMatrix(MT_MODEL, Mat4::IDENTITY);
 		GetDevice()->GetRenderer()->SetMatrix(MT_MODEL, Mat4::IDENTITY);
 
 
 		Mat4 projection;
 		Mat4 projection;
-		projection.build_projection_perspective_rh(90.0f, 800.0f/480.0f, 0.1f, 100.0f);
+		projection.build_projection_perspective_rh(90.0f, (float) width/height, 0.1f, 100.0f);
 		GetDevice()->GetRenderer()->SetMatrix(MT_PROJECTION, projection);
 		GetDevice()->GetRenderer()->SetMatrix(MT_PROJECTION, projection);
 
 
 		GetDevice()->GetRenderer()->SetClearColor(Color4::LIGHTBLUE);
 		GetDevice()->GetRenderer()->SetClearColor(Color4::LIGHTBLUE);

+ 1 - 3
src/MovableCamera.cpp

@@ -120,7 +120,7 @@ void MovableCamera::StrafeRight()
 }
 }
 
 
 //-----------------------------------------------------------------------
 //-----------------------------------------------------------------------
-void MovableCamera::SetRotation(const real x, const real y)
+void MovableCamera::SetRotation(const float x, const float y)
 {
 {
 	Vec3 right(1, 0, 0);
 	Vec3 right(1, 0, 0);
 	Vec3 look;
 	Vec3 look;
@@ -138,8 +138,6 @@ void MovableCamera::SetRotation(const real x, const real y)
 	mUp = m * up;
 	mUp = m * up;
 
 
 	Camera::SetLookAt(look);
 	Camera::SetLookAt(look);
-
-	// FIXME: Terrain sample must be fixed for testing
 }
 }
 
 
 } // namespace crown
 } // namespace crown