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 glTranslated(0.0f, HALF_INTERWHEEL_DISTANCE, 0.0f);
195 glCallList(m_unWheelList);
198 glTranslated(0.0f, -HALF_INTERWHEEL_DISTANCE, 0.0f);
199 glCallList(m_unWheelList);
203 glTranslated(0.0f, HALF_INTERTRACK_DISTANCE, 0.0f);
204 glCallList(m_unTrackList);
207 glTranslated(0.0f, -HALF_INTERTRACK_DISTANCE, 0.0f);
208 glCallList(m_unTrackList);
211 glCallList(m_unBaseList);
216 glRotated(fGripperOrientation, 0.0f, 0.0f, 1.0f);
220 for(
UInt32 i = 0; i < 12; i++) {
222 glRotated(m_fLEDAngleSlice, 0.0f, 0.0f, 1.0f);
226 glCallList(m_unGrippableSliceList);
230 glCallList(m_unGripperMechanicsList);
234 glTranslated(GRIPPER_CLAW_OFFSET, 0.0f, GRIPPER_CLAW_ELEVATION);
236 glRotated(fGripperAperture, 0.0f, 1.0f, 0.0f);
237 glCallList(m_unGripperClawList);
240 glRotated(-fGripperAperture, 0.0f, 1.0f, 0.0f);
241 glCallList(m_unGripperClawList);
245 glCallList(m_unRABList);
247 glCallList(m_unDistanceScannerList);
251 glRotated(fDistanceScannerOrientation, 0.0f, 0.0f, 1.0f);
252 glCallList(m_unDistanceScannerSensorList);
253 glRotated(90.0f, 0.0f, 0.0f, 1.0f);
254 glCallList(m_unDistanceScannerSensorList);
255 glRotated(90.0f, 0.0f, 0.0f, 1.0f);
256 glCallList(m_unDistanceScannerSensorList);
257 glRotated(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
284 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
297 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
309 glVertex3d(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
310 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
387 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
400 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
413 glVertex3d(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
414 glVertex3d(cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
429 glTranslated(HALF_TRACK_WHEELS_DISTANCE, 0.0f, 0.0f);
430 glCallList(m_unBasicWheelList);
433 glTranslated(-HALF_TRACK_WHEELS_DISTANCE, 0.0f, 0.0f);
434 glCallList(m_unBasicWheelList);
439 glEnable(GL_POLYGON_OFFSET_FILL);
440 glPolygonOffset(-0.1f, 1.0f);
443 glVertex3d(-HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
444 glVertex3d( HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
445 glVertex3d( HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
446 glVertex3d(-HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
450 glVertex3d(-HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, 0.0f);
451 glVertex3d( HALF_TRACK_WHEELS_DISTANCE, -HALF_WHEEL_WIDTH, 0.0f);
452 glVertex3d( HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, 0.0f);
453 glVertex3d(-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 glNormal3d(cNormal.
GetX(), 0.0f, cNormal.
GetY());
463 glVertex3d(-HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
464 glVertex3d(-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 glNormal3d(cNormal.
GetX(), 0.0f, cNormal.
GetY());
473 glVertex3d(HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
474 glVertex3d(HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
479 glDisable(GL_POLYGON_OFFSET_FILL);
492 glNormal3d(0.0f, 0.0f, -1.0f);
493 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
494 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
495 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
496 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
498 glNormal3d(0.0f, 0.0f, 1.0f);
499 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
500 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
501 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
502 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
505 glBegin(GL_QUAD_STRIP);
507 glNormal3d(-1.0f, 0.0f, 0.0f);
508 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
509 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
511 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
512 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
514 glNormal3d(0.0f, -1.0f, 0.0f);
515 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
516 glVertex3d( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
518 glNormal3d(1.0f, 0.0f, 0.0f);
519 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
520 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
522 glNormal3d(0.0f, 1.0f, 0.0f);
523 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
524 glVertex3d(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
527 CVector2 cVertex(BASE_MODULE_RADIUS, 0.0f);
531 glNormal3d(0.0f, 0.0f, -1.0f);
532 for(GLuint i = 0; i <= m_unVertices; i++) {
533 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
544 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER + BASE_MODULE_HEIGHT);
545 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
554 glNormal3d(0.0f, 0.0f, 1.0f);
555 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
556 for(GLuint i = 0; i <= m_unVertices; i++) {
557 glVertex3d(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 glNormal3d(0.0f, 0.0f, -1.0f);
574 glVertex3d(0.0f, 0.0f, GRIPPER_MODULE_ELEVATION);
575 for(GLuint i = 0; i <= m_unVertices; i++) {
576 glVertex3d(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 glNormal3d(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
587 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_BARRIER_HEIGHT);
588 glVertex3d(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 glNormal3d(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
599 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
600 glVertex3d(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 glNormal3d(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
614 glVertex3d(cVertex2.
GetX(), cVertex2.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HALF_HEIGHT);
615 glVertex3d(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 glNormal3d(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
630 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
631 glVertex3d(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 glNormal3d(0.0f, 0.0f, 1.0f);
641 glVertex3d(0.0f, 0.0f, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
642 for(GLuint i = 0; i <= m_unVertices; i++) {
643 glVertex3d(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.1f, 1.0f);
668 glNormal3d(0.0f, 0.0f, -1.0f);
669 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
670 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
671 glVertex3d( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
672 glVertex3d( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
674 glNormal3d(0.0f, 0.0f, 1.0f);
675 glVertex3d( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
676 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
677 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
678 glVertex3d( 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 glNormal3d(0.0f, -1.0f, 0.0f);
685 glVertex3d( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
686 glVertex3d( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
688 glNormal3d(1.0f, 0.0f, 0.0f);
689 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
690 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
692 glNormal3d(0.0f, 1.0f, 0.0f);
693 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
694 glVertex3d(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
696 glNormal3d(-1.0f, 0.0f, 0.0f);
697 glVertex3d( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
698 glVertex3d( 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 glNormal3d(0.0f, 0.0f, 1.0f);
719 glVertex3d( 0.0f, GRIPPER_CLAW_HALF_WIDTH, 0.0f);
720 glVertex3d( 0.0f, -GRIPPER_CLAW_HALF_WIDTH, 0.0f);
721 glVertex3d(GRIPPER_CLAW_LENGTH, -GRIPPER_CLAW_HALF_WIDTH, 0.0f);
722 glVertex3d(GRIPPER_CLAW_LENGTH, GRIPPER_CLAW_HALF_WIDTH, 0.0f);
724 glEnable(GL_CULL_FACE);
734 CVector2 cVertex(RAB_MAX_RADIUS, 0.0f);
737 glNormal3d(0.0f, 0.0f, -1.0f);
738 for(GLuint i = 0; i <= m_unVertices; i++) {
739 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
752 glVertex3d(cVertex2.
GetX(), cVertex2.
GetY(), RAB_ELEVATION + RAB_HEIGHT);
753 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), RAB_ELEVATION);
762 cVertex.
Set(RAB_MIN_RADIUS, 0.0f);
764 glNormal3d(0.0f, 0.0f, 1.0f);
765 for(GLuint i = 0; i <= m_unVertices; i++) {
766 glVertex3d(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 glNormal3d(0.0f, 0.0f, -1.0f);
789 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
790 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
791 glVertex3d( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
792 glVertex3d( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
794 glNormal3d(0.0f, 0.0f, 1.0f);
795 glVertex3d( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
796 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
797 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
798 glVertex3d( 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 glNormal3d(0.0f, -1.0f, 0.0f);
805 glVertex3d( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
806 glVertex3d( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
808 glVertex3d( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
809 glVertex3d( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
811 glNormal3d(1.0f, 0.0f, 0.0f);
812 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
813 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
815 glNormal3d(0.0f, 1.0f, 0.0f);
816 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
817 glVertex3d(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
819 glNormal3d(-1.0f, 0.0f, 0.0f);
820 glVertex3d( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
821 glVertex3d( 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 glNormal3d(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
838 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
839 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), DISTANCE_SCANNER_ELEVATION);
852 CVector2 cVertex(IMX_MODULE_RADIUS, 0.0f);
856 glNormal3d(0.0f, 0.0f, -1.0f);
857 for(GLuint i = 0; i <= m_unVertices; i++) {
858 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
869 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION + IMX_MODULE_HEIGHT);
870 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION);
879 glNormal3d(0.0f, 0.0f, 1.0f);
880 cVertex.
Set(IMX_MODULE_RADIUS, 0.0f);
881 for(GLuint i = 0; i <= m_unVertices; i++) {
882 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION + IMX_MODULE_HEIGHT);
892 CVector2 cVertex(BEACON_RADIUS, 0.0f);
896 glNormal3d(0.0f, 0.0f, -1.0f);
897 for(GLuint i = 0; i <= m_unVertices; i++) {
898 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
909 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION + BEACON_HEIGHT);
910 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION);
917 glNormal3d(0.0f, 0.0f, 1.0f);
918 cVertex.
Set(BEACON_RADIUS, 0.0f);
919 for(GLuint i = 0; i <= m_unVertices; i++) {
920 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION + BEACON_HEIGHT);
932 CVector2 cVertex(CAMERA_RADIUS, 0.0f);
936 glNormal3d(0.0f, 0.0f, -1.0f);
937 for(GLuint i = 0; i <= m_unVertices; i++) {
938 glVertex3d(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 glNormal3d(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
949 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION + CAMERA_HEIGHT);
950 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION);
957 glNormal3d(0.0f, 0.0f, 1.0f);
958 cVertex.
Set(CAMERA_RADIUS, 0.0f);
959 for(GLuint i = 0; i <= m_unVertices; i++) {
960 glVertex3d(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION + CAMERA_HEIGHT);
976 m_cModel.
Draw(c_entity);
unsigned int UInt32
32-bit unsigned integer.
float Real
Collects all ARGoS code.
The namespace containing all the ARGoS related code.
REGISTER_QTOPENGL_ENTITY_OPERATION(CQTOpenGLOperationDrawNormal, CQTOpenGLOperationDrawEPuckNormal, CEPuckEntity)
CDegrees ToDegrees(const CRadians &c_radians)
Converts CRadians to CDegrees.
UInt8 GetBlue() const
Returns the blue channel of the color.
UInt8 GetGreen() const
Returns the green channel of the color.
UInt8 GetRed() const
Returns the red channel of the color.
It defines the basic type CRadians, used to store an angle value in radians.
static const CRadians TWO_PI
Set to PI * 2.
Real GetValue() const
Returns the value in degrees.
Real GetY() const
Returns the y coordinate of this vector.
CVector2 & Rotate(const CRadians &c_angle)
Rotates this vector by the wanted angle.
CVector2 & Normalize()
Normalizes this vector.
void Set(Real f_x, Real f_y)
Sets the vector contents from Cartesian coordinates.
Real GetX() const
Returns the x coordinate of this vector.
Real GetX() const
Returns the x coordinate of this vector.
CVector3 & Normalize()
Normalizes this vector.
void Set(const Real f_x, const Real f_y, const Real f_z)
Sets the vector contents from Cartesian coordinates.
Real GetY() const
Returns the y coordinate of this vector.
Real GetZ() const
Returns the z coordinate of this vector.
CVector3 & RotateZ(const CRadians &c_angle)
Rotates this vector wrt the z axis.
CVector3 & RotateY(const CRadians &c_angle)
Rotates this vector wrt the y axis.
const CRadians & GetRotation() const
CFootBotTurretEntity & GetTurretEntity()
CGripperEquippedEntity & GetGripperEquippedEntity()
CEmbodiedEntity & GetEmbodiedEntity()
CLEDEquippedEntity & GetLEDEquippedEntity()
CControllableEntity & GetControllableEntity()
CFootBotDistanceScannerEquippedEntity & GetDistanceScannerEquippedEntity()
CRadians GetRotation() const
void ApplyTo(CQTOpenGLWidget &c_visualization, CFootBotEntity &c_entity)
void ApplyTo(CQTOpenGLWidget &c_visualization, CFootBotEntity &c_entity)
void RenderCamera()
Renders the camera.
void SetLEDMaterial(GLfloat f_red, GLfloat f_green, GLfloat f_blue)
Sets a colored LED material.
void RenderIMX()
Renders the iMX module.
virtual ~CQTOpenGLFootBot()
void SetCircuitBoardMaterial()
Sets a circuit board material.
void RenderTrack()
Renders the tracks.
void RenderDistanceScannerSensor()
Renders a single sensor of the distance scanner.
void RenderRAB()
Renders the RAB module.
void RenderGripperClaw()
Renders the gripper.
void RenderGripperMechanics()
Renders the gripper.
void MakeWheel()
Renders a materialless wheel.
void RenderBase()
Renders the base (apart from the wheels)
void SetWhitePlasticMaterial()
Sets a white plastic material.
virtual void Draw(CFootBotEntity &c_entity)
void RenderGrippableSlice()
Renders a slice of the gripper module (LEDs)
void RenderDistanceScanner()
Renders the distance scanner.
void SetBlackTireMaterial()
Sets a black tire material.
void RenderWheel()
Renders the wheels.
void RenderBeacon()
Renders the beacon.
Real GetLockState() const
Returns the lock state of the gripper.
const CColor & GetColor() const
Returns the current color of the LED.
A container of CLEDEntity.
CLEDEntity & GetLED(UInt32 un_index)
Returns an LED by numeric index.
void DrawRays(CControllableEntity &c_entity)
Draws a ray.
void DrawEntity(CPositionalEntity &c_entity)
Draws a positional entity.
void DrawBoundingBox(CEmbodiedEntity &c_entity)
Draws the bounding box of an embodied entity.