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 fEmissionFactor = 10.0f;
364 const GLfloat pfColor[] = { f_red, f_green, f_blue, 1.0f };
365 const GLfloat pfSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f };
366 const GLfloat pfShininess[] = { 0.0f };
367 const GLfloat pfEmission[] = { f_red * fEmissionFactor, f_green * fEmissionFactor, f_blue * fEmissionFactor, 1.0f };
368 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
369 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
370 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
371 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
381 CVector2 cVertex(WHEEL_RADIUS, 0.0f);
383 CVector3 cNormal(-1.0f, -1.0f, 0.0f);
386 for(GLuint i = 0; i <= m_unVertices; i++) {
387 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
388 glVertex3f(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
394 cVertex.
Set(WHEEL_RADIUS, 0.0f);
396 cNormal.
Set(-1.0f, 1.0f, 0.0f);
399 for(GLuint i = 0; i <= m_unVertices; i++) {
400 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
401 glVertex3f(cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
408 cNormal.
Set(1.0f, 0.0f, 0.0f);
409 cVertex.
Set(WHEEL_RADIUS, 0.0f);
411 glBegin(GL_QUAD_STRIP);
412 for(GLuint i = 0; i <= m_unVertices; i++) {
413 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
414 glVertex3f(cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
415 glVertex3f(cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
430 glTranslatef(HALF_TRACK_WHEELS_DISTANCE, 0.0f, 0.0f);
431 glCallList(m_unBasicWheelList);
434 glTranslatef(-HALF_TRACK_WHEELS_DISTANCE, 0.0f, 0.0f);
435 glCallList(m_unBasicWheelList);
440 glEnable(GL_POLYGON_OFFSET_FILL);
441 glPolygonOffset(-0.1, 1.0);
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);
447 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, WHEEL_DIAMETER);
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);
454 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE, HALF_WHEEL_WIDTH, 0.0f);
457 CVector2 cVertex(0.0f, WHEEL_RADIUS);
461 glBegin(GL_QUAD_STRIP);
462 for(GLuint i = 0; i <= m_unVertices / 2; i++) {
463 glNormal3f(cNormal.
GetX(), 0.0f, cNormal.
GetY());
464 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
465 glVertex3f(-HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
471 glBegin(GL_QUAD_STRIP);
472 for(GLuint i = 0; i <= m_unVertices / 2; i++) {
473 glNormal3f(cNormal.
GetX(), 0.0f, cNormal.
GetY());
474 glVertex3f(HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), -HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
475 glVertex3f(HALF_TRACK_WHEELS_DISTANCE + cVertex.
GetX(), HALF_WHEEL_WIDTH, WHEEL_RADIUS + cVertex.
GetY());
480 glDisable(GL_POLYGON_OFFSET_FILL);
493 glNormal3f(0.0f, 0.0f, -1.0f);
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);
497 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
499 glNormal3f(0.0f, 0.0f, 1.0f);
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);
503 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
506 glBegin(GL_QUAD_STRIP);
508 glNormal3f(-1.0f, 0.0f, 0.0f);
509 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
510 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
512 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
513 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
515 glNormal3f(0.0f, -1.0f, 0.0f);
516 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
517 glVertex3f( HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
519 glNormal3f(1.0f, 0.0f, 0.0f);
520 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
521 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
523 glNormal3f(0.0f, 1.0f, 0.0f);
524 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
525 glVertex3f(-HALF_BATTERY_SOCKET_LENGTH, -HALF_BATTERY_SOCKET_WIDTH, BATTERY_SOCKET_ELEVATION);
528 CVector2 cVertex(BASE_MODULE_RADIUS, 0.0f);
532 glNormal3f(0.0f, 0.0f, -1.0f);
533 for(GLuint i = 0; i <= m_unVertices; i++) {
534 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
541 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
542 glBegin(GL_QUAD_STRIP);
543 for(GLuint i = 0; i <= m_unVertices; i++) {
544 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
545 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER + BASE_MODULE_HEIGHT);
546 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER);
555 glNormal3f(0.0f, 0.0f, 1.0f);
556 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
557 for(GLuint i = 0; i <= m_unVertices; i++) {
558 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BATTERY_SOCKET_ELEVATION + WHEEL_DIAMETER + BASE_MODULE_HEIGHT);
568 glDisable(GL_CULL_FACE);
570 CVector2 cVertex(BASE_MODULE_RADIUS, 0.0f);
573 glBegin(GL_TRIANGLE_FAN);
574 glNormal3f(0.0f, 0.0f, -1.0f);
575 glVertex3f(0.0f, 0.0f, GRIPPER_MODULE_ELEVATION);
576 for(GLuint i = 0; i <= m_unVertices; i++) {
577 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION);
584 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
585 glBegin(GL_QUAD_STRIP);
586 for(GLuint i = 0; i <= m_unVertices; i++) {
587 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
588 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_BARRIER_HEIGHT);
589 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION);
595 cNormal.
Set(1.0f, 0.0f);
596 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
597 glBegin(GL_QUAD_STRIP);
598 for(GLuint i = 0; i <= m_unVertices; i++) {
599 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
600 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
601 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT - GRIPPER_MODULE_BARRIER_HEIGHT);
607 cNormal.
Set(BASE_MODULE_RADIUS - GRIPPER_MODULE_INNER_RADIUS,
608 GRIPPER_MODULE_HALF_HEIGHT);
610 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
611 CVector2 cVertex2(GRIPPER_MODULE_INNER_RADIUS, 0.0f);
612 glBegin(GL_QUAD_STRIP);
613 for(GLuint i = 0; i <= m_unVertices; i++) {
614 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
615 glVertex3f(cVertex2.
GetX(), cVertex2.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HALF_HEIGHT);
616 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION);
623 cNormal.
Set( BASE_MODULE_RADIUS - GRIPPER_MODULE_INNER_RADIUS,
624 -GRIPPER_MODULE_HALF_HEIGHT);
626 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
627 cVertex2.
Set(GRIPPER_MODULE_INNER_RADIUS, 0.0f);
628 glBegin(GL_QUAD_STRIP);
629 for(GLuint i = 0; i <= m_unVertices; i++) {
630 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
631 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
632 glVertex3f(cVertex2.
GetX(), cVertex2.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HALF_HEIGHT);
639 cVertex.
Set(BASE_MODULE_RADIUS, 0.0f);
640 glBegin(GL_TRIANGLE_FAN);
641 glNormal3f(0.0f, 0.0f, 1.0f);
642 glVertex3f(0.0f, 0.0f, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
643 for(GLuint i = 0; i <= m_unVertices; i++) {
644 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
648 glEnable(GL_CULL_FACE);
656 const GLfloat pfColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
657 const GLfloat pfSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f };
658 const GLfloat pfShininess[] = { 0.0f };
659 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
660 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
661 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
662 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
663 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
665 glEnable(GL_POLYGON_OFFSET_FILL);
666 glPolygonOffset(-0.1, 1.0);
669 glNormal3f(0.0f, 0.0f, -1.0f);
670 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
671 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
672 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
673 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
675 glNormal3f(0.0f, 0.0f, 1.0f);
676 glVertex3f( 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_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
679 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
681 glDisable(GL_POLYGON_OFFSET_FILL);
683 glBegin(GL_QUAD_STRIP);
684 glNormal3f(0.0f, -1.0f, 0.0f);
686 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
687 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
689 glNormal3f(1.0f, 0.0f, 0.0f);
690 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
691 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, -GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
693 glNormal3f(0.0f, 1.0f, 0.0f);
694 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
695 glVertex3f(GRIPPER_MECHANICS_LENGTH + GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
697 glNormal3f(-1.0f, 0.0f, 0.0f);
698 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION + GRIPPER_MODULE_HEIGHT);
699 glVertex3f( GRIPPER_MODULE_INNER_RADIUS, GRIPPER_MECHANICS_HALF_WIDTH, GRIPPER_MODULE_ELEVATION);
708 const GLfloat pfColor[] = { 0.5f, 0.5f, 0.5f, 1.0f };
709 const GLfloat pfSpecular[] = { 0.5f, 0.5f, 0.5f, 1.0f };
710 const GLfloat pfShininess[] = { 10.0f };
711 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
712 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
713 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
714 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
715 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
717 glDisable(GL_CULL_FACE);
718 glNormal3f(0.0f, 0.0f, 1.0f);
720 glVertex3f( 0.0f, GRIPPER_CLAW_HALF_WIDTH, 0.0f);
721 glVertex3f( 0.0f, -GRIPPER_CLAW_HALF_WIDTH, 0.0f);
722 glVertex3f(GRIPPER_CLAW_LENGTH, -GRIPPER_CLAW_HALF_WIDTH, 0.0f);
723 glVertex3f(GRIPPER_CLAW_LENGTH, GRIPPER_CLAW_HALF_WIDTH, 0.0f);
725 glEnable(GL_CULL_FACE);
735 CVector2 cVertex(RAB_MAX_RADIUS, 0.0f);
738 glNormal3f(0.0f, 0.0f, -1.0f);
739 for(GLuint i = 0; i <= m_unVertices; i++) {
740 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), RAB_ELEVATION);
746 CVector3 cNormal(RAB_MAX_RADIUS - RAB_MIN_RADIUS, 0.0f, RAB_HEIGHT);
748 cVertex.
Set(RAB_MAX_RADIUS, 0.0f);
749 CVector2 cVertex2(RAB_MIN_RADIUS, 0.0f);
750 glBegin(GL_QUAD_STRIP);
751 for(GLuint i = 0; i <= m_unVertices; i++) {
752 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), cNormal.
GetZ());
753 glVertex3f(cVertex2.
GetX(), cVertex2.
GetY(), RAB_ELEVATION + RAB_HEIGHT);
754 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), RAB_ELEVATION);
763 cVertex.
Set(RAB_MIN_RADIUS, 0.0f);
765 glNormal3f(0.0f, 0.0f, 1.0f);
766 for(GLuint i = 0; i <= m_unVertices; i++) {
767 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), RAB_ELEVATION + RAB_HEIGHT);
778 const GLfloat pfColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
779 const GLfloat pfSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f };
780 const GLfloat pfShininess[] = { 0.0f };
781 const GLfloat pfEmission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
782 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
783 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
784 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
785 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
789 glNormal3f(0.0f, 0.0f, -1.0f);
790 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
791 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
792 glVertex3f( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
793 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
795 glNormal3f(0.0f, 0.0f, 1.0f);
796 glVertex3f( 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_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
799 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
801 glDisable(GL_POLYGON_OFFSET_FILL);
803 glBegin(GL_QUAD_STRIP);
804 glNormal3f(0.0f, -1.0f, 0.0f);
806 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
807 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
809 glVertex3f( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
810 glVertex3f( DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
812 glNormal3f(1.0f, 0.0f, 0.0f);
813 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
814 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, -DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
816 glNormal3f(0.0f, 1.0f, 0.0f);
817 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
818 glVertex3f(DISTANCE_SCANNER_SENSOR_DEPTH + DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
820 glNormal3f(-1.0f, 0.0f, 0.0f);
821 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
822 glVertex3f( DISTANCE_SCANNER_RADIUS, DISTANCE_SCANNER_SENSOR_HALF_WIDTH, DISTANCE_SCANNER_ELEVATION);
833 CVector2 cVertex(DISTANCE_SCANNER_RADIUS, 0.0f);
836 glBegin(GL_QUAD_STRIP);
837 for(GLuint i = 0; i <= m_unVertices; i++) {
838 glNormal3f(cVertex.
GetX(), cVertex.
GetY(), 0.0f);
839 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), DISTANCE_SCANNER_ELEVATION + DISTANCE_SCANNER_HEIGHT);
840 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), DISTANCE_SCANNER_ELEVATION);
853 CVector2 cVertex(IMX_MODULE_RADIUS, 0.0f);
857 glNormal3f(0.0f, 0.0f, -1.0f);
858 for(GLuint i = 0; i <= m_unVertices; i++) {
859 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION);
866 cVertex.
Set(IMX_MODULE_RADIUS, 0.0f);
867 glBegin(GL_QUAD_STRIP);
868 for(GLuint i = 0; i <= m_unVertices; i++) {
869 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
870 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION + IMX_MODULE_HEIGHT);
871 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION);
880 glNormal3f(0.0f, 0.0f, 1.0f);
881 cVertex.
Set(IMX_MODULE_RADIUS, 0.0f);
882 for(GLuint i = 0; i <= m_unVertices; i++) {
883 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), IMX_MODULE_ELEVATION + IMX_MODULE_HEIGHT);
893 CVector2 cVertex(BEACON_RADIUS, 0.0f);
897 glNormal3f(0.0f, 0.0f, -1.0f);
898 for(GLuint i = 0; i <= m_unVertices; i++) {
899 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION);
906 cVertex.
Set(BEACON_RADIUS, 0.0f);
907 glBegin(GL_QUAD_STRIP);
908 for(GLuint i = 0; i <= m_unVertices; i++) {
909 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
910 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION + BEACON_HEIGHT);
911 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION);
918 glNormal3f(0.0f, 0.0f, 1.0f);
919 cVertex.
Set(BEACON_RADIUS, 0.0f);
920 for(GLuint i = 0; i <= m_unVertices; i++) {
921 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), BEACON_ELEVATION + BEACON_HEIGHT);
933 CVector2 cVertex(CAMERA_RADIUS, 0.0f);
937 glNormal3f(0.0f, 0.0f, -1.0f);
938 for(GLuint i = 0; i <= m_unVertices; i++) {
939 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION);
946 cVertex.
Set(CAMERA_RADIUS, 0.0f);
947 glBegin(GL_QUAD_STRIP);
948 for(GLuint i = 0; i <= m_unVertices; i++) {
949 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
950 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION + CAMERA_HEIGHT);
951 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION);
958 glNormal3f(0.0f, 0.0f, 1.0f);
959 cVertex.
Set(CAMERA_RADIUS, 0.0f);
960 for(GLuint i = 0; i <= m_unVertices; i++) {
961 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), CAMERA_ELEVATION + CAMERA_HEIGHT);
977 m_cModel.
Draw(c_entity);