31 wxASSERT( aSize > 0.0f );
33 SFVEC3F vec = aTargetPos - aPosition;
34 float length = glm::length( vec );
36 GLUquadricObj *quadObj;
40 glTranslatef( aPosition.x, aPosition.y, aPosition.z );
42 if( ( vec.x != 0.0f ) || ( vec.y != 0.0f ) )
44 glRotatef( atan2( vec.y, vec.x ) /
RADPERDEG, 0.0f, 0.0f, 1.0f );
45 glRotatef( atan2( sqrt( vec.x * vec.x + vec.y * vec.y ), vec.z ) /
RADPERDEG,
49 else if( vec.z < 0.0f )
51 glRotatef( 180.0f, 1.0f, 0.0f, 0.0f );
54 glTranslatef( 0.0f, 0.0f, length - 4.0f * aSize );
56 quadObj = gluNewQuadric();
57 gluQuadricDrawStyle( quadObj, GLU_FILL );
58 gluQuadricNormals( quadObj, GLU_SMOOTH );
59 gluCylinder( quadObj, 2.0 * aSize, 0.0, 4.0 * aSize, 12, 1 );
60 gluDeleteQuadric( quadObj );
62 quadObj = gluNewQuadric();
63 gluQuadricDrawStyle( quadObj, GLU_FILL );
64 gluQuadricNormals( quadObj, GLU_SMOOTH );
65 gluDisk( quadObj, 0.0, 2.0 * aSize, 12, 1 );
66 gluDeleteQuadric( quadObj );
68 quadObj = gluNewQuadric();
69 gluQuadricDrawStyle( quadObj, GLU_FILL );
70 gluQuadricNormals( quadObj, GLU_SMOOTH );
71 gluDisk( quadObj, 0.0, aSize, 12, 1 );
72 gluDeleteQuadric( quadObj );
75 quadObj = gluNewQuadric();
76 gluQuadricDrawStyle( quadObj, GLU_FILL );
77 gluQuadricNormals( quadObj, GLU_SMOOTH );
78 gluSphere( quadObj, aSize, 24, 24 );
79 gluDeleteQuadric( quadObj );
81 glTranslatef( 0.0f , 0.0f ,-length + 4.0f * aSize );
83 quadObj = gluNewQuadric();
84 gluQuadricDrawStyle( quadObj, GLU_FILL );
85 gluQuadricNormals( quadObj, GLU_SMOOTH );
86 gluCylinder( quadObj, aSize, aSize, length - 4.0 * aSize, 12, 1 );
87 gluDeleteQuadric( quadObj );
89 quadObj = gluNewQuadric();
90 gluQuadricDrawStyle( quadObj, GLU_FILL );
91 gluQuadricNormals( quadObj, GLU_SMOOTH );
92 gluDisk( quadObj, 0.0, aSize, 12, 1 );
93 gluDeleteQuadric( quadObj );
141 if( aNrSidesPerCircle > 1 )
143 const float radius = 0.5f;
147 glNormal3f( 0.0f, 0.0f,-1.0f );
148 glBegin( GL_TRIANGLE_FAN );
149 glVertex3f( 0.0, 0.0, 0.0 );
155 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 0.0 );
158 glVertex3d( 0.0, -
radius, 0.0 );
162 glNormal3f( 0.0f, 0.0f, 1.0f );
163 glBegin( GL_TRIANGLE_FAN );
164 glVertex3f( 0.0, 0.0, 1.0 );
171 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 1.0 );
174 glVertex3f( 0.0,
radius, 1.0 );
178 glBegin( GL_QUAD_STRIP );
185 glNormal3f(
static_cast<GLfloat
>( corner.x * 2.0f ),
186 static_cast<GLfloat
>( corner.y * 2.0f ), 0.0f );
187 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 1.0f );
188 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 0.0f );
191 glNormal3f( 0.0, 1.0f, 0.0f );
192 glVertex3d( 0.0,
radius, 1.0 );
193 glVertex3d( 0.0,
radius, 0.0 );
206 const float width = aSegment.
GetWidth();
207 const float length = aSegment.
GetLength();
209 glTranslatef( start.x, start.y, 0.0f );
211 if( ( end_minus_start.x != 0.0f ) || ( end_minus_start.y != 0.0f ) )
213 glRotatef( atan2( end_minus_start.y, end_minus_start.x ) /
RADPERDEG, 0.0f, 0.0f, 1.0f );
217 glTranslatef( length, 0.0, 0.0f );
218 glScalef( width, width, 1.0f );
223 glNormal3f( 0.0,-1.0, 0.0 );
224 glVertex3f( length,-
radius, 1.0 );
225 glVertex3f( 0.0, -
radius, 1.0 );
226 glVertex3f( 0.0, -
radius, 0.0 );
227 glVertex3f( length,-
radius, 0.0 );
231 glNormal3f( 0.0, 1.0, 0.0 );
232 glVertex3f( length,
radius, 0.0 );
233 glVertex3f( 0.0,
radius, 0.0 );
234 glVertex3f( 0.0,
radius, 1.0 );
235 glVertex3f( length,
radius, 1.0 );
239 glNormal3f( 0.0, 0.0, 1.0 );
240 glVertex3f( length,
radius, 1.0 );
241 glVertex3f( 0.0,
radius, 1.0 );
242 glVertex3f( 0.0, -
radius, 1.0 );
243 glVertex3f( length,-
radius, 1.0 );
247 glNormal3f( 0.0, 0.0,-1.0 );
248 glVertex3f( length,-
radius, 0.0 );
249 glVertex3f( 0.0, -
radius, 0.0 );
250 glVertex3f( 0.0,
radius, 0.0 );
251 glVertex3f( length,
radius, 0.0 );
254 glScalef( width, width, 1.0f );
255 glRotatef( 180, 0.0, 0.0, 1.0 );