qtmobility/examples/sensors/cubehouse/view.cpp
changeset 8 71781823f776
parent 5 453da2cfceef
equal deleted inserted replaced
5:453da2cfceef 8:71781823f776
    48 
    48 
    49 #if defined(QT_OPENGL_ES)
    49 #if defined(QT_OPENGL_ES)
    50 #define USE_BUFFERS 1
    50 #define USE_BUFFERS 1
    51 #endif
    51 #endif
    52 
    52 
       
    53 class smoothedaccelerometerfilter : public QObject, public QAccelerometerFilter
       
    54 {
       
    55     qreal prevX;
       
    56     qreal prevY;
       
    57     qreal prevZ;
       
    58     bool havePrev;
       
    59 
       
    60 public:
       
    61     smoothedaccelerometerfilter(QObject *parent = 0)
       
    62         : QObject(parent)
       
    63         , QAccelerometerFilter()
       
    64         , prevX(0)
       
    65         , prevY(0)
       
    66         , prevZ(0)
       
    67         , havePrev(false)
       
    68     {
       
    69     }
       
    70 
       
    71     bool filter(QAccelerometerReading *reading)
       
    72     {
       
    73         // Smooth out the reported values.  Large changes are applied as-is,
       
    74         // and small jitters smooth to the rest position.
       
    75         if (havePrev) {
       
    76             qreal xdiff = reading->x() - prevX;
       
    77             qreal ydiff = reading->y() - prevY;
       
    78             qreal zdiff = reading->z() - prevZ;
       
    79 #define threshold 0.196133f
       
    80             if (qAbs(xdiff) < threshold && qAbs(ydiff) < threshold && qAbs(zdiff) < threshold) {
       
    81                 reading->setX(prevX + xdiff * 0.1f);
       
    82                 reading->setY(prevY + ydiff * 0.1f);
       
    83                 reading->setZ(prevZ + zdiff * 0.1f);
       
    84             }
       
    85         }
       
    86         prevX = reading->x();
       
    87         prevY = reading->y();
       
    88         prevZ = reading->z();
       
    89         havePrev = true;
       
    90         return true;
       
    91     }
       
    92 };
       
    93 
    53 View::View(QWidget *parent)
    94 View::View(QWidget *parent)
    54     : QGLWidget(parent),
    95     : QGLWidget(parent),
    55       sensitivity(0.1f),
    96       sensitivity(0.1f),
    56       painter(0),
    97       painter(0),
    57       showFrameRate(false)
    98       showFrameRate(false)
    61     roomCamera = new Camera(this);
   102     roomCamera = new Camera(this);
    62     roomCamera->setAdjustForAspectRatio(false);
   103     roomCamera->setAdjustForAspectRatio(false);
    63 
   104 
    64     sensor = new QAccelerometer(this);
   105     sensor = new QAccelerometer(this);
    65     connect(sensor, SIGNAL(readingChanged()), this, SLOT(accelerometerTimeout()));
   106     connect(sensor, SIGNAL(readingChanged()), this, SLOT(accelerometerTimeout()));
       
   107     sensor->addFilter(new smoothedaccelerometerfilter(this));
    66     sensor->start();
   108     sensor->start();
    67 
   109 
    68     time.start();
   110     time.start();
    69 
   111 
    70     vertexBuffer = 0;
   112     vertexBuffer = 0;