35 wxASSERT( aSize > 0.0f );
37 SFVEC3F vec = aTargetPos - aPosition;
38 float length = glm::length( vec );
40 GLUquadricObj *quadObj;
44 glTranslatef( aPosition.x, aPosition.y, aPosition.z );
46 if( ( vec.x != 0.0f ) || ( vec.y != 0.0f ) )
48 glRotatef( atan2( vec.y, vec.x ) /
RADPERDEG, 0.0f, 0.0f, 1.0f );
49 glRotatef( atan2( sqrt( vec.x * vec.x + vec.y * vec.y ), vec.z ) /
RADPERDEG,
53 else if( vec.z < 0.0f )
55 glRotatef( 180.0f, 1.0f, 0.0f, 0.0f );
58 glTranslatef( 0.0f, 0.0f, length - 4.0f * aSize );
60 quadObj = gluNewQuadric();
61 gluQuadricDrawStyle( quadObj, GLU_FILL );
62 gluQuadricNormals( quadObj, GLU_SMOOTH );
63 gluCylinder( quadObj, 2.0 * aSize, 0.0, 4.0 * aSize, 12, 1 );
64 gluDeleteQuadric( quadObj );
66 quadObj = gluNewQuadric();
67 gluQuadricDrawStyle( quadObj, GLU_FILL );
68 gluQuadricNormals( quadObj, GLU_SMOOTH );
69 gluDisk( quadObj, 0.0, 2.0 * aSize, 12, 1 );
70 gluDeleteQuadric( quadObj );
72 quadObj = gluNewQuadric();
73 gluQuadricDrawStyle( quadObj, GLU_FILL );
74 gluQuadricNormals( quadObj, GLU_SMOOTH );
75 gluDisk( quadObj, 0.0, aSize, 12, 1 );
76 gluDeleteQuadric( quadObj );
79 quadObj = gluNewQuadric();
80 gluQuadricDrawStyle( quadObj, GLU_FILL );
81 gluQuadricNormals( quadObj, GLU_SMOOTH );
82 gluSphere( quadObj, aSize, 24, 24 );
83 gluDeleteQuadric( quadObj );
85 glTranslatef( 0.0f , 0.0f ,-length + 4.0f * aSize );
87 quadObj = gluNewQuadric();
88 gluQuadricDrawStyle( quadObj, GLU_FILL );
89 gluQuadricNormals( quadObj, GLU_SMOOTH );
90 gluCylinder( quadObj, aSize, aSize, length - 4.0 * aSize, 12, 1 );
91 gluDeleteQuadric( quadObj );
93 quadObj = gluNewQuadric();
94 gluQuadricDrawStyle( quadObj, GLU_FILL );
95 gluQuadricNormals( quadObj, GLU_SMOOTH );
96 gluDisk( quadObj, 0.0, aSize, 12, 1 );
97 gluDeleteQuadric( quadObj );
145 if( aNrSidesPerCircle > 1 )
147 const float radius = 0.5f;
151 glNormal3f( 0.0f, 0.0f,-1.0f );
152 glBegin( GL_TRIANGLE_FAN );
153 glVertex3f( 0.0, 0.0, 0.0 );
159 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 0.0 );
162 glVertex3d( 0.0, -
radius, 0.0 );
166 glNormal3f( 0.0f, 0.0f, 1.0f );
167 glBegin( GL_TRIANGLE_FAN );
168 glVertex3f( 0.0, 0.0, 1.0 );
175 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 1.0 );
178 glVertex3f( 0.0,
radius, 1.0 );
182 glBegin( GL_QUAD_STRIP );
189 glNormal3f(
static_cast<GLfloat
>( corner.x * 2.0f ),
190 static_cast<GLfloat
>( corner.y * 2.0f ), 0.0f );
191 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 1.0f );
192 glVertex3f(
static_cast<GLfloat
>( corner.x ),
static_cast<GLfloat
>( corner.y ), 0.0f );
195 glNormal3f( 0.0, 1.0f, 0.0f );
196 glVertex3d( 0.0,
radius, 1.0 );
197 glVertex3d( 0.0,
radius, 0.0 );
210 const float width = aSegment.
GetWidth();
211 const float length = aSegment.
GetLength();
213 glTranslatef( start.x, start.y, 0.0f );
215 if( ( end_minus_start.x != 0.0f ) || ( end_minus_start.y != 0.0f ) )
217 glRotatef( atan2( end_minus_start.y, end_minus_start.x ) /
RADPERDEG, 0.0f, 0.0f, 1.0f );
221 glTranslatef( length, 0.0, 0.0f );
222 glScalef( width, width, 1.0f );
227 glNormal3f( 0.0,-1.0, 0.0 );
228 glVertex3f( length,-
radius, 1.0 );
229 glVertex3f( 0.0, -
radius, 1.0 );
230 glVertex3f( 0.0, -
radius, 0.0 );
231 glVertex3f( length,-
radius, 0.0 );
235 glNormal3f( 0.0, 1.0, 0.0 );
236 glVertex3f( length,
radius, 0.0 );
237 glVertex3f( 0.0,
radius, 0.0 );
238 glVertex3f( 0.0,
radius, 1.0 );
239 glVertex3f( length,
radius, 1.0 );
243 glNormal3f( 0.0, 0.0, 1.0 );
244 glVertex3f( length,
radius, 1.0 );
245 glVertex3f( 0.0,
radius, 1.0 );
246 glVertex3f( 0.0, -
radius, 1.0 );
247 glVertex3f( length,-
radius, 1.0 );
251 glNormal3f( 0.0, 0.0,-1.0 );
252 glVertex3f( length,-
radius, 0.0 );
253 glVertex3f( 0.0, -
radius, 0.0 );
254 glVertex3f( 0.0,
radius, 0.0 );
255 glVertex3f( length,
radius, 0.0 );
258 glScalef( width, width, 1.0f );
259 glRotatef( 180, 0.0, 0.0, 1.0 );