MCPcopy Create free account
hub / github.com/carbonengine/trinity / AddCone

Method AddCone

trinity/TriLineSet.cpp:225–303  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

223}
224
225void TriLineSet::AddCone( const Vector3& start, const Vector3& end, float radius, int segments, uint32_t color )
226{
227 Vector3 z = start - end;
228 float length = Length( z );
229 z /= length;
230
231 Vector3 up( 0.0f, 1.0f, 0.0f );
232 if( fabs( z.y ) > 0.99f )
233 {
234 up = Vector3( 1.0f, 0.0f, 0.0f );
235 }
236
237 Vector3 x = Normalize( Cross( up, z ) );
238
239 Vector3 y = Cross( z, x );
240
241 Matrix m;
242 m._11 = x.x;
243 m._12 = x.y;
244 m._13 = x.z;
245 m._14 = 0.0f;
246
247 m._21 = y.x;
248 m._22 = y.y;
249 m._23 = y.z;
250 m._24 = 0.0f;
251
252 m._31 = z.x;
253 m._32 = z.y;
254 m._33 = z.z;
255 m._34 = 0.0f;
256
257 m._41 = end.x;
258 m._42 = end.y;
259 m._43 = end.z;
260 m._44 = 1.0f;
261
262 Matrix scale = ScalingMatrix( radius, radius, length );
263 m = scale * m;
264
265 if( segments < 4 )
266 {
267 segments = 4;
268 }
269
270 if( segments % 2 == 1 )
271 {
272 ++segments;
273 }
274
275 float step = ( XM_PI * 2.0f ) / (float)segments;
276 for( int i = 0; i < segments; ++i )
277 {
278 float x = cosf( i * step );
279 float y = sinf( i * step );
280
281 Vector3 from( x, y, 0.0f );
282 Vector3 to( 0.0f, 0.0f, 1.0f );

Callers 1

DrawConeMethod · 0.80

Calls 3

LengthFunction · 0.85
CrossFunction · 0.85
Vector3Class · 0.70

Tested by

no test coverage detected