Bullet Collision Detection & Physics Library: btGImpactShape.h Source File

Bullet Collision Detection & Physics Library

btGImpactShape.h
Go to the documentation of this file.
1
4/*
5This source file is part of GIMPACT Library.
6
7For the latest info, see http://gimpact.sourceforge.net/
8
9Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
10email: projectileman@yahoo.com
11
12
13This software is provided 'as-is', without any express or implied warranty.
14In no event will the authors be held liable for any damages arising from the use of this software.
15Permission is granted to anyone to use this software for any purpose,
16including commercial applications, and to alter it and redistribute it freely,
17subject to the following restrictions:
18
191. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
202. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
213. This notice may not be removed or altered from any source distribution.
22*/
23
24#ifndef GIMPACT_SHAPE_H
25#define GIMPACT_SHAPE_H
26
27#include "BulletCollision/CollisionShapes/btCollisionShape.h"
28#include "BulletCollision/CollisionShapes/btTriangleShape.h"
29#include "BulletCollision/CollisionShapes/btStridingMeshInterface.h"
30#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
31#include "BulletCollision/CollisionDispatch/btCollisionWorld.h"
32#include "BulletCollision/CollisionShapes/btConcaveShape.h"
33#include "BulletCollision/CollisionShapes/btTetrahedronShape.h"
34#include "LinearMath/btVector3.h"
35#include "LinearMath/btTransform.h"
36#include "LinearMath/btMatrix3x3.h"
37#include "LinearMath/btAlignedObjectArray.h"
38
39#include "btGImpactQuantizedBvh.h" // box tree class
40
42 typedef btGImpactQuantizedBvh btGImpactBoxSet;
43
44 enum eGIMPACT_SHAPE_TYPE
45{
46 CONST_GIMPACT_COMPOUND_SHAPE = 0,
47 CONST_GIMPACT_TRIMESH_SHAPE_PART,
48 CONST_GIMPACT_TRIMESH_SHAPE
49};
50
52 class btTetrahedronShapeEx : public btBU_Simplex1to4
53{
54public:
55 btTetrahedronShapeEx()
56 {
57 m_numVertices = 4;
58 }
59
60 SIMD_FORCE_INLINE void setVertices(
61 const btVector3& v0, const btVector3& v1,
62 const btVector3& v2, const btVector3& v3)
63 {
64 m_vertices[0] = v0;
65 m_vertices[1] = v1;
66 m_vertices[2] = v2;
67 m_vertices[3] = v3;
68 recalcLocalAabb();
69 }
70};
71
73 class btGImpactShapeInterface : public btConcaveShape
74{
75protected:
76 btAABB m_localAABB;
77 bool m_needs_update;
78 btVector3 localScaling;
79 btGImpactBoxSet m_box_set; // optionally boxset
80
83 virtual void calcLocalAABB()
84 {
85 lockChildShapes();
86 if (m_box_set.getNodeCount() == 0)
87 {
88 m_box_set.buildSet();
89 }
90 else
91 {
92 m_box_set.update();
93 }
94 unlockChildShapes();
95
96 m_localAABB = m_box_set.getGlobalBox();
97 }
98
99public:
100 btGImpactShapeInterface()
101 {
102 m_shapeType = GIMPACT_SHAPE_PROXYTYPE;
103 m_localAABB.invalidate();
104 m_needs_update = true;
105 localScaling.setValue(1.f, 1.f, 1.f);
106 }
107
109
115 SIMD_FORCE_INLINE void updateBound()
116 {
117 if (!m_needs_update) return;
118 calcLocalAABB();
119 m_needs_update = false;
120 }
121
123
126 void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
127 {
128 btAABB transformedbox = m_localAABB;
129 transformedbox.appy_transform(t);
130 aabbMin = transformedbox.m_min;
131 aabbMax = transformedbox.m_max;
132 }
133
135 virtual void postUpdate()
136 {
137 m_needs_update = true;
138 }
139
141 SIMD_FORCE_INLINE const btAABB& getLocalBox()
142 {
143 return m_localAABB;
144 }
145
146 virtual int getShapeType() const
147 {
148 return GIMPACT_SHAPE_PROXYTYPE;
149 }
150
154 virtual void setLocalScaling(const btVector3& scaling)
155 {
156 localScaling = scaling;
157 postUpdate();
158 }
159
160 virtual const btVector3& getLocalScaling() const
161 {
162 return localScaling;
163 }
164
165 virtual void setMargin(btScalar margin)
166 {
167 m_collisionMargin = margin;
168 int i = getNumChildShapes();
169 while (i--)
170 {
171 btCollisionShape* child = getChildShape(i);
172 child->setMargin(margin);
173 }
174
175 m_needs_update = true;
176 }
177
180
182 virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const = 0;
183
185 SIMD_FORCE_INLINE const btGImpactBoxSet* getBoxSet() const
186 {
187 return &m_box_set;
188 }
189
191 SIMD_FORCE_INLINE bool hasBoxSet() const
192 {
193 if (m_box_set.getNodeCount() == 0) return false;
194 return true;
195 }
196
198 virtual const btPrimitiveManagerBase* getPrimitiveManager() const = 0;
199
201 virtual int getNumChildShapes() const = 0;
202
204 virtual bool childrenHasTransform() const = 0;
205
207 virtual bool needsRetrieveTriangles() const = 0;
208
210 virtual bool needsRetrieveTetrahedrons() const = 0;
211
212 virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const = 0;
213
214 virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const = 0;
215
217 virtual void lockChildShapes() const
218 {
219 }
220
221 virtual void unlockChildShapes() const
222 {
223 }
224
226 SIMD_FORCE_INLINE void getPrimitiveTriangle(int index, btPrimitiveTriangle& triangle) const
227 {
228 getPrimitiveManager()->get_primitive_triangle(index, triangle);
229 }
230
232
234 virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
235 {
236 btAABB child_aabb;
237 getPrimitiveManager()->get_primitive_box(child_index, child_aabb);
238 child_aabb.appy_transform(t);
239 aabbMin = child_aabb.m_min;
240 aabbMax = child_aabb.m_max;
241 }
242
244 virtual btCollisionShape* getChildShape(int index) = 0;
245
247 virtual const btCollisionShape* getChildShape(int index) const = 0;
248
250 virtual btTransform getChildTransform(int index) const = 0;
251
253
256 virtual void setChildTransform(int index, const btTransform& transform) = 0;
257
259
261 virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btCollisionWorld::RayResultCallback& resultCallback) const
262 {
263 (void)rayFrom;
264 (void)rayTo;
265 (void)resultCallback;
266 }
267
269
272 virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
273 {
274 (void)callback;
275 (void)aabbMin;
276 (void)aabbMax;
277 }
278
280
283 virtual void processAllTrianglesRay(btTriangleCallback* /*callback*/, const btVector3& /*rayFrom*/, const btVector3& /*rayTo*/) const
284 {
285 }
286
288};
289
291
294 class btGImpactCompoundShape : public btGImpactShapeInterface
295{
296public:
298 class CompoundPrimitiveManager : public btPrimitiveManagerBase
299 {
300 public:
301 virtual ~CompoundPrimitiveManager() {}
302 btGImpactCompoundShape* m_compoundShape;
303
304 CompoundPrimitiveManager(const CompoundPrimitiveManager& compound)
305 : btPrimitiveManagerBase()
306 {
307 m_compoundShape = compound.m_compoundShape;
308 }
309
310 CompoundPrimitiveManager(btGImpactCompoundShape* compoundShape)
311 {
312 m_compoundShape = compoundShape;
313 }
314
315 CompoundPrimitiveManager()
316 {
317 m_compoundShape = NULL;
318 }
319
320 virtual bool is_trimesh() const
321 {
322 return false;
323 }
324
325 virtual int get_primitive_count() const
326 {
327 return (int)m_compoundShape->getNumChildShapes();
328 }
329
330 virtual void get_primitive_box(int prim_index, btAABB& primbox) const
331 {
332 btTransform prim_trans;
333 if (m_compoundShape->childrenHasTransform())
334 {
335 prim_trans = m_compoundShape->getChildTransform(prim_index);
336 }
337 else
338 {
339 prim_trans.setIdentity();
340 }
341 const btCollisionShape* shape = m_compoundShape->getChildShape(prim_index);
342 shape->getAabb(prim_trans, primbox.m_min, primbox.m_max);
343 }
344
345 virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const
346 {
347 btAssert(0);
348 (void)prim_index;
349 (void)triangle;
350 }
351 };
352
353protected:
354 CompoundPrimitiveManager m_primitive_manager;
355 btAlignedObjectArray<btTransform> m_childTransforms;
356 btAlignedObjectArray<btCollisionShape*> m_childShapes;
357
358public:
359 btGImpactCompoundShape(bool children_has_transform = true)
360 {
361 (void)children_has_transform;
362 m_primitive_manager.m_compoundShape = this;
363 m_box_set.setPrimitiveManager(&m_primitive_manager);
364 }
365
366 virtual ~btGImpactCompoundShape()
367 {
368 }
369
371 virtual bool childrenHasTransform() const
372 {
373 if (m_childTransforms.size() == 0) return false;
374 return true;
375 }
376
378 virtual const btPrimitiveManagerBase* getPrimitiveManager() const
379 {
380 return &m_primitive_manager;
381 }
382
384 SIMD_FORCE_INLINE CompoundPrimitiveManager* getCompoundPrimitiveManager()
385 {
386 return &m_primitive_manager;
387 }
388
390 virtual int getNumChildShapes() const
391 {
392 return m_childShapes.size();
393 }
394
396 void addChildShape(const btTransform& localTransform, btCollisionShape* shape)
397 {
398 btAssert(shape->isConvex());
399 m_childTransforms.push_back(localTransform);
400 m_childShapes.push_back(shape);
401 }
402
404 void addChildShape(btCollisionShape* shape)
405 {
406 btAssert(shape->isConvex());
407 m_childShapes.push_back(shape);
408 }
409
411 virtual btCollisionShape* getChildShape(int index)
412 {
413 return m_childShapes[index];
414 }
415
417 virtual const btCollisionShape* getChildShape(int index) const
418 {
419 return m_childShapes[index];
420 }
421
423
425 virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
426 {
427 if (childrenHasTransform())
428 {
429 m_childShapes[child_index]->getAabb(t * m_childTransforms[child_index], aabbMin, aabbMax);
430 }
431 else
432 {
433 m_childShapes[child_index]->getAabb(t, aabbMin, aabbMax);
434 }
435 }
436
438 virtual btTransform getChildTransform(int index) const
439 {
440 btAssert(m_childTransforms.size() == m_childShapes.size());
441 return m_childTransforms[index];
442 }
443
445
448 virtual void setChildTransform(int index, const btTransform& transform)
449 {
450 btAssert(m_childTransforms.size() == m_childShapes.size());
451 m_childTransforms[index] = transform;
452 postUpdate();
453 }
454
456 virtual bool needsRetrieveTriangles() const
457 {
458 return false;
459 }
460
462 virtual bool needsRetrieveTetrahedrons() const
463 {
464 return false;
465 }
466
467 virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const
468 {
469 (void)prim_index;
470 (void)triangle;
471 btAssert(0);
472 }
473
474 virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const
475 {
476 (void)prim_index;
477 (void)tetrahedron;
478 btAssert(0);
479 }
480
482 virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;
483
484 virtual const char* getName() const
485 {
486 return "GImpactCompound";
487 }
488
489 virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
490 {
491 return CONST_GIMPACT_COMPOUND_SHAPE;
492 }
493};
494
496
502 class btGImpactMeshShapePart : public btGImpactShapeInterface
503{
504public:
506
509 class TrimeshPrimitiveManager : public btPrimitiveManagerBase
510 {
511 public:
512 btScalar m_margin;
513 btStridingMeshInterface* m_meshInterface;
514 btVector3 m_scale;
515 int m_part;
516 int m_lock_count;
517 const unsigned char* vertexbase;
518 int numverts;
519 PHY_ScalarType type;
520 int stride;
521 const unsigned char* indexbase;
522 int indexstride;
523 int numfaces;
524 PHY_ScalarType indicestype;
525
526 TrimeshPrimitiveManager()
527 {
528 m_meshInterface = NULL;
529 m_part = 0;
530 m_margin = 0.01f;
531 m_scale = btVector3(1.f, 1.f, 1.f);
532 m_lock_count = 0;
533 vertexbase = 0;
534 numverts = 0;
535 stride = 0;
536 indexbase = 0;
537 indexstride = 0;
538 numfaces = 0;
539 }
540
541 TrimeshPrimitiveManager(const TrimeshPrimitiveManager& manager)
542 : btPrimitiveManagerBase()
543 {
544 m_meshInterface = manager.m_meshInterface;
545 m_part = manager.m_part;
546 m_margin = manager.m_margin;
547 m_scale = manager.m_scale;
548 m_lock_count = 0;
549 vertexbase = 0;
550 numverts = 0;
551 stride = 0;
552 indexbase = 0;
553 indexstride = 0;
554 numfaces = 0;
555 }
556
557 TrimeshPrimitiveManager(
558 btStridingMeshInterface* meshInterface, int part)
559 {
560 m_meshInterface = meshInterface;
561 m_part = part;
562 m_scale = m_meshInterface->getScaling();
563 m_margin = 0.1f;
564 m_lock_count = 0;
565 vertexbase = 0;
566 numverts = 0;
567 stride = 0;
568 indexbase = 0;
569 indexstride = 0;
570 numfaces = 0;
571 }
572
573 virtual ~TrimeshPrimitiveManager() {}
574
575 void lock()
576 {
577 if (m_lock_count > 0)
578 {
579 m_lock_count++;
580 return;
581 }
582 m_meshInterface->getLockedReadOnlyVertexIndexBase(
583 &vertexbase, numverts,
584 type, stride, &indexbase, indexstride, numfaces, indicestype, m_part);
585
586 m_lock_count = 1;
587 }
588
589 void unlock()
590 {
591 if (m_lock_count == 0) return;
592 if (m_lock_count > 1)
593 {
594 --m_lock_count;
595 return;
596 }
597 m_meshInterface->unLockReadOnlyVertexBase(m_part);
598 vertexbase = NULL;
599 m_lock_count = 0;
600 }
601
602 virtual bool is_trimesh() const
603 {
604 return true;
605 }
606
607 virtual int get_primitive_count() const
608 {
609 return (int)numfaces;
610 }
611
612 SIMD_FORCE_INLINE int get_vertex_count() const
613 {
614 return (int)numverts;
615 }
616
617 SIMD_FORCE_INLINE void get_indices(int face_index, unsigned int& i0, unsigned int& i1, unsigned int& i2) const
618 {
619 if (indicestype == PHY_SHORT)
620 {
621 unsigned short* s_indices = (unsigned short*)(indexbase + face_index * indexstride);
622 i0 = s_indices[0];
623 i1 = s_indices[1];
624 i2 = s_indices[2];
625 }
626 else if (indicestype == PHY_INTEGER)
627 {
628 unsigned int* i_indices = (unsigned int*)(indexbase + face_index * indexstride);
629 i0 = i_indices[0];
630 i1 = i_indices[1];
631 i2 = i_indices[2];
632 }
633 else
634 {
635 btAssert(indicestype == PHY_UCHAR);
636 unsigned char* i_indices = (unsigned char*)(indexbase + face_index * indexstride);
637 i0 = i_indices[0];
638 i1 = i_indices[1];
639 i2 = i_indices[2];
640 }
641 }
642
643 SIMD_FORCE_INLINE void get_vertex(unsigned int vertex_index, btVector3& vertex) const
644 {
645 if (type == PHY_DOUBLE)
646 {
647 double* dvertices = (double*)(vertexbase + vertex_index * stride);
648 vertex[0] = btScalar(dvertices[0] * m_scale[0]);
649 vertex[1] = btScalar(dvertices[1] * m_scale[1]);
650 vertex[2] = btScalar(dvertices[2] * m_scale[2]);
651 }
652 else
653 {
654 float* svertices = (float*)(vertexbase + vertex_index * stride);
655 vertex[0] = svertices[0] * m_scale[0];
656 vertex[1] = svertices[1] * m_scale[1];
657 vertex[2] = svertices[2] * m_scale[2];
658 }
659 }
660
661 virtual void get_primitive_box(int prim_index, btAABB& primbox) const
662 {
663 btPrimitiveTriangle triangle;
664 get_primitive_triangle(prim_index, triangle);
665 primbox.calc_from_triangle_margin(
666 triangle.m_vertices[0],
667 triangle.m_vertices[1], triangle.m_vertices[2], triangle.m_margin);
668 }
669
670 virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const
671 {
672 unsigned int indices[3];
673 get_indices(prim_index, indices[0], indices[1], indices[2]);
674 get_vertex(indices[0], triangle.m_vertices[0]);
675 get_vertex(indices[1], triangle.m_vertices[1]);
676 get_vertex(indices[2], triangle.m_vertices[2]);
677 triangle.m_margin = m_margin;
678 }
679
680 SIMD_FORCE_INLINE void get_bullet_triangle(int prim_index, btTriangleShapeEx& triangle) const
681 {
682 unsigned int indices[3];
683 get_indices(prim_index, indices[0], indices[1], indices[2]);
684 get_vertex(indices[0], triangle.m_vertices1[0]);
685 get_vertex(indices[1], triangle.m_vertices1[1]);
686 get_vertex(indices[2], triangle.m_vertices1[2]);
687 triangle.setMargin(m_margin);
688 }
689 };
690
691protected:
692 TrimeshPrimitiveManager m_primitive_manager;
693
694public:
695 btGImpactMeshShapePart()
696 {
697 m_box_set.setPrimitiveManager(&m_primitive_manager);
698 }
699
700 btGImpactMeshShapePart(btStridingMeshInterface* meshInterface, int part);
701 virtual ~btGImpactMeshShapePart();
702
704 virtual bool childrenHasTransform() const
705 {
706 return false;
707 }
708
710 virtual void lockChildShapes() const;
711 virtual void unlockChildShapes() const;
712
714 virtual int getNumChildShapes() const
715 {
716 return m_primitive_manager.get_primitive_count();
717 }
718
720 virtual btCollisionShape* getChildShape(int index)
721 {
722 (void)index;
723 btAssert(0);
724 return NULL;
725 }
726
728 virtual const btCollisionShape* getChildShape(int index) const
729 {
730 (void)index;
731 btAssert(0);
732 return NULL;
733 }
734
736 virtual btTransform getChildTransform(int index) const
737 {
738 (void)index;
739 btAssert(0);
740 return btTransform();
741 }
742
744
747 virtual void setChildTransform(int index, const btTransform& transform)
748 {
749 (void)index;
750 (void)transform;
751 btAssert(0);
752 }
753
755 virtual const btPrimitiveManagerBase* getPrimitiveManager() const
756 {
757 return &m_primitive_manager;
758 }
759
760 SIMD_FORCE_INLINE TrimeshPrimitiveManager* getTrimeshPrimitiveManager()
761 {
762 return &m_primitive_manager;
763 }
764
765 virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;
766
767 virtual const char* getName() const
768 {
769 return "GImpactMeshShapePart";
770 }
771
772 virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
773 {
774 return CONST_GIMPACT_TRIMESH_SHAPE_PART;
775 }
776
778 virtual bool needsRetrieveTriangles() const
779 {
780 return true;
781 }
782
784 virtual bool needsRetrieveTetrahedrons() const
785 {
786 return false;
787 }
788
789 virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const
790 {
791 m_primitive_manager.get_bullet_triangle(prim_index, triangle);
792 }
793
794 virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const
795 {
796 (void)prim_index;
797 (void)tetrahedron;
798 btAssert(0);
799 }
800
801 SIMD_FORCE_INLINE int getVertexCount() const
802 {
803 return m_primitive_manager.get_vertex_count();
804 }
805
806 SIMD_FORCE_INLINE void getVertex(int vertex_index, btVector3& vertex) const
807 {
808 m_primitive_manager.get_vertex(vertex_index, vertex);
809 }
810
811 SIMD_FORCE_INLINE void setMargin(btScalar margin)
812 {
813 m_primitive_manager.m_margin = margin;
814 postUpdate();
815 }
816
817 SIMD_FORCE_INLINE btScalar getMargin() const
818 {
819 return m_primitive_manager.m_margin;
820 }
821
822 virtual void setLocalScaling(const btVector3& scaling)
823 {
824 m_primitive_manager.m_scale = scaling;
825 postUpdate();
826 }
827
828 virtual const btVector3& getLocalScaling() const
829 {
830 return m_primitive_manager.m_scale;
831 }
832
833 SIMD_FORCE_INLINE int getPart() const
834 {
835 return (int)m_primitive_manager.m_part;
836 }
837
838 virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
839 virtual void processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const;
840};
841
843
850 class btGImpactMeshShape : public btGImpactShapeInterface
851{
852 btStridingMeshInterface* m_meshInterface;
853
854protected:
855 btAlignedObjectArray<btGImpactMeshShapePart*> m_mesh_parts;
856 void buildMeshParts(btStridingMeshInterface* meshInterface)
857 {
858 for (int i = 0; i < meshInterface->getNumSubParts(); ++i)
859 {
860 btGImpactMeshShapePart* newpart = new btGImpactMeshShapePart(meshInterface, i);
861 m_mesh_parts.push_back(newpart);
862 }
863 }
864
866 virtual void calcLocalAABB()
867 {
868 m_localAABB.invalidate();
869 int i = m_mesh_parts.size();
870 while (i--)
871 {
872 m_mesh_parts[i]->updateBound();
873 m_localAABB.merge(m_mesh_parts[i]->getLocalBox());
874 }
875 }
876
877public:
878 btGImpactMeshShape(btStridingMeshInterface* meshInterface)
879 {
880 m_meshInterface = meshInterface;
881 buildMeshParts(meshInterface);
882 }
883
884 virtual ~btGImpactMeshShape()
885 {
886 int i = m_mesh_parts.size();
887 while (i--)
888 {
889 btGImpactMeshShapePart* part = m_mesh_parts[i];
890 delete part;
891 }
892 m_mesh_parts.clear();
893 }
894
895 btStridingMeshInterface* getMeshInterface()
896 {
897 return m_meshInterface;
898 }
899
900 const btStridingMeshInterface* getMeshInterface() const
901 {
902 return m_meshInterface;
903 }
904
905 int getMeshPartCount() const
906 {
907 return m_mesh_parts.size();
908 }
909
910 btGImpactMeshShapePart* getMeshPart(int index)
911 {
912 return m_mesh_parts[index];
913 }
914
915 const btGImpactMeshShapePart* getMeshPart(int index) const
916 {
917 return m_mesh_parts[index];
918 }
919
920 virtual void setLocalScaling(const btVector3& scaling)
921 {
922 localScaling = scaling;
923
924 int i = m_mesh_parts.size();
925 while (i--)
926 {
927 btGImpactMeshShapePart* part = m_mesh_parts[i];
928 part->setLocalScaling(scaling);
929 }
930
931 m_needs_update = true;
932 }
933
934 virtual void setMargin(btScalar margin)
935 {
936 m_collisionMargin = margin;
937
938 int i = m_mesh_parts.size();
939 while (i--)
940 {
941 btGImpactMeshShapePart* part = m_mesh_parts[i];
942 part->setMargin(margin);
943 }
944
945 m_needs_update = true;
946 }
947
949 virtual void postUpdate()
950 {
951 int i = m_mesh_parts.size();
952 while (i--)
953 {
954 btGImpactMeshShapePart* part = m_mesh_parts[i];
955 part->postUpdate();
956 }
957
958 m_needs_update = true;
959 }
960
961 virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;
962
964 virtual const btPrimitiveManagerBase* getPrimitiveManager() const
965 {
966 btAssert(0);
967 return NULL;
968 }
969
971 virtual int getNumChildShapes() const
972 {
973 btAssert(0);
974 return 0;
975 }
976
978 virtual bool childrenHasTransform() const
979 {
980 btAssert(0);
981 return false;
982 }
983
985 virtual bool needsRetrieveTriangles() const
986 {
987 btAssert(0);
988 return false;
989 }
990
992 virtual bool needsRetrieveTetrahedrons() const
993 {
994 btAssert(0);
995 return false;
996 }
997
998 virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const
999 {
1000 (void)prim_index;
1001 (void)triangle;
1002 btAssert(0);
1003 }
1004
1005 virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const
1006 {
1007 (void)prim_index;
1008 (void)tetrahedron;
1009 btAssert(0);
1010 }
1011
1013 virtual void lockChildShapes() const
1014 {
1015 btAssert(0);
1016 }
1017
1018 virtual void unlockChildShapes() const
1019 {
1020 btAssert(0);
1021 }
1022
1024
1026 virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
1027 {
1028 (void)child_index;
1029 (void)t;
1030 (void)aabbMin;
1031 (void)aabbMax;
1032 btAssert(0);
1033 }
1034
1036 virtual btCollisionShape* getChildShape(int index)
1037 {
1038 (void)index;
1039 btAssert(0);
1040 return NULL;
1041 }
1042
1044 virtual const btCollisionShape* getChildShape(int index) const
1045 {
1046 (void)index;
1047 btAssert(0);
1048 return NULL;
1049 }
1050
1052 virtual btTransform getChildTransform(int index) const
1053 {
1054 (void)index;
1055 btAssert(0);
1056 return btTransform();
1057 }
1058
1060
1063 virtual void setChildTransform(int index, const btTransform& transform)
1064 {
1065 (void)index;
1066 (void)transform;
1067 btAssert(0);
1068 }
1069
1070 virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
1071 {
1072 return CONST_GIMPACT_TRIMESH_SHAPE;
1073 }
1074
1075 virtual const char* getName() const
1076 {
1077 return "GImpactMesh";
1078 }
1079
1080 virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btCollisionWorld::RayResultCallback& resultCallback) const;
1081
1083
1086 virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
1087
1088 virtual void processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const;
1089
1090 virtual int calculateSerializeBufferSize() const;
1091
1093 virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
1094};
1095
1097 struct btGImpactMeshShapeData
1098{
1099 btCollisionShapeData m_collisionShapeData;
1100
1101 btStridingMeshInterfaceData m_meshInterface;
1102
1103 btVector3FloatData m_localScaling;
1104
1105 float m_collisionMargin;
1106
1107 int m_gimpactSubType;
1108};
1109
1110 SIMD_FORCE_INLINE int btGImpactMeshShape::calculateSerializeBufferSize() const
1111{
1112 return sizeof(btGImpactMeshShapeData);
1113}
1114
1115#endif //GIMPACT_MESH_SHAPE_H
btAlignedObjectArray.h
GIMPACT_SHAPE_PROXYTYPE
@ GIMPACT_SHAPE_PROXYTYPE
Used for GIMPACT Trimesh integration.
Definition: btBroadphaseProxy.h:61
btCollisionMargin.h
btCollisionShape.h
btCollisionWorld.h
btConcaveShape.h
PHY_ScalarType
PHY_ScalarType
PHY_ScalarType enumerates possible scalar types.
Definition: btConcaveShape.h:26
PHY_UCHAR
@ PHY_UCHAR
Definition: btConcaveShape.h:32
PHY_DOUBLE
@ PHY_DOUBLE
Definition: btConcaveShape.h:28
PHY_SHORT
@ PHY_SHORT
Definition: btConcaveShape.h:30
PHY_INTEGER
@ PHY_INTEGER
Definition: btConcaveShape.h:29
btGImpactQuantizedBvh.h
eGIMPACT_SHAPE_TYPE
eGIMPACT_SHAPE_TYPE
Definition: btGImpactShape.h:45
CONST_GIMPACT_TRIMESH_SHAPE
@ CONST_GIMPACT_TRIMESH_SHAPE
Definition: btGImpactShape.h:48
CONST_GIMPACT_TRIMESH_SHAPE_PART
@ CONST_GIMPACT_TRIMESH_SHAPE_PART
Definition: btGImpactShape.h:47
CONST_GIMPACT_COMPOUND_SHAPE
@ CONST_GIMPACT_COMPOUND_SHAPE
Definition: btGImpactShape.h:46
btGImpactBoxSet
btGImpactQuantizedBvh btGImpactBoxSet
declare Quantized trees, (you can change to float based trees)
Definition: btGImpactShape.h:42
btMatrix3x3.h
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
SIMD_FORCE_INLINE
#define SIMD_FORCE_INLINE
Definition: btScalar.h:98
btAssert
#define btAssert(x)
Definition: btScalar.h:153
btStridingMeshInterface.h
btTetrahedronShape.h
btTransform.h
btTriangleShape.h
btVector3.h
btAABB
Axis aligned box.
Definition: btBoxCollision.h:216
btAABB::merge
void merge(const btAABB &box)
Merges a Box.
Definition: btBoxCollision.h:374
btAABB::m_min
btVector3 m_min
Definition: btBoxCollision.h:218
btAABB::m_max
btVector3 m_max
Definition: btBoxCollision.h:219
btAABB::calc_from_triangle_margin
void calc_from_triangle_margin(const CLASS_POINT &V1, const CLASS_POINT &V2, const CLASS_POINT &V3, btScalar margin)
Definition: btBoxCollision.h:320
btAABB::invalidate
void invalidate()
Definition: btBoxCollision.h:273
btAABB::appy_transform
void appy_transform(const btTransform &trans)
Apply a transform to an AABB.
Definition: btBoxCollision.h:342
btAlignedObjectArray< btTransform >
btAlignedObjectArray::size
int size() const
return the number of elements in the array
Definition: btAlignedObjectArray.h:142
btAlignedObjectArray::clear
void clear()
clear the array, deallocated memory. Generally it is better to use array.resize(0),...
Definition: btAlignedObjectArray.h:176
btAlignedObjectArray::push_back
void push_back(const T &_Val)
Definition: btAlignedObjectArray.h:257
btBU_Simplex1to4
The btBU_Simplex1to4 implements tetrahedron, triangle, line, vertex collision shapes....
Definition: btTetrahedronShape.h:25
btBU_Simplex1to4::m_vertices
btVector3 m_vertices[4]
Definition: btTetrahedronShape.h:28
btBU_Simplex1to4::m_numVertices
int m_numVertices
Definition: btTetrahedronShape.h:27
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
Definition: btCollisionShape.h:28
btCollisionShape::setMargin
virtual void setMargin(btScalar margin)=0
btCollisionShape::isConvex
bool isConvex() const
Definition: btCollisionShape.h:70
btCollisionShape::m_shapeType
int m_shapeType
Definition: btCollisionShape.h:30
btCollisionShape::getAabb
virtual void getAabb(const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const =0
getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t.
btConcaveShape
The btConcaveShape class provides an interface for non-moving (static) concave shapes.
Definition: btConcaveShape.h:39
btConcaveShape::m_collisionMargin
btScalar m_collisionMargin
Definition: btConcaveShape.h:41
btConvexInternalShape::setMargin
virtual void setMargin(btScalar margin)
Definition: btConvexInternalShape.h:102
btGImpactCompoundShape::CompoundPrimitiveManager
compound primitive manager
Definition: btGImpactShape.h:299
btGImpactCompoundShape::CompoundPrimitiveManager::get_primitive_count
virtual int get_primitive_count() const
Definition: btGImpactShape.h:325
btGImpactCompoundShape::CompoundPrimitiveManager::CompoundPrimitiveManager
CompoundPrimitiveManager(btGImpactCompoundShape *compoundShape)
Definition: btGImpactShape.h:310
btGImpactCompoundShape::CompoundPrimitiveManager::CompoundPrimitiveManager
CompoundPrimitiveManager(const CompoundPrimitiveManager &compound)
Definition: btGImpactShape.h:304
btGImpactCompoundShape::CompoundPrimitiveManager::get_primitive_box
virtual void get_primitive_box(int prim_index, btAABB &primbox) const
Definition: btGImpactShape.h:330
btGImpactCompoundShape::CompoundPrimitiveManager::m_compoundShape
btGImpactCompoundShape * m_compoundShape
Definition: btGImpactShape.h:302
btGImpactCompoundShape::CompoundPrimitiveManager::is_trimesh
virtual bool is_trimesh() const
determines if this manager consist on only triangles, which special case will be optimized
Definition: btGImpactShape.h:320
btGImpactCompoundShape::CompoundPrimitiveManager::~CompoundPrimitiveManager
virtual ~CompoundPrimitiveManager()
Definition: btGImpactShape.h:301
btGImpactCompoundShape::CompoundPrimitiveManager::CompoundPrimitiveManager
CompoundPrimitiveManager()
Definition: btGImpactShape.h:315
btGImpactCompoundShape::CompoundPrimitiveManager::get_primitive_triangle
virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle &triangle) const
retrieves only the points of the triangle, and the collision margin
Definition: btGImpactShape.h:345
btGImpactCompoundShape
btGImpactCompoundShape allows to handle multiple btCollisionShape objects at once
Definition: btGImpactShape.h:295
btGImpactCompoundShape::getName
virtual const char * getName() const
Definition: btGImpactShape.h:484
btGImpactCompoundShape::addChildShape
void addChildShape(btCollisionShape *shape)
Use this method for adding children. Only Convex shapes are allowed.
Definition: btGImpactShape.h:404
btGImpactCompoundShape::getPrimitiveManager
virtual const btPrimitiveManagerBase * getPrimitiveManager() const
Obtains the primitive manager.
Definition: btGImpactShape.h:378
btGImpactCompoundShape::btGImpactCompoundShape
btGImpactCompoundShape(bool children_has_transform=true)
Definition: btGImpactShape.h:359
btGImpactCompoundShape::calculateLocalInertia
virtual void calculateLocalInertia(btScalar mass, btVector3 &inertia) const
Calculates the exact inertia tensor for this shape.
Definition: btGImpactShape.cpp:78
btGImpactCompoundShape::getBulletTriangle
virtual void getBulletTriangle(int prim_index, btTriangleShapeEx &triangle) const
Definition: btGImpactShape.h:467
btGImpactCompoundShape::addChildShape
void addChildShape(const btTransform &localTransform, btCollisionShape *shape)
Use this method for adding children. Only Convex shapes are allowed.
Definition: btGImpactShape.h:396
btGImpactCompoundShape::getChildShape
virtual const btCollisionShape * getChildShape(int index) const
Gets the children.
Definition: btGImpactShape.h:417
btGImpactCompoundShape::setChildTransform
virtual void setChildTransform(int index, const btTransform &transform)
Sets the children transform.
Definition: btGImpactShape.h:448
btGImpactCompoundShape::m_childTransforms
btAlignedObjectArray< btTransform > m_childTransforms
Definition: btGImpactShape.h:355
btGImpactCompoundShape::getGImpactShapeType
virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
Subshape member functions.
Definition: btGImpactShape.h:489
btGImpactCompoundShape::getChildShape
virtual btCollisionShape * getChildShape(int index)
Gets the children.
Definition: btGImpactShape.h:411
btGImpactCompoundShape::m_childShapes
btAlignedObjectArray< btCollisionShape * > m_childShapes
Definition: btGImpactShape.h:356
btGImpactCompoundShape::needsRetrieveTriangles
virtual bool needsRetrieveTriangles() const
Determines if this shape has triangles.
Definition: btGImpactShape.h:456
btGImpactCompoundShape::childrenHasTransform
virtual bool childrenHasTransform() const
if true, then its children must get transforms.
Definition: btGImpactShape.h:371
btGImpactCompoundShape::needsRetrieveTetrahedrons
virtual bool needsRetrieveTetrahedrons() const
Determines if this shape has tetrahedrons.
Definition: btGImpactShape.h:462
btGImpactCompoundShape::getChildTransform
virtual btTransform getChildTransform(int index) const
Gets the children transform.
Definition: btGImpactShape.h:438
btGImpactCompoundShape::getChildAabb
virtual void getChildAabb(int child_index, const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const
Retrieves the bound from a child.
Definition: btGImpactShape.h:425
btGImpactCompoundShape::~btGImpactCompoundShape
virtual ~btGImpactCompoundShape()
Definition: btGImpactShape.h:366
btGImpactCompoundShape::getNumChildShapes
virtual int getNumChildShapes() const
Gets the number of children.
Definition: btGImpactShape.h:390
btGImpactCompoundShape::m_primitive_manager
CompoundPrimitiveManager m_primitive_manager
Definition: btGImpactShape.h:354
btGImpactCompoundShape::getCompoundPrimitiveManager
CompoundPrimitiveManager * getCompoundPrimitiveManager()
Obtains the compopund primitive manager.
Definition: btGImpactShape.h:384
btGImpactCompoundShape::getBulletTetrahedron
virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx &tetrahedron) const
Definition: btGImpactShape.h:474
btGImpactMeshShapePart::TrimeshPrimitiveManager
Trimesh primitive manager.
Definition: btGImpactShape.h:510
btGImpactMeshShapePart::TrimeshPrimitiveManager::m_meshInterface
btStridingMeshInterface * m_meshInterface
Definition: btGImpactShape.h:513
btGImpactMeshShapePart::TrimeshPrimitiveManager::get_indices
void get_indices(int face_index, unsigned int &i0, unsigned int &i1, unsigned int &i2) const
Definition: btGImpactShape.h:617
btGImpactMeshShapePart::TrimeshPrimitiveManager::numfaces
int numfaces
Definition: btGImpactShape.h:523
btGImpactMeshShapePart::TrimeshPrimitiveManager::numverts
int numverts
Definition: btGImpactShape.h:518
btGImpactMeshShapePart::TrimeshPrimitiveManager::~TrimeshPrimitiveManager
virtual ~TrimeshPrimitiveManager()
Definition: btGImpactShape.h:573
btGImpactMeshShapePart::TrimeshPrimitiveManager::TrimeshPrimitiveManager
TrimeshPrimitiveManager(btStridingMeshInterface *meshInterface, int part)
Definition: btGImpactShape.h:557
btGImpactMeshShapePart::TrimeshPrimitiveManager::get_primitive_count
virtual int get_primitive_count() const
Definition: btGImpactShape.h:607
btGImpactMeshShapePart::TrimeshPrimitiveManager::get_vertex_count
int get_vertex_count() const
Definition: btGImpactShape.h:612
btGImpactMeshShapePart::TrimeshPrimitiveManager::lock
void lock()
Definition: btGImpactShape.h:575
btGImpactMeshShapePart::TrimeshPrimitiveManager::m_lock_count
int m_lock_count
Definition: btGImpactShape.h:516
btGImpactMeshShapePart::TrimeshPrimitiveManager::get_bullet_triangle
void get_bullet_triangle(int prim_index, btTriangleShapeEx &triangle) const
Definition: btGImpactShape.h:680
btGImpactMeshShapePart::TrimeshPrimitiveManager::vertexbase
const unsigned char * vertexbase
Definition: btGImpactShape.h:517
btGImpactMeshShapePart::TrimeshPrimitiveManager::type
PHY_ScalarType type
Definition: btGImpactShape.h:519
btGImpactMeshShapePart::TrimeshPrimitiveManager::get_primitive_triangle
virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle &triangle) const
retrieves only the points of the triangle, and the collision margin
Definition: btGImpactShape.h:670
btGImpactMeshShapePart::TrimeshPrimitiveManager::indexstride
int indexstride
Definition: btGImpactShape.h:522
btGImpactMeshShapePart::TrimeshPrimitiveManager::indicestype
PHY_ScalarType indicestype
Definition: btGImpactShape.h:524
btGImpactMeshShapePart::TrimeshPrimitiveManager::unlock
void unlock()
Definition: btGImpactShape.h:589
btGImpactMeshShapePart::TrimeshPrimitiveManager::stride
int stride
Definition: btGImpactShape.h:520
btGImpactMeshShapePart::TrimeshPrimitiveManager::is_trimesh
virtual bool is_trimesh() const
determines if this manager consist on only triangles, which special case will be optimized
Definition: btGImpactShape.h:602
btGImpactMeshShapePart::TrimeshPrimitiveManager::TrimeshPrimitiveManager
TrimeshPrimitiveManager(const TrimeshPrimitiveManager &manager)
Definition: btGImpactShape.h:541
btGImpactMeshShapePart::TrimeshPrimitiveManager::m_margin
btScalar m_margin
Definition: btGImpactShape.h:512
btGImpactMeshShapePart::TrimeshPrimitiveManager::TrimeshPrimitiveManager
TrimeshPrimitiveManager()
Definition: btGImpactShape.h:526
btGImpactMeshShapePart::TrimeshPrimitiveManager::indexbase
const unsigned char * indexbase
Definition: btGImpactShape.h:521
btGImpactMeshShapePart::TrimeshPrimitiveManager::m_part
int m_part
Definition: btGImpactShape.h:515
btGImpactMeshShapePart::TrimeshPrimitiveManager::m_scale
btVector3 m_scale
Definition: btGImpactShape.h:514
btGImpactMeshShapePart::TrimeshPrimitiveManager::get_vertex
void get_vertex(unsigned int vertex_index, btVector3 &vertex) const
Definition: btGImpactShape.h:643
btGImpactMeshShapePart::TrimeshPrimitiveManager::get_primitive_box
virtual void get_primitive_box(int prim_index, btAABB &primbox) const
Definition: btGImpactShape.h:661
btGImpactMeshShapePart
This class manages a sub part of a mesh supplied by the btStridingMeshInterface interface.
Definition: btGImpactShape.h:503
btGImpactMeshShapePart::getChildTransform
virtual btTransform getChildTransform(int index) const
Gets the children transform.
Definition: btGImpactShape.h:736
btGImpactMeshShapePart::processAllTriangles
virtual void processAllTriangles(btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const
Function for retrieve triangles.
Definition: btGImpactShape.cpp:218
btGImpactMeshShapePart::setChildTransform
virtual void setChildTransform(int index, const btTransform &transform)
Sets the children transform.
Definition: btGImpactShape.h:747
btGImpactMeshShapePart::calculateLocalInertia
virtual void calculateLocalInertia(btScalar mass, btVector3 &inertia) const
Definition: btGImpactShape.cpp:119
btGImpactMeshShapePart::getChildShape
virtual const btCollisionShape * getChildShape(int index) const
Gets the child.
Definition: btGImpactShape.h:728
btGImpactMeshShapePart::setLocalScaling
virtual void setLocalScaling(const btVector3 &scaling)
Definition: btGImpactShape.h:822
btGImpactMeshShapePart::btGImpactMeshShapePart
btGImpactMeshShapePart()
Definition: btGImpactShape.h:695
btGImpactMeshShapePart::getBulletTriangle
virtual void getBulletTriangle(int prim_index, btTriangleShapeEx &triangle) const
Definition: btGImpactShape.h:789
btGImpactMeshShapePart::processAllTrianglesRay
virtual void processAllTrianglesRay(btTriangleCallback *callback, const btVector3 &rayFrom, const btVector3 &rayTo) const
Function for retrieve triangles.
Definition: btGImpactShape.cpp:192
btGImpactMeshShapePart::getPart
int getPart() const
Definition: btGImpactShape.h:833
btGImpactMeshShapePart::getNumChildShapes
virtual int getNumChildShapes() const
Gets the number of children.
Definition: btGImpactShape.h:714
btGImpactMeshShapePart::getMargin
btScalar getMargin() const
Definition: btGImpactShape.h:817
btGImpactMeshShapePart::getLocalScaling
virtual const btVector3 & getLocalScaling() const
Definition: btGImpactShape.h:828
btGImpactMeshShapePart::getPrimitiveManager
virtual const btPrimitiveManagerBase * getPrimitiveManager() const
Obtains the primitive manager.
Definition: btGImpactShape.h:755
btGImpactMeshShapePart::needsRetrieveTriangles
virtual bool needsRetrieveTriangles() const
Determines if this shape has triangles.
Definition: btGImpactShape.h:778
btGImpactMeshShapePart::getName
virtual const char * getName() const
Definition: btGImpactShape.h:767
btGImpactMeshShapePart::getGImpactShapeType
virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
Subshape member functions.
Definition: btGImpactShape.h:772
btGImpactMeshShapePart::getVertex
void getVertex(int vertex_index, btVector3 &vertex) const
Definition: btGImpactShape.h:806
btGImpactMeshShapePart::getTrimeshPrimitiveManager
TrimeshPrimitiveManager * getTrimeshPrimitiveManager()
Definition: btGImpactShape.h:760
btGImpactMeshShapePart::setMargin
void setMargin(btScalar margin)
Definition: btGImpactShape.h:811
btGImpactMeshShapePart::m_primitive_manager
TrimeshPrimitiveManager m_primitive_manager
Definition: btGImpactShape.h:692
btGImpactMeshShapePart::needsRetrieveTetrahedrons
virtual bool needsRetrieveTetrahedrons() const
Determines if this shape has tetrahedrons.
Definition: btGImpactShape.h:784
btGImpactMeshShapePart::getVertexCount
int getVertexCount() const
Definition: btGImpactShape.h:801
btGImpactMeshShapePart::childrenHasTransform
virtual bool childrenHasTransform() const
if true, then its children must get transforms.
Definition: btGImpactShape.h:704
btGImpactMeshShapePart::getChildShape
virtual btCollisionShape * getChildShape(int index)
Gets the children.
Definition: btGImpactShape.h:720
btGImpactMeshShapePart::lockChildShapes
virtual void lockChildShapes() const
call when reading child shapes
Definition: btGImpactShape.cpp:54
btGImpactMeshShapePart::~btGImpactMeshShapePart
virtual ~btGImpactMeshShapePart()
Definition: btGImpactShape.cpp:46
btGImpactMeshShapePart::getBulletTetrahedron
virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx &tetrahedron) const
Definition: btGImpactShape.h:794
btGImpactMeshShapePart::unlockChildShapes
virtual void unlockChildShapes() const
Definition: btGImpactShape.cpp:65
btGImpactMeshShape
This class manages a mesh supplied by the btStridingMeshInterface interface.
Definition: btGImpactShape.h:851
btGImpactMeshShape::calculateSerializeBufferSize
virtual int calculateSerializeBufferSize() const
Definition: btGImpactShape.h:1110
btGImpactMeshShape::getChildShape
virtual const btCollisionShape * getChildShape(int index) const
Gets the child.
Definition: btGImpactShape.h:1044
btGImpactMeshShape::childrenHasTransform
virtual bool childrenHasTransform() const
if true, then its children must get transforms.
Definition: btGImpactShape.h:978
btGImpactMeshShape::getMeshPartCount
int getMeshPartCount() const
Definition: btGImpactShape.h:905
btGImpactMeshShape::getNumChildShapes
virtual int getNumChildShapes() const
Gets the number of children.
Definition: btGImpactShape.h:971
btGImpactMeshShape::getBulletTetrahedron
virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx &tetrahedron) const
Definition: btGImpactShape.h:1005
btGImpactMeshShape::setChildTransform
virtual void setChildTransform(int index, const btTransform &transform)
Sets the children transform.
Definition: btGImpactShape.h:1063
btGImpactMeshShape::rayTest
virtual void rayTest(const btVector3 &rayFrom, const btVector3 &rayTo, btCollisionWorld::RayResultCallback &resultCallback) const
virtual method for ray collision
Definition: btGImpactShape.cpp:188
btGImpactMeshShape::getChildTransform
virtual btTransform getChildTransform(int index) const
Gets the children transform.
Definition: btGImpactShape.h:1052
btGImpactMeshShape::getChildShape
virtual btCollisionShape * getChildShape(int index)
Gets the children.
Definition: btGImpactShape.h:1036
btGImpactMeshShape::calculateLocalInertia
virtual void calculateLocalInertia(btScalar mass, btVector3 &inertia) const
Definition: btGImpactShape.cpp:156
btGImpactMeshShape::getMeshPart
btGImpactMeshShapePart * getMeshPart(int index)
Definition: btGImpactShape.h:910
btGImpactMeshShape::m_meshInterface
btStridingMeshInterface * m_meshInterface
Definition: btGImpactShape.h:852
btGImpactMeshShape::getPrimitiveManager
virtual const btPrimitiveManagerBase * getPrimitiveManager() const
Obtains the primitive manager.
Definition: btGImpactShape.h:964
btGImpactMeshShape::~btGImpactMeshShape
virtual ~btGImpactMeshShape()
Definition: btGImpactShape.h:884
btGImpactMeshShape::lockChildShapes
virtual void lockChildShapes() const
call when reading child shapes
Definition: btGImpactShape.h:1013
btGImpactMeshShape::getChildAabb
virtual void getChildAabb(int child_index, const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const
Retrieves the bound from a child.
Definition: btGImpactShape.h:1026
btGImpactMeshShape::getBulletTriangle
virtual void getBulletTriangle(int prim_index, btTriangleShapeEx &triangle) const
Definition: btGImpactShape.h:998
btGImpactMeshShape::getMeshPart
const btGImpactMeshShapePart * getMeshPart(int index) const
Definition: btGImpactShape.h:915
btGImpactMeshShape::buildMeshParts
void buildMeshParts(btStridingMeshInterface *meshInterface)
Definition: btGImpactShape.h:856
btGImpactMeshShape::processAllTriangles
virtual void processAllTriangles(btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const
Function for retrieve triangles.
Definition: btGImpactShape.cpp:245
btGImpactMeshShape::getName
virtual const char * getName() const
Definition: btGImpactShape.h:1075
btGImpactMeshShape::btGImpactMeshShape
btGImpactMeshShape(btStridingMeshInterface *meshInterface)
Definition: btGImpactShape.h:878
btGImpactMeshShape::calcLocalAABB
virtual void calcLocalAABB()
use this function for perfofm refit in bounding boxes
Definition: btGImpactShape.h:866
btGImpactMeshShape::setMargin
virtual void setMargin(btScalar margin)
Definition: btGImpactShape.h:934
btGImpactMeshShape::processAllTrianglesRay
virtual void processAllTrianglesRay(btTriangleCallback *callback, const btVector3 &rayFrom, const btVector3 &rayTo) const
Function for retrieve triangles.
Definition: btGImpactShape.cpp:254
btGImpactMeshShape::getMeshInterface
const btStridingMeshInterface * getMeshInterface() const
Definition: btGImpactShape.h:900
btGImpactMeshShape::needsRetrieveTetrahedrons
virtual bool needsRetrieveTetrahedrons() const
Determines if this shape has tetrahedrons.
Definition: btGImpactShape.h:992
btGImpactMeshShape::getGImpactShapeType
virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
Subshape member functions.
Definition: btGImpactShape.h:1070
btGImpactMeshShape::m_mesh_parts
btAlignedObjectArray< btGImpactMeshShapePart * > m_mesh_parts
Definition: btGImpactShape.h:855
btGImpactMeshShape::getMeshInterface
btStridingMeshInterface * getMeshInterface()
Definition: btGImpactShape.h:895
btGImpactMeshShape::setLocalScaling
virtual void setLocalScaling(const btVector3 &scaling)
Definition: btGImpactShape.h:920
btGImpactMeshShape::serialize
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
Definition: btGImpactShape.cpp:264
btGImpactMeshShape::needsRetrieveTriangles
virtual bool needsRetrieveTriangles() const
Determines if this shape has triangles.
Definition: btGImpactShape.h:985
btGImpactMeshShape::postUpdate
virtual void postUpdate()
Tells to this object that is needed to refit all the meshes.
Definition: btGImpactShape.h:949
btGImpactMeshShape::unlockChildShapes
virtual void unlockChildShapes() const
Definition: btGImpactShape.h:1018
btGImpactQuantizedBvh
Structure for containing Boxes.
Definition: btGImpactQuantizedBvh.h:157
btGImpactQuantizedBvh::buildSet
void buildSet()
this rebuild the entire set
Definition: btGImpactQuantizedBvh.cpp:270
btGImpactQuantizedBvh::getNodeCount
int getNodeCount() const
node count
Definition: btGImpactQuantizedBvh.h:238
btGImpactQuantizedBvh::update
void update()
node manager prototype functions
Definition: btGImpactQuantizedBvh.h:200
btGImpactQuantizedBvh::setPrimitiveManager
void setPrimitiveManager(btPrimitiveManagerBase *primitive_manager)
Definition: btGImpactQuantizedBvh.h:186
btGImpactQuantizedBvh::getGlobalBox
btAABB getGlobalBox() const
Definition: btGImpactQuantizedBvh.h:179
btGImpactShapeInterface
Base class for gimpact shapes.
Definition: btGImpactShape.h:74
btGImpactShapeInterface::getAabb
void getAabb(const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const
If the Bounding box is not updated, then this class attemps to calculate it.
Definition: btGImpactShape.h:126
btGImpactShapeInterface::getChildShape
virtual btCollisionShape * getChildShape(int index)=0
Gets the children.
btGImpactShapeInterface::getBoxSet
const btGImpactBoxSet * getBoxSet() const
gets boxset
Definition: btGImpactShape.h:185
btGImpactShapeInterface::calcLocalAABB
virtual void calcLocalAABB()
use this function for perfofm refit in bounding boxes use this function for perfofm refit in bounding...
Definition: btGImpactShape.h:83
btGImpactShapeInterface::localScaling
btVector3 localScaling
Definition: btGImpactShape.h:78
btGImpactShapeInterface::getChildAabb
virtual void getChildAabb(int child_index, const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const
Retrieves the bound from a child.
Definition: btGImpactShape.h:234
btGImpactShapeInterface::getPrimitiveTriangle
void getPrimitiveTriangle(int index, btPrimitiveTriangle &triangle) const
if this trimesh
Definition: btGImpactShape.h:226
btGImpactShapeInterface::hasBoxSet
bool hasBoxSet() const
Determines if this class has a hierarchy structure for sorting its primitives.
Definition: btGImpactShape.h:191
btGImpactShapeInterface::getGImpactShapeType
virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const =0
Subshape member functions.
btGImpactShapeInterface::setMargin
virtual void setMargin(btScalar margin)
Definition: btGImpactShape.h:165
btGImpactShapeInterface::lockChildShapes
virtual void lockChildShapes() const
call when reading child shapes
Definition: btGImpactShape.h:217
btGImpactShapeInterface::m_box_set
btGImpactBoxSet m_box_set
Definition: btGImpactShape.h:79
btGImpactShapeInterface::needsRetrieveTriangles
virtual bool needsRetrieveTriangles() const =0
Determines if this shape has triangles.
btGImpactShapeInterface::getBulletTetrahedron
virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx &tetrahedron) const =0
btGImpactShapeInterface::getBulletTriangle
virtual void getBulletTriangle(int prim_index, btTriangleShapeEx &triangle) const =0
btGImpactShapeInterface::getLocalScaling
virtual const btVector3 & getLocalScaling() const
Definition: btGImpactShape.h:160
btGImpactShapeInterface::updateBound
void updateBound()
performs refit operation
Definition: btGImpactShape.h:115
btGImpactShapeInterface::getChildShape
virtual const btCollisionShape * getChildShape(int index) const =0
Gets the child.
btGImpactShapeInterface::setChildTransform
virtual void setChildTransform(int index, const btTransform &transform)=0
Sets the children transform.
btGImpactShapeInterface::getPrimitiveManager
virtual const btPrimitiveManagerBase * getPrimitiveManager() const =0
Obtains the primitive manager.
btGImpactShapeInterface::m_needs_update
bool m_needs_update
Definition: btGImpactShape.h:77
btGImpactShapeInterface::childrenHasTransform
virtual bool childrenHasTransform() const =0
if true, then its children must get transforms.
btGImpactShapeInterface::getNumChildShapes
virtual int getNumChildShapes() const =0
Gets the number of children.
btGImpactShapeInterface::btGImpactShapeInterface
btGImpactShapeInterface()
Definition: btGImpactShape.h:100
btGImpactShapeInterface::getChildTransform
virtual btTransform getChildTransform(int index) const =0
Gets the children transform.
btGImpactShapeInterface::getShapeType
virtual int getShapeType() const
Definition: btGImpactShape.h:146
btGImpactShapeInterface::postUpdate
virtual void postUpdate()
Tells to this object that is needed to refit the box set.
Definition: btGImpactShape.h:135
btGImpactShapeInterface::m_localAABB
btAABB m_localAABB
Definition: btGImpactShape.h:76
btGImpactShapeInterface::needsRetrieveTetrahedrons
virtual bool needsRetrieveTetrahedrons() const =0
Determines if this shape has tetrahedrons.
btGImpactShapeInterface::setLocalScaling
virtual void setLocalScaling(const btVector3 &scaling)
Definition: btGImpactShape.h:154
btGImpactShapeInterface::processAllTriangles
virtual void processAllTriangles(btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const
Function for retrieve triangles.
Definition: btGImpactShape.h:272
btGImpactShapeInterface::unlockChildShapes
virtual void unlockChildShapes() const
Definition: btGImpactShape.h:221
btGImpactShapeInterface::processAllTrianglesRay
virtual void processAllTrianglesRay(btTriangleCallback *, const btVector3 &, const btVector3 &) const
Function for retrieve triangles.
Definition: btGImpactShape.h:283
btGImpactShapeInterface::getLocalBox
const btAABB & getLocalBox()
Obtains the local box, which is the global calculated box of the total of subshapes.
Definition: btGImpactShape.h:141
btGImpactShapeInterface::rayTest
virtual void rayTest(const btVector3 &rayFrom, const btVector3 &rayTo, btCollisionWorld::RayResultCallback &resultCallback) const
virtual method for ray collision
Definition: btGImpactShape.h:261
btPolyhedralConvexAabbCachingShape::recalcLocalAabb
void recalcLocalAabb()
Definition: btPolyhedralConvexShape.cpp:505
btPrimitiveManagerBase
Prototype Base class for primitive classification.
Definition: btGImpactBvh.h:150
btPrimitiveManagerBase::get_primitive_triangle
virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle &triangle) const =0
retrieves only the points of the triangle, and the collision margin
btPrimitiveManagerBase::get_primitive_box
virtual void get_primitive_box(int prim_index, btAABB &primbox) const =0
btPrimitiveTriangle
Definition: btTriangleShapeEx.h:70
btPrimitiveTriangle::m_vertices
btVector3 m_vertices[3]
Definition: btTriangleShapeEx.h:72
btPrimitiveTriangle::m_margin
btScalar m_margin
Definition: btTriangleShapeEx.h:74
btSerializer
Definition: btSerializer.h:66
btStridingMeshInterface
The btStridingMeshInterface is the interface class for high performance generic access to triangle me...
Definition: btStridingMeshInterface.h:28
btStridingMeshInterface::getScaling
const btVector3 & getScaling() const
Definition: btStridingMeshInterface.h:80
btStridingMeshInterface::getLockedReadOnlyVertexIndexBase
virtual void getLockedReadOnlyVertexIndexBase(const unsigned char **vertexbase, int &numverts, PHY_ScalarType &type, int &stride, const unsigned char **indexbase, int &indexstride, int &numfaces, PHY_ScalarType &indicestype, int subpart=0) const =0
btStridingMeshInterface::getNumSubParts
virtual int getNumSubParts() const =0
getNumSubParts returns the number of separate subparts each subpart has a continuous array of vertice...
btStridingMeshInterface::unLockReadOnlyVertexBase
virtual void unLockReadOnlyVertexBase(int subpart) const =0
btTetrahedronShapeEx
Helper class for tetrahedrons.
Definition: btGImpactShape.h:53
btTetrahedronShapeEx::setVertices
void setVertices(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2, const btVector3 &v3)
Definition: btGImpactShape.h:60
btTetrahedronShapeEx::btTetrahedronShapeEx
btTetrahedronShapeEx()
Definition: btGImpactShape.h:55
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:30
btTransform::setIdentity
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:167
btTriangleCallback
The btTriangleCallback provides a callback for each overlapping triangle when calling processAllTrian...
Definition: btTriangleCallback.h:24
btTriangleShapeEx
Helper class for colliding Bullet Triangle Shapes.
Definition: btTriangleShapeEx.h:127
btTriangleShape::m_vertices1
btVector3 m_vertices1[3]
Definition: btTriangleShape.h:28
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:82
btVector3::setValue
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
Definition: btVector3.h:640
btCollisionShapeData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionShape.h:163
btCollisionWorld::RayResultCallback
RayResultCallback is used to report new raycast results.
Definition: btCollisionWorld.h:196
btGImpactMeshShapeData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btGImpactShape.h:1098
btGImpactMeshShapeData::m_collisionShapeData
btCollisionShapeData m_collisionShapeData
Definition: btGImpactShape.h:1099
btGImpactMeshShapeData::m_gimpactSubType
int m_gimpactSubType
Definition: btGImpactShape.h:1107
btGImpactMeshShapeData::m_meshInterface
btStridingMeshInterfaceData m_meshInterface
Definition: btGImpactShape.h:1101
btGImpactMeshShapeData::m_collisionMargin
float m_collisionMargin
Definition: btGImpactShape.h:1105
btGImpactMeshShapeData::m_localScaling
btVector3FloatData m_localScaling
Definition: btGImpactShape.h:1103
btStridingMeshInterfaceData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btStridingMeshInterface.h:139
btVector3FloatData
Definition: btVector3.h:1282