Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/physics/src/ogreode/OgreOdeDebugObject.cpp @ 2036

Last change on this file since 2036 was 1923, checked in by rgrieder, 16 years ago

Cleaned up the heavy mess with header file includes in OgreOde. It should now compile a lot faster.

  • Property svn:eol-style set to native
File size: 22.0 KB
Line 
1#include "OgreOdePrecompiledHeaders.h"
2#include "OgreOdeDebugObject.h"
3
4#include <OgreMaterialManager.h>
5#include <OgreTechnique.h>
6#include <OgreCamera.h>
7#include <OgreHardwareBufferManager.h>
8
9using namespace OgreOde;
10using namespace Ogre;
11
12//------------------------------------------------------------------------------------------------
13bool DebugLines::_materials_created = false;
14//------------------------------------------------------------------------------------------------
15DebugLines::DebugLines() : SimpleRenderable()
16{
17        mRenderOp.vertexData = new Ogre::VertexData();
18   _drawn = false;
19
20        if (!_materials_created)
21        {
22                MaterialPtr red = MaterialManager::getSingleton().create("OgreOdeDebugLines/Disabled","OgreOde");
23                MaterialPtr green = MaterialManager::getSingleton().create("OgreOdeDebugLines/Enabled","OgreOde");
24                MaterialPtr blue = MaterialManager::getSingleton().create("OgreOdeDebugLines/Static","OgreOde");
25
26        red->setReceiveShadows(false);
27                red->getTechnique(0)->setLightingEnabled(true);
28                red->getTechnique(0)->getPass(0)->setSelfIllumination(1,0,0);
29
30        green->setReceiveShadows(false);
31                green->getTechnique(0)->setLightingEnabled(true);
32                green->getTechnique(0)->getPass(0)->setSelfIllumination(0,1,0);
33
34        blue->setReceiveShadows(false);
35                blue->getTechnique(0)->setLightingEnabled(true);
36                blue->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,1);
37
38                _materials_created = true;
39        }
40    setCastShadows (false);
41        this->setMaterial("OgreOdeDebugLines/Enabled");
42}
43
44
45//------------------------------------------------------------------------------------------------
46void DebugLines::clear()
47{
48        if (_drawn)
49        {
50                _drawn = false;
51                _points.clear();
52                delete mRenderOp.vertexData;
53
54                mRenderOp.vertexData = new Ogre::VertexData();
55        }
56}
57//------------------------------------------------------------------------------------------------
58DebugLines::~DebugLines(void)
59{
60   clear();
61
62   delete mRenderOp.vertexData;
63}
64//------------------------------------------------------------------------------------------------
65void DebugLines::draw()
66{
67   if (_drawn) 
68       return;
69   else 
70       _drawn = true;
71
72   // Initialization stuff
73   mRenderOp.indexData = 0;
74   mRenderOp.vertexData->vertexCount = _points.size();
75   mRenderOp.vertexData->vertexStart = 0;
76   mRenderOp.operationType = RenderOperation::OT_LINE_LIST;
77   mRenderOp.useIndexes = false;
78
79   Ogre::VertexDeclaration *decl = mRenderOp.vertexData->vertexDeclaration;
80   Ogre::VertexBufferBinding *bind = mRenderOp.vertexData->vertexBufferBinding;
81
82   decl->addElement(0, 0, VET_FLOAT3, VES_POSITION);
83
84   HardwareVertexBufferSharedPtr vbuf =
85           HardwareBufferManager::getSingleton().createVertexBuffer(
86         decl->getVertexSize(0),
87         mRenderOp.vertexData->vertexCount,
88                 HardwareBuffer::HBU_STATIC_WRITE_ONLY);
89
90   bind->setBinding(0, vbuf);
91
92   // Drawing stuff
93   unsigned int size = (unsigned int)_points.size();
94   Ogre::Vector3 vaabMin = _points[0];
95   Ogre::Vector3 vaabMax = _points[0];
96
97   float *prPos = static_cast<float*>(vbuf->lock(HardwareBuffer::HBL_DISCARD));
98
99   for(unsigned int i = 0; i < size; i++)
100   {
101      *prPos++ = _points[i].x;
102      *prPos++ = _points[i].y;
103      *prPos++ = _points[i].z;
104
105      if (_points[i].x < vaabMin.x)
106         vaabMin.x = _points[i].x;
107      if (_points[i].y < vaabMin.y)
108         vaabMin.y = _points[i].y;
109      if (_points[i].z < vaabMin.z)
110         vaabMin.z = _points[i].z;
111
112      if (_points[i].x > vaabMax.x)
113         vaabMax.x = _points[i].x;
114      if (_points[i].y > vaabMax.y)
115         vaabMax.y = _points[i].y;
116      if (_points[i].z > vaabMax.z)
117         vaabMax.z = _points[i].z;
118   }
119
120   vbuf->unlock();
121
122   mBox.setExtents(vaabMin, vaabMax);
123}
124//------------------------------------------------------------------------------------------------
125Real DebugLines::getSquaredViewDepth(const Camera *cam) const
126{
127        Vector3 vMin, vMax, vMid, vDist;
128        vMin = mBox.getMinimum();
129        vMax = mBox.getMaximum();
130        vMid = ((vMin - vMax) * 0.5) + vMin;
131        vDist = cam->getDerivedPosition() - vMid;
132
133        return vDist.squaredLength();
134}
135//------------------------------------------------------------------------------------------------
136Real DebugLines::getBoundingRadius() const
137{
138        return Math::Sqrt(std::max(mBox.getMaximum().squaredLength(), mBox.getMinimum().squaredLength()));
139}
140//------------------------------------------------------------------------------------------------
141DebugObject::DebugObject(DebugObject::Mode mode) 
142{
143        _mode = DebugObject::Mode_Unknown;
144        setMode(mode);
145}
146//------------------------------------------------------------------------------------------------
147void DebugObject::setMode(DebugObject::Mode mode)
148{
149        if (mode != _mode)
150        {
151                _mode = mode;
152                switch(_mode)
153                {
154                        case DebugObject::Mode_Enabled:
155                                setMaterial("OgreOdeDebugLines/Enabled");
156                        break;
157
158                        case DebugObject::Mode_Disabled:
159                                setMaterial("OgreOdeDebugLines/Disabled");
160
161                        break;
162
163                        case DebugObject::Mode_Static:
164                                setMaterial("OgreOdeDebugLines/Static");
165                        break;
166
167                        case DebugObject::Mode_Unknown:
168                                // don't do anything. Not handled.
169                        break;
170                }
171        }
172}
173//------------------------------------------------------------------------------------------------
174DebugObject::~DebugObject() 
175{
176}
177//------------------------------------------------------------------------------------------------
178BoxDebugObject::BoxDebugObject(const Ogre::Vector3& size):DebugObject()
179{
180        AxisAlignedBox aabb(-size.x * 0.5,-size.y * 0.5,-size.z * 0.5,
181                                                size.x * 0.5,size.y * 0.5,size.z * 0.5);
182
183        Vector3 vmax = aabb.getMaximum();
184        Vector3 vmin = aabb.getMinimum();
185
186        addLine(vmin.x,vmin.y,vmin.z,vmax.x,vmin.y,vmin.z);
187        addLine(vmin.x,vmin.y,vmin.z,vmin.x,vmin.y,vmax.z);
188        addLine(vmin.x,vmin.y,vmin.z,vmin.x,vmax.y,vmin.z);
189        addLine(vmin.x,vmax.y,vmin.z,vmin.x,vmax.y,vmax.z);
190        addLine(vmin.x,vmax.y,vmin.z,vmax.x,vmax.y,vmin.z);
191        addLine(vmax.x,vmin.y,vmin.z,vmax.x,vmin.y,vmax.z);
192        addLine(vmax.x,vmin.y,vmin.z,vmax.x,vmax.y,vmin.z);
193        addLine(vmin.x,vmax.y,vmax.z,vmax.x,vmax.y,vmax.z);
194        addLine(vmin.x,vmax.y,vmax.z,vmin.x,vmin.y,vmax.z);
195        addLine(vmax.x,vmax.y,vmin.z,vmax.x,vmax.y,vmax.z);
196        addLine(vmax.x,vmin.y,vmax.z,vmax.x,vmax.y,vmax.z);
197        addLine(vmin.x,vmin.y,vmax.z,vmax.x,vmin.y,vmax.z);
198
199        draw();
200}
201//------------------------------------------------------------------------------------------------
202BoxDebugObject::~BoxDebugObject()
203{
204}
205//------------------------------------------------------------------------------------------------
206SphereDebugObject::SphereDebugObject(Real radius):DebugObject()
207{
208        // X/Y axis
209
210        // NW quadrant
211        addLine(-radius,                        0.0,                            0.0,
212        -0.866 * radius,        0.5 * radius,           0.0);
213
214        addLine(-0.866 * radius,        0.5 * radius,           0.0,
215        -0.5 * radius,  0.866 * radius, 0.0);
216
217        addLine(-0.5 * radius,  0.866 * radius, 0.0,
218        0.0,                            radius,                 0.0);
219
220        // NE quadrant
221        addLine(0.0,                            radius,                 0.0,
222        0.5 * radius,           0.866 * radius, 0.0);
223
224        addLine(0.5 * radius,           0.866 * radius, 0.0,
225        0.866 * radius, 0.5 * radius,           0.0);
226
227        addLine(0.866 * radius, 0.5 * radius,           0.0,
228        radius,                 0.0,                            0.0);
229
230        // SW quadrant
231        addLine(-radius,                        0.0,                            0.0,
232        -0.866 * radius,        -0.5 * radius,  0.0);
233
234        addLine(-0.866 * radius,        -0.5 * radius,  0.0,
235        -0.5 * radius,  -0.866 * radius,        0.0);
236
237        addLine(-0.5 * radius,  -0.866 * radius,        0.0,
238        0.0,                            -radius,                        0.0);
239
240        // SE quadrant
241        addLine(0.0,                            -radius,                        0.0,
242        0.5 * radius,           -0.866 * radius,        0.0);
243
244        addLine(0.5 * radius,           -0.866 * radius,        0.0,
245        0.866 * radius, -0.5 * radius,  0.0);
246
247        addLine(0.866 * radius, -0.5 * radius,  0.0,
248        radius,                 0.0,                            0.0);
249
250        // X/Z axis
251
252        // NW quadrant
253        addLine(-radius,                        0.0,    0.0,   
254        -0.866 * radius,        0.0,    0.5 * radius);
255
256        addLine(-0.866 * radius,        0.0,    0.5 * radius,
257        -0.5 * radius,  0.0,    0.866 * radius);
258
259        addLine(-0.5 * radius,  0.0,    0.866 * radius,
260        0.0,                            0.0,    radius);
261
262        // NE quadrant
263        addLine(0.0,                            0.0,    radius,
264        0.5 * radius,           0.0,    0.866 * radius);
265
266        addLine(0.5 * radius,           0.0,    0.866 * radius,
267        0.866 * radius, 0.0,    0.5 * radius);
268
269        addLine(0.866 * radius, 0.0,    0.5 * radius,
270        radius,                 0.0,    0.0);
271
272        // SW quadrant
273        addLine(-radius,                        0.0,    0.0,   
274        -0.866 * radius,        0.0,    -0.5 * radius);
275
276        addLine(-0.866 * radius,        0.0,    -0.5 * radius,
277        -0.5 * radius,  0.0,    -0.866 * radius);
278
279        addLine(-0.5 * radius,  0.0,    -0.866 * radius,
280        0.0,                            0.0,    -radius);
281
282        // SE quadrant
283        addLine(0.0,                            0.0,    -radius,
284        0.5 * radius,           0.0,    -0.866 * radius);
285
286        addLine(0.5 * radius,           0.0,    -0.866 * radius,
287        0.866 * radius, 0.0,    -0.5 * radius);
288
289        addLine(0.866 * radius, 0.0,    -0.5 * radius,
290        radius,                 0.0,    0.0);
291
292        // Y/Z axis
293
294        // NW quadrant
295        addLine(0.0,    -radius,                        0.0,   
296        0.0,    -0.866 * radius,        0.5 * radius);
297
298        addLine(0.0,    -0.866 * radius,        0.5 * radius,
299        0.0,    -0.5 * radius,  0.866 * radius);
300
301        addLine(0.0,    -0.5 * radius,  0.866 * radius,
302        0.0,    0.0,                            radius);
303
304        // NE quadrant
305        addLine(0.0,    0.0,                            radius,
306        0.0,    0.5 * radius,           0.866 * radius);
307
308        addLine(0.0,    0.5 * radius,           0.866 * radius,
309        0.0,    0.866 * radius, 0.5 * radius);
310
311        addLine(0.0,    0.866 * radius, 0.5 * radius,
312        0.0,    radius,                 0.0);
313
314        // SW quadrant
315        addLine(0.0,    -radius,                        0.0,   
316        0.0,    -0.866 * radius,        -0.5 * radius);
317
318        addLine(0.0,    -0.866 * radius,        -0.5 * radius,
319        0.0,    -0.5 * radius,  -0.866 * radius);
320
321        addLine(0.0,    -0.5 * radius,  -0.866 * radius,
322        0.0,    0.0,                            -radius);
323
324        // SE quadrant
325        addLine(0.0,    0.0,                            -radius,
326        0.0,    0.5 * radius,           -0.866 * radius);
327
328        addLine(0.0,    0.5 * radius,           -0.866 * radius,
329        0.0,    0.866 * radius, -0.5 * radius);
330
331        addLine(0.0,    0.866 * radius, -0.5 * radius,
332        0.0,    radius,                 0.0);
333
334        draw();
335}
336//------------------------------------------------------------------------------------------------
337SphereDebugObject::~SphereDebugObject()
338{
339}
340//------------------------------------------------------------------------------------------------
341CapsuleDebugObject::CapsuleDebugObject(Real radius,Real length):DebugObject()
342{
343        Real halflen = length * 0.5;
344        AxisAlignedBox aabb(-radius,-radius,-(halflen + radius),radius,radius,halflen + radius);
345
346        // X/Y axis - Near
347
348        // NW quadrant
349        addLine(-radius,                        0.0,                            halflen,
350        -0.866 * radius,        0.5 * radius,           halflen);
351
352        addLine(-0.866 * radius,        0.5 * radius,           halflen,
353                -0.5 * radius,  0.866 * radius, halflen);
354
355        addLine(-0.5 * radius,  0.866 * radius, halflen,
356        0.0,                            radius,                 halflen);
357
358        // NE quadrant
359        addLine(0.0,                            radius,                 halflen,
360                0.5 * radius,           0.866 * radius, halflen);
361
362        addLine(0.5 * radius,           0.866 * radius, halflen,
363        0.866 * radius, 0.5 * radius,           halflen);
364
365        addLine(0.866 * radius, 0.5 * radius,           halflen,
366        radius,                 0.0,                            halflen);
367
368        // SW quadrant
369        addLine(-radius,                        0.0,                            halflen,
370        -0.866 * radius,        -0.5 * radius,  halflen);
371
372        addLine(-0.866 * radius,        -0.5 * radius,  halflen,
373        -0.5 * radius,  -0.866 * radius,        halflen);
374
375        addLine(-0.5 * radius,  -0.866 * radius,        halflen,
376        0.0,                            -radius,                        halflen);
377
378        // SE quadrant
379        addLine(0.0,                            -radius,                        halflen,
380        0.5 * radius,           -0.866 * radius,        halflen);
381
382        addLine(0.5 * radius,           -0.866 * radius,        halflen,
383        0.866 * radius, -0.5 * radius,  halflen);
384
385        addLine(0.866 * radius, -0.5 * radius,  halflen,
386        radius,                 0.0,                            halflen);
387       
388        // X/Y axis - Far
389
390        // NW quadrant
391        addLine(-radius,                        0.0,                            -halflen,
392        -0.866 * radius,        0.5 * radius,           -halflen);
393
394        addLine(-0.866 * radius,        0.5 * radius,           -halflen,
395        -0.5 * radius,  0.866 * radius, -halflen);
396
397        addLine(-0.5 * radius,  0.866 * radius, -halflen,
398        0.0,                            radius,                 -halflen);
399
400        // NE quadrant
401        addLine(0.0,                            radius,                 -halflen,
402        0.5 * radius,           0.866 * radius, -halflen);
403
404        addLine(0.5 * radius,           0.866 * radius, -halflen,
405        0.866 * radius, 0.5 * radius,           -halflen);
406
407        addLine(0.866 * radius, 0.5 * radius,           -halflen,
408        radius,                 0.0,                            -halflen);
409
410        // SW quadrant
411        addLine(-radius,                        0.0,                            -halflen,
412        -0.866 * radius,        -0.5 * radius,  -halflen);
413
414        addLine(-0.866 * radius,        -0.5 * radius,  -halflen,
415        -0.5 * radius,  -0.866 * radius,        -halflen);
416
417        addLine(-0.5 * radius,  -0.866 * radius,        -halflen,
418        0.0,                            -radius,                        -halflen);
419
420        // SE quadrant
421        addLine(0.0,                            -radius,                        -halflen,
422        0.5 * radius,           -0.866 * radius,        -halflen);
423
424        addLine(0.5 * radius,           -0.866 * radius,        -halflen,
425        0.866 * radius, -0.5 * radius,  -halflen);
426
427        addLine(0.866 * radius, -0.5 * radius,  -halflen,
428        radius,                 0.0,                            -halflen);
429
430        // X/Z axis
431
432        // NW quadrant
433        addLine(-radius,                        0.0,    halflen,       
434        -0.866 * radius,        0.0,    (0.5 * radius) + halflen);
435
436        addLine(-0.866 * radius,        0.0,    (0.5 * radius) + halflen,
437        -0.5 * radius,  0.0,    (0.866 * radius) + halflen);
438
439        addLine(-0.5 * radius,  0.0,    (0.866 * radius) + halflen,
440        0.0,                            0.0,    radius + halflen);
441
442        // NE quadrant
443        addLine(0.0,                            0.0,    radius + halflen,
444        0.5 * radius,           0.0,    (0.866 * radius) + halflen);
445
446        addLine(0.5 * radius,           0.0,    (0.866 * radius) + halflen,
447        0.866 * radius, 0.0,    (0.5 * radius) + halflen);
448
449        addLine(0.866 * radius, 0.0,    (0.5 * radius) + halflen,
450        radius,                 0.0,    halflen);
451
452        // SW quadrant
453        addLine(-radius,                        0.0,    -halflen,       
454        -0.866 * radius,        0.0,    (-0.5 * radius) - halflen);
455
456        addLine(-0.866 * radius,        0.0,    (-0.5 * radius) - halflen,
457        -0.5 * radius,  0.0,    (-0.866 * radius) - halflen);
458
459        addLine(-0.5 * radius,  0.0,    (-0.866 * radius) - halflen,
460        0.0,                            0.0,    -radius - halflen);
461
462        // SE quadrant
463        addLine(0.0,                            0.0,    -radius - halflen,
464        0.5 * radius,           0.0,    (-0.866 * radius) - halflen);
465
466        addLine(0.5 * radius,           0.0,    (-0.866 * radius) - halflen,
467        0.866 * radius, 0.0,    (-0.5 * radius) - halflen);
468
469        addLine(0.866 * radius, 0.0,    (-0.5 * radius) - halflen,
470        radius,                 0.0,    - halflen);
471
472        // Y/Z axis
473
474        // NW quadrant
475        addLine(0.0,    -radius,                        halflen,       
476        0.0,    -0.866 * radius,        (0.5 * radius) + halflen);
477
478        addLine(0.0,    -0.866 * radius,        (0.5 * radius) + halflen,
479        0.0,    -0.5 * radius,  (0.866 * radius) + halflen);
480
481        addLine(0.0,    -0.5 * radius,  (0.866 * radius) + halflen,
482        0.0,    0.0,                            radius + halflen);
483
484        // NE quadrant
485        addLine(0.0,    0.0,                            radius + halflen,
486        0.0,    0.5 * radius,           (0.866 * radius) + halflen);
487
488        addLine(0.0,    0.5 * radius,           (0.866 * radius) + halflen,
489        0.0,    0.866 * radius, (0.5 * radius) + halflen);
490
491        addLine(0.0,    0.866 * radius, (0.5 * radius) + halflen,
492        0.0,    radius,                 halflen);
493
494        // SW quadrant
495        addLine(0.0,    -radius,                        -halflen,       
496        0.0,    -0.866 * radius,        (-0.5 * radius) - halflen);
497
498        addLine(0.0,    -0.866 * radius,        (-0.5 * radius) - halflen,
499        0.0,    -0.5 * radius,  (-0.866 * radius) - halflen);
500
501        addLine(0.0,    -0.5 * radius,  (-0.866 * radius) - halflen,
502        0.0,    0.0,                            -radius - halflen);
503
504        // SE quadrant
505        addLine(0.0,    0.0,                            -radius - halflen,
506        0.0,    0.5 * radius,           (-0.866 * radius) - halflen);
507
508        addLine(0.0,    0.5 * radius,           (-0.866 * radius) - halflen,
509        0.0,    0.866 * radius, (-0.5 * radius) - halflen);
510
511        addLine(0.0,    0.866 * radius, (-0.5 * radius) - halflen,
512        0.0,    radius,                 -halflen);
513
514        // Side lines
515        addLine(-radius,        0.0,            -halflen,
516        -radius,        0.0,            halflen);
517
518        addLine(radius, 0.0,            -halflen,
519        radius, 0.0,            halflen);
520
521        addLine(0.0,            radius, -halflen,
522        0.0,            radius, halflen);
523
524        addLine(0.0,            -radius,        -halflen,
525        0.0,            -radius,        halflen);
526
527        draw();
528}
529//------------------------------------------------------------------------------------------------
530CapsuleDebugObject::~CapsuleDebugObject()
531{
532}
533//------------------------------------------------------------------------------------------------
534CylinderDebugObject::CylinderDebugObject(Real radius,Real length):DebugObject()
535{
536        Real halflen = length * 0.5;
537        AxisAlignedBox aabb(-radius,-radius,-(halflen + radius),radius,radius,halflen + radius);
538
539        // X/Y axis - Near
540
541        // NW quadrant
542        addLine(-radius,                        0.0,                            halflen,
543                -0.866 * radius,        0.5 * radius,           halflen);
544
545        addLine(-0.866 * radius,        0.5 * radius,           halflen,
546                -0.5 * radius,  0.866 * radius, halflen);
547
548        addLine(-0.5 * radius,  0.866 * radius, halflen,
549                0.0,                            radius,                 halflen);
550
551        // NE quadrant
552        addLine(0.0,                            radius,                 halflen,
553                0.5 * radius,           0.866 * radius, halflen);
554
555        addLine(0.5 * radius,           0.866 * radius, halflen,
556                0.866 * radius, 0.5 * radius,           halflen);
557
558        addLine(0.866 * radius, 0.5 * radius,           halflen,
559                radius,                 0.0,                            halflen);
560
561        // SW quadrant
562        addLine(-radius,                        0.0,                            halflen,
563                -0.866 * radius,        -0.5 * radius,  halflen);
564
565        addLine(-0.866 * radius,        -0.5 * radius,  halflen,
566                -0.5 * radius,  -0.866 * radius,        halflen);
567
568        addLine(-0.5 * radius,  -0.866 * radius,        halflen,
569                0.0,                            -radius,                        halflen);
570
571        // SE quadrant
572        addLine(0.0,                            -radius,                        halflen,
573                0.5 * radius,           -0.866 * radius,        halflen);
574
575        addLine(0.5 * radius,           -0.866 * radius,        halflen,
576                0.866 * radius, -0.5 * radius,  halflen);
577
578        addLine(0.866 * radius, -0.5 * radius,  halflen,
579                radius,                 0.0,                            halflen);
580
581        // X/Y axis - Far
582
583        // NW quadrant
584        addLine(-radius,                        0.0,                            -halflen,
585                -0.866 * radius,        0.5 * radius,           -halflen);
586
587        addLine(-0.866 * radius,        0.5 * radius,           -halflen,
588                -0.5 * radius,  0.866 * radius, -halflen);
589
590        addLine(-0.5 * radius,  0.866 * radius, -halflen,
591                0.0,                            radius,                 -halflen);
592
593        // NE quadrant
594        addLine(0.0,                            radius,                 -halflen,
595                0.5 * radius,           0.866 * radius, -halflen);
596
597        addLine(0.5 * radius,           0.866 * radius, -halflen,
598                0.866 * radius, 0.5 * radius,           -halflen);
599
600        addLine(0.866 * radius, 0.5 * radius,           -halflen,
601                radius,                 0.0,                            -halflen);
602
603        // SW quadrant
604        addLine(-radius,                        0.0,                            -halflen,
605                -0.866 * radius,        -0.5 * radius,  -halflen);
606
607        addLine(-0.866 * radius,        -0.5 * radius,  -halflen,
608                -0.5 * radius,  -0.866 * radius,        -halflen);
609
610        addLine(-0.5 * radius,  -0.866 * radius,        -halflen,
611                0.0,                            -radius,                        -halflen);
612
613        // SE quadrant
614        addLine(0.0,                            -radius,                        -halflen,
615                0.5 * radius,           -0.866 * radius,        -halflen);
616
617        addLine(0.5 * radius,           -0.866 * radius,        -halflen,
618                0.866 * radius, -0.5 * radius,  -halflen);
619
620        addLine(0.866 * radius, -0.5 * radius,  -halflen,
621                radius,                 0.0,                            -halflen);
622
623        // X/Z axis
624
625        // NW quadrant
626        addLine(-radius,                        0.0,    halflen,       
627                -0.866 * radius,        0.0,    (0.5 * radius) + halflen);
628
629        addLine(-0.866 * radius,        0.0,    (0.5 * radius) + halflen,
630                -0.5 * radius,  0.0,    (0.866 * radius) + halflen);
631
632        addLine(-0.5 * radius,  0.0,    (0.866 * radius) + halflen,
633                0.0,                            0.0,    radius + halflen);
634
635        // NE quadrant
636        addLine(0.0,                            0.0,    radius + halflen,
637                0.5 * radius,           0.0,    (0.866 * radius) + halflen);
638
639        addLine(0.5 * radius,           0.0,    (0.866 * radius) + halflen,
640                0.866 * radius, 0.0,    (0.5 * radius) + halflen);
641
642        addLine(0.866 * radius, 0.0,    (0.5 * radius) + halflen,
643                radius,                 0.0,    halflen);
644
645        // SW quadrant
646        addLine(-radius,                        0.0,    -halflen,       
647                -0.866 * radius,        0.0,    (-0.5 * radius) - halflen);
648
649        addLine(-0.866 * radius,        0.0,    (-0.5 * radius) - halflen,
650                -0.5 * radius,  0.0,    (-0.866 * radius) - halflen);
651
652        addLine(-0.5 * radius,  0.0,    (-0.866 * radius) - halflen,
653                0.0,                            0.0,    -radius - halflen);
654
655        // SE quadrant
656        addLine(0.0,                            0.0,    -radius - halflen,
657                0.5 * radius,           0.0,    (-0.866 * radius) - halflen);
658
659        addLine(0.5 * radius,           0.0,    (-0.866 * radius) - halflen,
660                0.866 * radius, 0.0,    (-0.5 * radius) - halflen);
661
662        addLine(0.866 * radius, 0.0,    (-0.5 * radius) - halflen,
663                radius,                 0.0,    - halflen);
664
665        // Y/Z axis
666
667        // NW quadrant
668        addLine(0.0,    -radius,                        halflen,       
669                0.0,    -0.866 * radius,        (0.5 * radius) + halflen);
670
671        addLine(0.0,    -0.866 * radius,        (0.5 * radius) + halflen,
672                0.0,    -0.5 * radius,  (0.866 * radius) + halflen);
673
674        addLine(0.0,    -0.5 * radius,  (0.866 * radius) + halflen,
675                0.0,    0.0,                            radius + halflen);
676
677        // NE quadrant
678        addLine(0.0,    0.0,                            radius + halflen,
679                0.0,    0.5 * radius,           (0.866 * radius) + halflen);
680
681        addLine(0.0,    0.5 * radius,           (0.866 * radius) + halflen,
682                0.0,    0.866 * radius, (0.5 * radius) + halflen);
683
684        addLine(0.0,    0.866 * radius, (0.5 * radius) + halflen,
685                0.0,    radius,                 halflen);
686
687        // SW quadrant
688        addLine(0.0,    -radius,                        -halflen,       
689                0.0,    -0.866 * radius,        (-0.5 * radius) - halflen);
690
691        addLine(0.0,    -0.866 * radius,        (-0.5 * radius) - halflen,
692                0.0,    -0.5 * radius,  (-0.866 * radius) - halflen);
693
694        addLine(0.0,    -0.5 * radius,  (-0.866 * radius) - halflen,
695                0.0,    0.0,                            -radius - halflen);
696
697        // SE quadrant
698        addLine(0.0,    0.0,                            -radius - halflen,
699                0.0,    0.5 * radius,           (-0.866 * radius) - halflen);
700
701        addLine(0.0,    0.5 * radius,           (-0.866 * radius) - halflen,
702                0.0,    0.866 * radius, (-0.5 * radius) - halflen);
703
704        addLine(0.0,    0.866 * radius, (-0.5 * radius) - halflen,
705                0.0,    radius,                 -halflen);
706
707        // Side lines
708        addLine(-radius,        0.0,            -halflen,
709                -radius,        0.0,            halflen);
710
711        addLine(radius, 0.0,            -halflen,
712                radius, 0.0,            halflen);
713
714        addLine(0.0,            radius, -halflen,
715                0.0,            radius, halflen);
716
717        addLine(0.0,            -radius,        -halflen,
718                0.0,            -radius,        halflen);
719
720        draw();
721}
722//------------------------------------------------------------------------------------------------
723CylinderDebugObject::~CylinderDebugObject()
724{
725}
726//------------------------------------------------------------------------------------------------
727TriangleMeshDebugObject::TriangleMeshDebugObject(int vertex_count):DebugObject()
728{
729    _points.reserve(vertex_count); 
730    _points.resize(vertex_count); 
731}
732//------------------------------------------------------------------------------------------------
733void TriangleMeshDebugObject::beginDefinition()
734{
735}
736//------------------------------------------------------------------------------------------------
737void TriangleMeshDebugObject::setVertex(int index,const Ogre::Vector3& vertex)
738{
739    assert ((unsigned int)index < _points.size());
740        _points[index] = vertex;
741}
742//------------------------------------------------------------------------------------------------
743void TriangleMeshDebugObject::endDefinition()
744{
745        draw();
746}
747//------------------------------------------------------------------------------------------------
748TriangleMeshDebugObject::~TriangleMeshDebugObject()
749{
750}
751//------------------------------------------------------------------------------------------------
752RayDebugObject::RayDebugObject(const Ogre::Vector3& start,
753                                                           const Ogre::Vector3& direction,
754                                                           const Ogre::Real length):
755DebugObject()
756{
757
758        Ogre::Vector3 end;
759
760        if(length == Ogre::Math::POS_INFINITY)
761        {
762                end = (start + (direction.normalisedCopy() * 100000.0));
763        }
764        else
765        {
766                end = (start + (direction.normalisedCopy() * length));
767        }
768
769        addLine(start, end);
770
771        draw();
772} 
773void RayDebugObject::setDefinition(const Ogre::Vector3& start,
774                                                                   const Ogre::Vector3& direction,
775                                                                   const Ogre::Real length)
776{
777        clear();
778
779        Ogre::Vector3 end;
780
781        if(length == Ogre::Math::POS_INFINITY)
782        {
783                end = (start + (direction.normalisedCopy() * 100000.0));
784        }
785        else
786        {
787                end = (start + (direction.normalisedCopy() * length));
788        }
789
790        addLine(start, end);
791
792        draw();
793} 
794//------------------------------------------------------------------------------------------------
795RayDebugObject::~RayDebugObject()
796{
797}
798//------------------------------------------------------------------------------------------------
799
Note: See TracBrowser for help on using the repository browser.