1
1
#include " camera.h"
2
- #include " sdlglutils.h"
3
- #include " Frustum.h"
4
2
5
- #include < Rcpp.h>
6
3
#include < cmath>
7
4
8
5
#include < GL/glu.h>
@@ -139,97 +136,6 @@ static bool InvertMatrix(const GLfloat m[16], GLfloat invOut[16])
139
136
140
137
Camera::Camera ()
141
138
{
142
- const char *hand1[] =
143
- {
144
- /* width height num_colors chars_per_pixel */
145
- " 16 16 3 1 " ,
146
- /* colors */
147
- " X c #000000" ,
148
- " . c #ffffff" ,
149
- " c None" ,
150
- /* pixels */
151
- " XX " ,
152
- " XX X..XXX " ,
153
- " X..XX..X..X " ,
154
- " X..XX..X..X X " ,
155
- " X..X..X..XX.X" ,
156
- " X..X..X..X..X" ,
157
- " XX X.......X..X" ,
158
- " X..XX..........X" ,
159
- " X...X.........X " ,
160
- " X............X " ,
161
- " X...........X " ,
162
- " X..........X " ,
163
- " X.........X " ,
164
- " X.......X " ,
165
- " X......X " ,
166
- " X......X " ,
167
- " 0,0"
168
- };
169
-
170
- const char *hand2[] =
171
- {
172
- /* width height num_colors chars_per_pixel */
173
- " 16 16 3 1 " ,
174
- /* colors */
175
- " X c #000000" ,
176
- " . c #ffffff" ,
177
- " c None" ,
178
- /* pixels */
179
- " " ,
180
- " " ,
181
- " " ,
182
- " " ,
183
- " XX XX XX " ,
184
- " X..X..X..XX " ,
185
- " X........X.X " ,
186
- " X.........X " ,
187
- " XX.........X " ,
188
- " X...........X " ,
189
- " X...........X " ,
190
- " X..........X " ,
191
- " X.........X " ,
192
- " X.......X " ,
193
- " X......X " ,
194
- " X......X " ,
195
- " 0,0"
196
- };
197
-
198
- const char *move[] =
199
- {
200
- /* width height num_colors chars_per_pixel */
201
- " 16 16 1 " ,
202
- /* colors */
203
- " X c #000000" ,
204
- " . c #ffffff" ,
205
- " c None" ,
206
- /* pixels */
207
- " XX " ,
208
- " X..X " ,
209
- " X....X " ,
210
- " X......X " ,
211
- " X XX..XX X " ,
212
- " X.X X..X X.X " ,
213
- " X..XXX..XXX..X " ,
214
- " X..............X" ,
215
- " X..............X" ,
216
- " X..XXX..XXX..X " ,
217
- " X.X X..X X.X " ,
218
- " X XX..XX X " ,
219
- " X......X " ,
220
- " X....X " ,
221
- " X..X " ,
222
- " XX " ,
223
- " 0,0"
224
- };
225
-
226
- _hand1 = cursorFromXPM (hand1);
227
- _hand2 = cursorFromXPM (hand2);
228
- _move = cursorFromXPM (move);
229
-
230
- SDL_SetCursor (_hand1);
231
- holdleft = false ;
232
- holdright = false ;
233
139
angleY = 20 ;
234
140
angleZ = -30 ;
235
141
deltaX = 0 ;
@@ -242,94 +148,43 @@ Camera::Camera()
242
148
zoomSensivity = 30 ;
243
149
}
244
150
245
- void Camera::OnMouseMotion ( const SDL_MouseMotionEvent & event )
151
+ void Camera::rotate ( int xrel, int yrel )
246
152
{
247
- if (holdleft) // Rotate
248
- {
249
- // printf("Rotate\n");
250
- angleZ += event.xrel *rotateSensivity;
251
- angleY += event.yrel *rotateSensivity;
153
+ angleZ += xrel*rotateSensivity;
154
+ angleY += yrel*rotateSensivity;
252
155
253
- if (angleY > 90 )
254
- angleY = 90 ;
255
- else if (angleY < -90 )
256
- angleY = -90 ;
156
+ if (angleY > 90 )
157
+ angleY = 90 ;
158
+ else if (angleY < -90 )
159
+ angleY = -90 ;
257
160
258
- changed = true ;
259
- }
260
- else if (holdright) // Pan
261
- {
262
- panSensivity = distance*0.01 ;
263
- // printf("Pan\n");
264
- deltaX += event.xrel *panSensivity;
265
- deltaY -= event.yrel *panSensivity;
266
- changed = true ;
267
- }
161
+ changed = true ;
268
162
}
269
163
270
- void Camera::OnMouseEvent ( const SDL_MouseButtonEvent &event, const SDL_MouseWheelEvent &event_wheel )
164
+ void Camera::pan ( int xrel, int yrel )
271
165
{
272
- // printf("Mouse event\n");
166
+ panSensivity = distance*0.01 ;
167
+ deltaX += xrel*panSensivity;
168
+ deltaY -= yrel*panSensivity;
169
+ changed = true ;
170
+ }
273
171
274
- if (event.button == SDL_BUTTON_LEFT)
275
- {
276
- if ((holdleft) && (event.type == SDL_MOUSEBUTTONUP))
277
- {
278
- holdleft = false ;
279
- SDL_SetCursor (_hand1);
280
- }
281
- else if ((!holdleft) && (event.type == SDL_MOUSEBUTTONDOWN))
282
- {
283
- holdleft = true ;
284
- SDL_SetCursor (_hand2);
285
- }
286
- }
287
- else if (event.button == SDL_BUTTON_RIGHT)
172
+ void Camera::zoom (int zrel)
173
+ {
174
+ if (zrel > 0 )
288
175
{
289
- if ((holdright) && (event.type == SDL_MOUSEBUTTONUP))
290
- {
291
- holdright = false ;
292
- SDL_SetCursor (_hand1);
293
- }
294
- else if ((!holdright) && (event.type == SDL_MOUSEBUTTONDOWN))
295
- {
296
- holdright = true ;
297
- SDL_SetCursor (_move);
298
- }
176
+ distance += zoomSensivity;
177
+ panSensivity = distance * 0.001 ;
178
+ zoomSensivity = distance * 0.05 ;
299
179
}
300
-
301
- // Handle mouse wheel event separately
302
- if (event_wheel.type == SDL_MOUSEWHEEL)
180
+ else if (zrel < 0 )
303
181
{
304
- // printf("Wheel even\n");
305
-
306
- if (event_wheel.y > 0 )
307
- {
308
- // printf("Wheel up\n");
309
- distance += zoomSensivity;
310
- panSensivity = distance * 0.001 ;
311
- zoomSensivity = distance * 0.05 ;
312
- changed = true ;
313
- }
314
- else if (event_wheel.y < 0 )
315
- {
316
- // printf("Wheel down\n");
317
- distance -= zoomSensivity;
318
- panSensivity = distance * 0.001 ;
319
- zoomSensivity = distance * 0.05 ;
320
- changed = true ;
321
- }
182
+ distance -= zoomSensivity;
183
+ panSensivity = distance * 0.001 ;
184
+ zoomSensivity = distance * 0.05 ;
322
185
}
323
- }
324
186
325
- void Camera::OnKeyboard (const SDL_KeyboardEvent & event)
326
- {
327
- if ((event.type == SDL_KEYDOWN)&&(event.keysym .sym == SDLK_HOME))
328
- {
329
- angleY = 0 ;
330
- angleZ = 0 ;
331
- changed = true ;
332
- }
187
+ changed = true ;
333
188
}
334
189
335
190
void Camera::setPanSensivity (double sensivity)
@@ -360,13 +215,6 @@ void Camera::setDistance(double dist)
360
215
distance = dist;
361
216
}
362
217
363
- Camera::~Camera ()
364
- {
365
- SDL_FreeCursor (_hand1);
366
- SDL_FreeCursor (_hand2);
367
- SDL_SetCursor (NULL );
368
- }
369
-
370
218
void Camera::look ()
371
219
{
372
220
glTranslated (deltaX, deltaY, 0.0 );
@@ -377,6 +225,7 @@ void Camera::look()
377
225
378
226
frustum.CalculateFrustum ();
379
227
228
+ // Get the camera position
380
229
GLfloat viewMatrix[16 ];
381
230
glGetFloatv (GL_MODELVIEW_MATRIX, viewMatrix);
382
231
0 commit comments