9 #include <argos3/core/utility/math/vector2.h>
10 #include <argos3/core/utility/math/vector3.h>
11 #include <argos3/plugins/simulator/visualizations/qt-opengl/qtopengl_widget.h>
20 static const Real BOARD_HALF_DIAGONAL = 0.029f;
21 static const Real BOARD_HEIGHT = 0.005f;
23 static const Real ARM_HALF_LENGTH = 0.063f;
24 static const Real ARM_HEIGHT = 0.003f;
25 static const Real ARM_HALF_WIDTH = 0.0015f;
26 static const Real ARM_BOTTOM = 0.001f;
27 static const Real ARM_TOP = ARM_BOTTOM + ARM_HEIGHT;
29 static const Real PROPELLER_ROD_RADIUS = 0.013f;
30 static const Real PROPELLER_ROD_HEIGHT = 0.011f;
31 static const Real PROPELLER_ROD_BOTTOM = ARM_TOP;
32 static const Real PROPELLER_ROD_TOP = PROPELLER_ROD_BOTTOM + PROPELLER_ROD_HEIGHT;
34 static const Real PROPELLER_BLADE_RADIUS = 0.041f;
35 static const Real PROPELLER_BLADE_ELEVATION = 0.0105f;
37 static const Real ONE_OVER_SR2 = 1.0f /
Sqrt(2.0f);
45 m_unLists = glGenLists(1);
47 glNewList(m_unLists, GL_COMPILE);
56 glDeleteLists(m_unLists, 1);
64 glCallList(m_unLists);
71 const GLfloat pfColor[] = { 0.00f, 0.00f, 0.00f, 1.00f };
72 const GLfloat pfSpecular[] = { 0.90f, 0.90f, 0.90f, 1.00f };
73 const GLfloat pfShininess[] = { 100.00f };
74 const GLfloat pfEmission[] = { 0.00f, 0.00f, 0.00f, 1.00f };
75 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
76 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
77 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
78 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
85 const GLfloat pfColor[] = { 0.00f, 1.00f, 0.00f, 1.00f };
86 const GLfloat pfSpecular[] = { 0.90f, 0.90f, 0.90f, 1.00f };
87 const GLfloat pfShininess[] = { 100.00f };
88 const GLfloat pfEmission[] = { 0.00f, 0.00f, 0.00f, 1.00f };
89 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
90 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
91 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
92 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
99 const GLfloat pfColor[] = { 0.75f, 0.75f, 0.75f, 1.00f };
100 const GLfloat pfSpecular[] = { 0.90f, 0.90f, 0.90f, 1.00f };
101 const GLfloat pfShininess[] = { 100.00f };
102 const GLfloat pfEmission[] = { 0.00f, 0.00f, 0.00f, 1.00f };
103 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, pfColor);
104 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pfSpecular);
105 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pfShininess);
106 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pfEmission);
119 glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
125 glTranslatef(0.0f, ARM_HALF_LENGTH - PROPELLER_ROD_RADIUS, 0.0f);
130 glTranslatef(ARM_HALF_LENGTH - PROPELLER_ROD_RADIUS, 0.0f, 0.0f);
135 glTranslatef(0.0f, -ARM_HALF_LENGTH + PROPELLER_ROD_RADIUS, 0.0f);
140 glTranslatef(-ARM_HALF_LENGTH + PROPELLER_ROD_RADIUS, 0.0f, 0.0f);
152 glNormal3f(0.0f, 0.0f, -1.0f);
153 glVertex3f( 0.0f, BOARD_HALF_DIAGONAL, 0.0f );
154 glVertex3f( BOARD_HALF_DIAGONAL, 0.0f, 0.0f );
155 glVertex3f( 0.0f, -BOARD_HALF_DIAGONAL, 0.0f );
156 glVertex3f(-BOARD_HALF_DIAGONAL, 0.0f, 0.0f );
158 glNormal3f(0.0f, 0.0f, 1.0f);
159 glVertex3f( 0.0f, BOARD_HALF_DIAGONAL, BOARD_HEIGHT);
160 glVertex3f(-BOARD_HALF_DIAGONAL, 0.0f, BOARD_HEIGHT);
161 glVertex3f( 0.0f, -BOARD_HALF_DIAGONAL, BOARD_HEIGHT);
162 glVertex3f( BOARD_HALF_DIAGONAL, 0.0f, BOARD_HEIGHT);
165 glNormal3f( ONE_OVER_SR2, ONE_OVER_SR2, 0.0f );
166 glVertex3f( 0.0f, BOARD_HALF_DIAGONAL, 0.0f );
167 glVertex3f( 0.0f, BOARD_HALF_DIAGONAL, BOARD_HEIGHT);
168 glVertex3f( BOARD_HALF_DIAGONAL, 0.0f, BOARD_HEIGHT);
169 glVertex3f( BOARD_HALF_DIAGONAL, 0.0f, 0.0f );
171 glNormal3f( ONE_OVER_SR2, -ONE_OVER_SR2, 0.0f );
172 glVertex3f( BOARD_HALF_DIAGONAL, 0.0f, 0.0f );
173 glVertex3f( BOARD_HALF_DIAGONAL, 0.0f, BOARD_HEIGHT);
174 glVertex3f( 0.0f, -BOARD_HALF_DIAGONAL, BOARD_HEIGHT);
175 glVertex3f( 0.0f, -BOARD_HALF_DIAGONAL, 0.0f );
177 glNormal3f( -ONE_OVER_SR2, -ONE_OVER_SR2, 0.0f );
178 glVertex3f( 0.0f, -BOARD_HALF_DIAGONAL, 0.0f );
179 glVertex3f( 0.0f, -BOARD_HALF_DIAGONAL, BOARD_HEIGHT);
180 glVertex3f(-BOARD_HALF_DIAGONAL, 0.0f, BOARD_HEIGHT);
181 glVertex3f(-BOARD_HALF_DIAGONAL, 0.0f, 0.0f );
183 glNormal3f( -ONE_OVER_SR2, ONE_OVER_SR2, 0.0f );
184 glVertex3f(-BOARD_HALF_DIAGONAL, 0.0f, 0.0f );
185 glVertex3f(-BOARD_HALF_DIAGONAL, 0.0f, BOARD_HEIGHT);
186 glVertex3f( 0.0f, BOARD_HALF_DIAGONAL, BOARD_HEIGHT);
187 glVertex3f( 0.0f, BOARD_HALF_DIAGONAL, 0.0f );
198 glNormal3f( 0.0f, 0.0f, -1.0f );
199 glVertex3f( ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_BOTTOM);
200 glVertex3f( ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_BOTTOM);
201 glVertex3f(-ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_BOTTOM);
202 glVertex3f(-ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_BOTTOM);
204 glNormal3f( 0.0f, 0.0f, 1.0f );
205 glVertex3f( ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_TOP );
206 glVertex3f(-ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_TOP );
207 glVertex3f(-ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_TOP );
208 glVertex3f( ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_TOP );
211 glNormal3f( 1.0f, 0.0f, 0.0f );
212 glVertex3f( ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_TOP );
213 glVertex3f( ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_BOTTOM);
214 glVertex3f(-ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_BOTTOM);
215 glVertex3f(-ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_TOP );
217 glNormal3f( 0.0f, 1.0f, 0.0f );
218 glVertex3f( ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_TOP );
219 glVertex3f( ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_TOP );
220 glVertex3f( ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_BOTTOM);
221 glVertex3f( ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_BOTTOM);
223 glNormal3f(-1.0f, 0.0f, 0.0f );
224 glVertex3f( ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_TOP );
225 glVertex3f(-ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_TOP );
226 glVertex3f(-ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_BOTTOM);
227 glVertex3f( ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_BOTTOM);
229 glNormal3f( 0.0f, -1.0f, 0.0f );
230 glVertex3f(-ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_TOP );
231 glVertex3f(-ARM_HALF_WIDTH, ARM_HALF_LENGTH, ARM_BOTTOM);
232 glVertex3f(-ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_BOTTOM);
233 glVertex3f(-ARM_HALF_WIDTH, -ARM_HALF_LENGTH, ARM_TOP );
246 glBegin(GL_QUAD_STRIP);
247 for(GLuint i = 0; i <= m_unVertices; i++) {
248 glNormal3f(cNormal.
GetX(), cNormal.
GetY(), 0.0f);
250 cVertex *= PROPELLER_ROD_RADIUS;
251 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), PROPELLER_ROD_TOP);
252 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), PROPELLER_ROD_BOTTOM);
257 cVertex.
Set(PROPELLER_ROD_RADIUS, 0.0f);
259 glNormal3f(0.0f, 0.0f, 1.0f);
260 for(GLuint i = 0; i <= m_unVertices; i++) {
261 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), PROPELLER_ROD_TOP);
266 cVertex.
Set(PROPELLER_ROD_RADIUS, 0.0f);
269 glNormal3f(0.0f, 0.0f, -1.0f);
270 for(GLuint i = 0; i <= m_unVertices; i++) {
271 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), PROPELLER_ROD_BOTTOM);
277 cVertex.
Set(PROPELLER_BLADE_RADIUS, 0.0f);
279 glDisable(GL_CULL_FACE);
281 glNormal3f(0.0f, 0.0f, 1.0f);
282 for(GLuint i = 0; i <= m_unVertices; i++) {
283 glVertex3f(cVertex.
GetX(), cVertex.
GetY(), PROPELLER_BLADE_ELEVATION);
287 glEnable(GL_CULL_FACE);
300 m_cModel.
Draw(c_entity);