11 #include <argos3/core/simulator/entity/embodied_entity.h>
12 #include <argos3/core/utility/math/vector2.h>
13 #include <argos3/core/utility/math/vector3.h>
14 #include <argos3/plugins/simulator/entities/led_equipped_entity.h>
15 #include <argos3/plugins/simulator/entities/gripper_equipped_entity.h>
16 #include <argos3/plugins/simulator/visualizations/qt-opengl/qtopengl_widget.h>
26 static const Real INTER_MODULE_GAP = 0.0015f;
27 static const Real HEIGHT = 0.258f;
29 static const Real WHEEL_WIDTH = 0.022031354f;
30 static const Real HALF_WHEEL_WIDTH = WHEEL_WIDTH * 0.5f;
31 static const Real WHEEL_RADIUS = 0.029112741f;
32 static const Real WHEEL_DIAMETER = WHEEL_RADIUS * 2.0f;
33 static const Real INTERWHEEL_DISTANCE = 0.127f;
34 static const Real HALF_INTERWHEEL_DISTANCE = INTERWHEEL_DISTANCE * 0.5f;
36 static const Real INTERTRACK_DISTANCE = 0.064600514f;
37 static const Real HALF_INTERTRACK_DISTANCE = INTERTRACK_DISTANCE * 0.5f;
38 static const Real TRACK_WHEELS_DISTANCE = 0.100156677f;
39 static const Real HALF_TRACK_WHEELS_DISTANCE = TRACK_WHEELS_DISTANCE * 0.5f;
41 static const Real BATTERY_SOCKET_ELEVATION = 0.006f;
42 static const Real BATTERY_SOCKET_LENGTH = 0.150302467f;
43 static const Real HALF_BATTERY_SOCKET_LENGTH = BATTERY_SOCKET_LENGTH * 0.5f;
44 static const Real BATTERY_SOCKET_WIDTH = 0.037600133f;
45 static const Real HALF_BATTERY_SOCKET_WIDTH = BATTERY_SOCKET_WIDTH * 0.5f;
46 static const Real BASE_MODULE_HEIGHT = 0.0055f;
47 static const Real BASE_MODULE_RADIUS = 0.085036758f;
48 static const Real PROXIMITY_SENSOR_HEIGHT = 0.004f;
49 static const Real PROXIMITY_SENSOR_WIDTH = 0.007f;
50 static const Real PROXIMITY_SENSOR_DEPTH = 0.0025f;
52 static const Real GRIPPER_MODULE_ELEVATION = BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER + BASE_MODULE_HEIGHT + INTER_MODULE_GAP;
53 static const Real GRIPPER_MODULE_HEIGHT = 0.027f;
54 static const Real GRIPPER_MODULE_HALF_HEIGHT = GRIPPER_MODULE_HEIGHT * 0.5f;
55 static const Real GRIPPER_MODULE_INNER_RADIUS = 0.069f;
56 static const Real GRIPPER_MODULE_BARRIER_HEIGHT = 0.0075f;
57 static const Real GRIPPER_MECHANICS_LENGTH = 0.026094485f;
58 static const Real GRIPPER_MECHANICS_WIDTH = 0.02f;
59 static const Real GRIPPER_MECHANICS_HALF_WIDTH = GRIPPER_MECHANICS_WIDTH * 0.5f;
60 static const Real GRIPPER_CLAW_LENGTH = 0.01f;
61 static const Real GRIPPER_CLAW_WIDTH = 0.013f;
62 static const Real GRIPPER_CLAW_HALF_WIDTH = GRIPPER_CLAW_WIDTH * 0.5f;
63 static const Real GRIPPER_CLAW_OFFSET = GRIPPER_MODULE_INNER_RADIUS + GRIPPER_MECHANICS_LENGTH;
64 static const Real GRIPPER_CLAW_ELEVATION = GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HALF_HEIGHT;
66 static const Real RAB_ELEVATION = GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT + INTER_MODULE_GAP;
67 static const Real RAB_HEIGHT = 0.0086f;
68 static const Real RAB_MAX_RADIUS = 0.08f;
69 static const Real RAB_MIN_RADIUS = 0.075f;
71 static const Real DISTANCE_SCANNER_ELEVATION = RAB_ELEVATION + RAB_HEIGHT;
72 static const Real DISTANCE_SCANNER_RADIUS = 0.05f;
73 static const Real DISTANCE_SCANNER_HEIGHT = 0.0235f;
74 static const Real DISTANCE_SCANNER_SENSOR_WIDTH = 0.035858477f;
75 static const Real DISTANCE_SCANNER_SENSOR_HALF_WIDTH = DISTANCE_SCANNER_SENSOR_WIDTH * 0.5f;
76 static const Real DISTANCE_SCANNER_SENSOR_HEIGHT = 0.021124933f;
77 static const Real DISTANCE_SCANNER_SENSOR_DEPTH = 0.018f;
79 static const Real IMX_MODULE_ELEVATION = DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT;
80 static const Real IMX_MODULE_RADIUS = 0.065f;
81 static const Real IMX_MODULE_HEIGHT = 0.010199866f;
83 static const Real BEACON_ELEVATION = IMX_MODULE_ELEVATION + IMX_MODULE_HEIGHT;
84 static const Real BEACON_RADIUS = 0.021f;
85 static const Real BEACON_HEIGHT = 0.0201f;
87 static const Real CAMERA_ELEVATION = BEACON_ELEVATION + BEACON_HEIGHT;
88 static const Real CAMERA_RADIUS = BEACON_RADIUS;
89 static const Real CAMERA_HEIGHT = 0.104f;
96 m_fLEDAngleSlice(360.0f / 12.0f) {
98 m_unLists = glGenLists(13);
101 m_unBasicWheelList = m_unLists;
102 m_unWheelList = m_unLists + 1;
103 m_unTrackList = m_unLists + 2;
104 m_unBaseList = m_unLists + 3;
105 m_unGrippableSliceList = m_unLists + 4;
106 m_unGripperMechanicsList = m_unLists + 5;
107 m_unGripperClawList = m_unLists + 6;
108 m_unRABList = m_unLists + 7;
109 m_unDistanceScannerSensorList = m_unLists + 8;
110 m_unDistanceScannerList = m_unLists + 9;
111 m_unIMXList = m_unLists + 10;
112 m_unBeaconList = m_unLists + 11;
113 m_unCameraList = m_unLists + 12;
116 glNewList(m_unBasicWheelList, GL_COMPILE);
121 glNewList(m_unWheelList, GL_COMPILE);
126 glNewList(m_unTrackList, GL_COMPILE);
131 glNewList(m_unBaseList, GL_COMPILE);
136 glNewList(m_unGrippableSliceList, GL_COMPILE);
141 glNewList(m_unGripperMechanicsList, GL_COMPILE);
146 glNewList(m_unGripperClawList, GL_COMPILE);
151 glNewList(m_unRABList, GL_COMPILE);
156 glNewList(m_unDistanceScannerSensorList, GL_COMPILE);
161 glNewList(m_unDistanceScannerList, GL_COMPILE);
166 glNewList(m_unIMXList, GL_COMPILE);
171 glNewList(m_unBeaconList, GL_COMPILE);
176 glNewList(m_unCameraList, GL_COMPILE);
185 glDeleteLists(m_unLists, 13);
194 glTranslatef(0.0f, HALF_INTERWHEEL_DISTANCE, 0.0f);
195 glCallList(m_unWheelList);
198 glTranslatef(0.0f, -HALF_INTERWHEEL_DISTANCE, 0.0f);
199 glCallList(m_unWheelList);
203 glTranslatef(0.0f, HALF_INTERTRACK_DISTANCE, 0.0f);
204 glCallList(m_unTrackList);
207 glTranslatef(0.0f, -HALF_INTERTRACK_DISTANCE, 0.0f);
208 glCallList(m_unTrackList);
211 glCallList(m_unBaseList);
216 glRotatef(fGripperOrientation, 0.0f, 0.0f, 1.0f);
220 for(
UInt32 i = 0; i < 12; i++) {
222 glRotatef(m_fLEDAngleSlice, 0.0f, 0.0f, 1.0f);
226 glCallList(m_unGrippableSliceList);
230 glCallList(m_unGripperMechanicsList);
234 glTranslatef(GRIPPER_CLAW_OFFSET, 0.0f, GRIPPER_CLAW_ELEVATION);
236 glRotatef(fGripperAperture, 0.0f, 1.0f, 0.0f);
237 glCallList(m_unGripperClawList);
240 glRotatef(-fGripperAperture, 0.0f, 1.0f, 0.0f);
241 glCallList(m_unGripperClawList);
245 glCallList(m_unRABList);
247 glCallList(m_unDistanceScannerList);
251 glRotatef(fDistanceScannerOrientation, 0.0f, 0.0f, 1.0f);
252 glCallList(m_unDistanceScannerSensorList);
253 glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
254 glCallList(m_unDistanceScannerSensorList);
255 glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
256 glCallList(m_unDistanceScannerSensorList);
257 glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
258 glCallList(m_unDistanceScannerSensorList);
261 glCallList(m_unIMXList);
266 cBeaconColor.
GetBlue() / 255.0f);
267 glCallList(m_unBeaconList);
269 glCallList(m_unCameraList);
277 CVector2 cVertex(WHEEL_RADIUS, 0.0f);
279 CVector3 cNormal(-1.0f, -1.0f, 0.0f);
282 for(GLuint i = 0; i <= m_unVertices; i++) {
283 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
284 glVertex3f(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
290 cVertex.
Set(WHEEL_RADIUS, 0.0f);
291 cNormal.
Set(-1.0f, 1.0f, 0.0f);
295 for(GLuint i = 0; i <= m_unVertices; i++) {
296 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
297 glVertex3f(cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
303 cNormal.
Set(1.0f, 0.0f, 0.0f);
304 cVertex.
Set(WHEEL_RADIUS, 0.0f);
306 glBegin(GL_QUAD_STRIP);
307 for(GLuint i = 0; i <= m_unVertices; i++) {
308 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
309 glVertex3f(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
310 glVertex3f(cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
321 const GLfloat pfColor[] = { 1.0f, 1.0f, 1.0f, 1.0f };
322 const GLfloat pfSpecular[] = { 0.9f, 0.9f, 0.9f, 1.0f };
323 const GLfloat pfShininess[] = { 100.0f };
324 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
325 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
326 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
327 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
328 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
335 const GLfloat pfColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
336 const GLfloat pfSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f };
337 const GLfloat pfShininess[] = { 0.0f };
338 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
339 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
340 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
341 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
342 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
349 const GLfloat pfColor[] = { 0.0f, 0.0f, 1.0f, 1.0f };
350 const GLfloat pfSpecular[] = { 0.5f, 0.5f, 1.0f, 1.0f };
351 const GLfloat pfShininess[] = { 10.0f };
352 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
353 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
354 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
355 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
356 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
363 const GLfloat pfColor[] = { f_red, f_green, f_blue, 1.0f };
364 const GLfloat pfSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f };
365 const GLfloat pfShininess[] = { 0.0f };
366 const GLfloat pfEmission[] = { f_red, f_green, f_blue, 1.0f };
367 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
368 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
369 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
370 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
380 CVector2 cVertex(WHEEL_RADIUS, 0.0f);
382 CVector3 cNormal(-1.0f, -1.0f, 0.0f);
385 for(GLuint i = 0; i <= m_unVertices; i++) {
386 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
387 glVertex3f(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
393 cVertex.
Set(WHEEL_RADIUS, 0.0f);
395 cNormal.
Set(-1.0f, 1.0f, 0.0f);
398 for(GLuint i = 0; i <= m_unVertices; i++) {
399 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
400 glVertex3f(cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
407 cNormal.
Set(1.0f, 0.0f, 0.0f);
408 cVertex.
Set(WHEEL_RADIUS, 0.0f);
410 glBegin(GL_QUAD_STRIP);
411 for(GLuint i = 0; i <= m_unVertices; i++) {
412 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
413 glVertex3f(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
414 glVertex3f(cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
429 glTranslatef(HALF_TRACK_WHEELS_DISTANCE, 0.0f, 0.0f);
430 glCallList(m_unBasicWheelList);
433 glTranslatef(-HALF_TRACK_WHEELS_DISTANCE, 0.0f, 0.0f);
434 glCallList(m_unBasicWheelList);
439 glEnable(GL_POLYGON_OFFSET_FILL);
440 glPolygonOffset(-0.1, 1.0);
443 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
444 glVertex3f( HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
445 glVertex3f( HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
446 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
450 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, 0.0f);
451 glVertex3f( HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, 0.0f);
452 glVertex3f( HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, 0.0f);
453 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, 0.0f);
456 CVector2 cVertex(0.0f, WHEEL_RADIUS);
460 glBegin(GL_QUAD_STRIP);
461 for(GLuint i = 0; i <= m_unVertices / 2; i++) {
462 glNormal3f(cNormal.
GetX(), 0.0f, cNormal.
GetY());
463 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
464 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
470 glBegin(GL_QUAD_STRIP);
471 for(GLuint i = 0; i <= m_unVertices / 2; i++) {
472 glNormal3f(cNormal.
GetX(), 0.0f, cNormal.
GetY());
473 glVertex3f(HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
474 glVertex3f(HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
479 glDisable(GL_POLYGON_OFFSET_FILL);
492 glNormal3f(0.0f, 0.0f, -1.0f);
493 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
494 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
495 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
496 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
498 glNormal3f(0.0f, 0.0f, 1.0f);
499 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
500 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
501 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
502 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
505 glBegin(GL_QUAD_STRIP);
507 glNormal3f(-1.0f, 0.0f, 0.0f);
508 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
509 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
511 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
512 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
514 glNormal3f(0.0f, -1.0f, 0.0f);
515 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
516 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
518 glNormal3f(1.0f, 0.0f, 0.0f);
519 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
520 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
522 glNormal3f(0.0f, 1.0f, 0.0f);
523 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
524 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
527 CVector2 cVertex(BASE_MODULE_RADIUS, 0.0f);
531 glNormal3f(0.0f, 0.0f, -1.0f);
532 for(GLuint i = 0; i <= m_unVertices; i++) {
533 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
540 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
541 glBegin(GL_QUAD_STRIP);
542 for(GLuint i = 0; i <= m_unVertices; i++) {
543 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
544 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER + BASE_MODULE_HEIGHT);
545 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
554 glNormal3f(0.0f, 0.0f, 1.0f);
555 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
556 for(GLuint i = 0; i <= m_unVertices; i++) {
557 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER + BASE_MODULE_HEIGHT);
567 glDisable(GL_CULL_FACE);
569 CVector2 cVertex(BASE_MODULE_RADIUS, 0.0f);
572 glBegin(GL_TRIANGLE_FAN);
573 glNormal3f(0.0f, 0.0f, -1.0f);
574 glVertex3f(0.0f, 0.0f, GRIPPER_MODULE_ELEVATION);
575 for(GLuint i = 0; i <= m_unVertices; i++) {
576 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION);
583 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
584 glBegin(GL_QUAD_STRIP);
585 for(GLuint i = 0; i <= m_unVertices; i++) {
586 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
587 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_BARRIER_HEIGHT);
588 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION);
594 cNormal.
Set(1.0f, 0.0f);
595 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
596 glBegin(GL_QUAD_STRIP);
597 for(GLuint i = 0; i <= m_unVertices; i++) {
598 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
599 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
600 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT - GRIPPER_MODULE_BARRIER_HEIGHT);
606 cNormal.
Set(BASE_MODULE_RADIUS - GRIPPER_MODULE_INNER_RADIUS,
607 GRIPPER_MODULE_HALF_HEIGHT);
609 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
610 CVector2 cVertex2(GRIPPER_MODULE_INNER_RADIUS, 0.0f);
611 glBegin(GL_QUAD_STRIP);
612 for(GLuint i = 0; i <= m_unVertices; i++) {
613 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
614 glVertex3f(cVertex2.
GetX(), cVertex2.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HALF_HEIGHT);
615 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION);
622 cNormal.
Set( BASE_MODULE_RADIUS - GRIPPER_MODULE_INNER_RADIUS,
623 -GRIPPER_MODULE_HALF_HEIGHT);
625 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
626 cVertex2.
Set(GRIPPER_MODULE_INNER_RADIUS, 0.0f);
627 glBegin(GL_QUAD_STRIP);
628 for(GLuint i = 0; i <= m_unVertices; i++) {
629 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
630 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
631 glVertex3f(cVertex2.
GetX(), cVertex2.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HALF_HEIGHT);
638 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
639 glBegin(GL_TRIANGLE_FAN);
640 glNormal3f(0.0f, 0.0f, 1.0f);
641 glVertex3f(0.0f, 0.0f, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
642 for(GLuint i = 0; i <= m_unVertices; i++) {
643 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
647 glEnable(GL_CULL_FACE);
655 const GLfloat pfColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
656 const GLfloat pfSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f };
657 const GLfloat pfShininess[] = { 0.0f };
658 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
659 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
660 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
661 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
662 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
664 glEnable(GL_POLYGON_OFFSET_FILL);
665 glPolygonOffset(-0.1, 1.0);
668 glNormal3f(0.0f, 0.0f, -1.0f);
669 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
670 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
671 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
672 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
674 glNormal3f(0.0f, 0.0f, 1.0f);
675 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
676 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
677 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
678 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
680 glDisable(GL_POLYGON_OFFSET_FILL);
682 glBegin(GL_QUAD_STRIP);
683 glNormal3f(0.0f, -1.0f, 0.0f);
685 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
686 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
688 glNormal3f(1.0f, 0.0f, 0.0f);
689 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
690 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
692 glNormal3f(0.0f, 1.0f, 0.0f);
693 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
694 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
696 glNormal3f(-1.0f, 0.0f, 0.0f);
697 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
698 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
707 const GLfloat pfColor[] = { 0.5f, 0.5f, 0.5f, 1.0f };
708 const GLfloat pfSpecular[] = { 0.5f, 0.5f, 0.5f, 1.0f };
709 const GLfloat pfShininess[] = { 10.0f };
710 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
711 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
712 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
713 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
714 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
716 glDisable(GL_CULL_FACE);
717 glNormal3f(0.0f, 0.0f, 1.0f);
719 glVertex3f( 0.0f, GRIPPER_CLAW_HALF_WIDTH, 0.0f);
720 glVertex3f( 0.0f, -GRIPPER_CLAW_HALF_WIDTH, 0.0f);
721 glVertex3f(GRIPPER_CLAW_LENGTH, -GRIPPER_CLAW_HALF_WIDTH, 0.0f);
722 glVertex3f(GRIPPER_CLAW_LENGTH, GRIPPER_CLAW_HALF_WIDTH, 0.0f);
724 glEnable(GL_CULL_FACE);
734 CVector2 cVertex(RAB_MAX_RADIUS, 0.0f);
737 glNormal3f(0.0f, 0.0f, -1.0f);
738 for(GLuint i = 0; i <= m_unVertices; i++) {
739 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), RAB_ELEVATION);
745 CVector3 cNormal(RAB_MAX_RADIUS - RAB_MIN_RADIUS, 0.0f, RAB_HEIGHT);
747 cVertex.
Set(RAB_MAX_RADIUS, 0.0f);
748 CVector2 cVertex2(RAB_MIN_RADIUS, 0.0f);
749 glBegin(GL_QUAD_STRIP);
750 for(GLuint i = 0; i <= m_unVertices; i++) {
751 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
752 glVertex3f(cVertex2.
GetX(), cVertex2.
GetY(), RAB_ELEVATION + RAB_HEIGHT);
753 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), RAB_ELEVATION);
762 cVertex.
Set(RAB_MIN_RADIUS, 0.0f);
764 glNormal3f(0.0f, 0.0f, 1.0f);
765 for(GLuint i = 0; i <= m_unVertices; i++) {
766 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), RAB_ELEVATION + RAB_HEIGHT);
777 const GLfloat pfColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
778 const GLfloat pfSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f };
779 const GLfloat pfShininess[] = { 0.0f };
780 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
781 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
782 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
783 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
784 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
788 glNormal3f(0.0f, 0.0f, -1.0f);
789 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
790 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
791 glVertex3f( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
792 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
794 glNormal3f(0.0f, 0.0f, 1.0f);
795 glVertex3f( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
796 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
797 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
798 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
800 glDisable(GL_POLYGON_OFFSET_FILL);
802 glBegin(GL_QUAD_STRIP);
803 glNormal3f(0.0f, -1.0f, 0.0f);
805 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
806 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
808 glVertex3f( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
809 glVertex3f( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
811 glNormal3f(1.0f, 0.0f, 0.0f);
812 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
813 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
815 glNormal3f(0.0f, 1.0f, 0.0f);
816 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
817 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
819 glNormal3f(-1.0f, 0.0f, 0.0f);
820 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
821 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
832 CVector2 cVertex(DISTANCE_SCANNER_RADIUS, 0.0f);
835 glBegin(GL_QUAD_STRIP);
836 for(GLuint i = 0; i <= m_unVertices; i++) {
837 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
838 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
839 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), DISTANCE_SCANNER_ELEVATION);
852 CVector2 cVertex(IMX_MODULE_RADIUS, 0.0f);
856 glNormal3f(0.0f, 0.0f, -1.0f);
857 for(GLuint i = 0; i <= m_unVertices; i++) {
858 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION);
865 cVertex.
Set(IMX_MODULE_RADIUS, 0.0f);
866 glBegin(GL_QUAD_STRIP);
867 for(GLuint i = 0; i <= m_unVertices; i++) {
868 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
869 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION + IMX_MODULE_HEIGHT);
870 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION);
879 glNormal3f(0.0f, 0.0f, 1.0f);
880 cVertex.
Set(IMX_MODULE_RADIUS, 0.0f);
881 for(GLuint i = 0; i <= m_unVertices; i++) {
882 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION + IMX_MODULE_HEIGHT);
892 CVector2 cVertex(BEACON_RADIUS, 0.0f);
896 glNormal3f(0.0f, 0.0f, -1.0f);
897 for(GLuint i = 0; i <= m_unVertices; i++) {
898 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION);
905 cVertex.
Set(BEACON_RADIUS, 0.0f);
906 glBegin(GL_QUAD_STRIP);
907 for(GLuint i = 0; i <= m_unVertices; i++) {
908 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
909 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION + BEACON_HEIGHT);
910 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION);
917 glNormal3f(0.0f, 0.0f, 1.0f);
918 cVertex.
Set(BEACON_RADIUS, 0.0f);
919 for(GLuint i = 0; i <= m_unVertices; i++) {
920 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION + BEACON_HEIGHT);
932 CVector2 cVertex(CAMERA_RADIUS, 0.0f);
936 glNormal3f(0.0f, 0.0f, -1.0f);
937 for(GLuint i = 0; i <= m_unVertices; i++) {
938 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION);
945 cVertex.
Set(CAMERA_RADIUS, 0.0f);
946 glBegin(GL_QUAD_STRIP);
947 for(GLuint i = 0; i <= m_unVertices; i++) {
948 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
949 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION + CAMERA_HEIGHT);
950 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION);
957 glNormal3f(0.0f, 0.0f, 1.0f);
958 cVertex.
Set(CAMERA_RADIUS, 0.0f);
959 for(GLuint i = 0; i <= m_unVertices; i++) {
960 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION + CAMERA_HEIGHT);
976 m_cModel.
Draw(c_entity);
void ApplyTo(CQTOpenGLWidget &c_visualization, CFootBotEntity &c_entity)
CLEDEntity & GetLED(UInt32 un_index)
Returns an LED by numeric index.
void RenderRAB()
Renders the RAB module.
void RenderGrippableSlice()
Renders a slice of the gripper module (LEDs)
CVector3 & RotateY(const CRadians &c_angle)
Rotates this vector wrt the y axis.
CEmbodiedEntity & GetEmbodiedEntity()
CVector3 & RotateZ(const CRadians &c_angle)
Rotates this vector wrt the z axis.
virtual void Draw(CFootBotEntity &c_entity)
CDegrees ToDegrees(const CRadians &c_radians)
Converts CRadians to CDegrees.
void RenderGripperMechanics()
Renders the gripper.
float Real
Collects all ARGoS code.
void SetWhitePlasticMaterial()
Sets a white plastic material.
Real GetX() const
Returns the x coordinate of this vector.
CRadians GetRotation() const
Real GetX() const
Returns the x coordinate of this vector.
CFootBotDistanceScannerEquippedEntity & GetDistanceScannerEquippedEntity()
Real GetY() const
Returns the y coordinate of this vector.
static const CRadians TWO_PI
Set to PI * 2.
CControllableEntity & GetControllableEntity()
UInt8 GetGreen() const
Returns the green channel of the color.
const CColor & GetColor() const
Returns the current color of the LED.
const CRadians & GetRotation() const
Real GetY() const
Returns the y coordinate of this vector.
CLEDEquippedEntity & GetLEDEquippedEntity()
It defines the basic type CRadians, used to store an angle value in radians.
void RenderBeacon()
Renders the beacon.
void RenderDistanceScannerSensor()
Renders a single sensor of the distance scanner.
CFootBotTurretEntity & GetTurretEntity()
void SetBlackTireMaterial()
Sets a black tire material.
unsigned int UInt32
32-bit unsigned integer.
A container of CLEDEntity.
void Set(const Real f_x, const Real f_y, const Real f_z)
Sets the vector contents from Cartesian coordinates.
void RenderWheel()
Renders the wheels.
UInt8 GetRed() const
Returns the red channel of the color.
void RenderGripperClaw()
Renders the gripper.
Real GetLockState() const
Returns the lock state of the gripper.
void MakeWheel()
Renders a materialless wheel.
CVector2 & Normalize()
Normalizes this vector.
void SetLEDMaterial(GLfloat f_red, GLfloat f_green, GLfloat f_blue)
Sets a colored LED material.
void RenderDistanceScanner()
Renders the distance scanner.
void RenderTrack()
Renders the tracks.
void RenderIMX()
Renders the iMX module.
void DrawEntity(CPositionalEntity &c_entity)
Draws a positional entity.
void ApplyTo(CQTOpenGLWidget &c_visualization, CFootBotEntity &c_entity)
CGripperEquippedEntity & GetGripperEquippedEntity()
void DrawBoundingBox(CEmbodiedEntity &c_entity)
Draws the bounding box of an embodied entity.
UInt8 GetBlue() const
Returns the blue channel of the color.
REGISTER_QTOPENGL_ENTITY_OPERATION(CQTOpenGLOperationDrawNormal, CQTOpenGLOperationDrawEPuckNormal, CEPuckEntity)
void Set(Real f_x, Real f_y)
Sets the vector contents from Cartesian coordinates.
void DrawRays(CControllableEntity &c_entity)
Draws a ray.
void RenderBase()
Renders the base (apart from the wheels)
The namespace containing all the ARGoS related code.
Real GetZ() const
Returns the z coordinate of this vector.
virtual ~CQTOpenGLFootBot()
void SetCircuitBoardMaterial()
Sets a circuit board material.
CVector3 & Normalize()
Normalizes this vector.
CVector2 & Rotate(const CRadians &c_angle)
Rotates this vector by the wanted angle.
void RenderCamera()
Renders the camera.