equal
deleted
inserted
replaced
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; |