Robotics Library  0.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Scene.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009, Markus Rickert
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 // * Neither the name of the Technische Universitaet Muenchen nor the names of
14 // its contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
28 //
29 
30 #ifndef _RL_SG_BULLET_SCENE_H_
31 #define _RL_SG_BULLET_SCENE_H_
32 
33 #include <btBulletCollisionCommon.h>
34 
35 #include "../DistanceScene.h"
36 #include "../RaycastScene.h"
37 #include "../SimpleScene.h"
38 
39 namespace rl
40 {
41  namespace sg
42  {
43  namespace bullet
44  {
46  {
47  public:
48  Scene();
49 
50  virtual ~Scene();
51 
52  bool areColliding(::rl::sg::Body* first, ::rl::sg::Body* second);
53 
54  bool areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second);
55 
57 
59 
60 #if 0
61  ::rl::math::Real distance(::rl::sg::Body* first, ::rl::sg::Body* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2);
62 
64 #endif
65 
67 
69 
70  bool isColliding();
71 
73 
74  bool raycast(::rl::sg::Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance);
75 
76  void setMargin(const ::rl::math::Real& margin);
77 
78  btDbvtBroadphase broadphase;
79 
80  btDefaultCollisionConfiguration configuration;
81 
82  btCollisionDispatcher dispatcher;
83 
84  btCollisionWorld world;
85 
86  protected:
87 
88  private:
89  struct ContactResultCallback : public btCollisionWorld::ContactResultCallback
90  {
92 
93  btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObject* colObj0, int partId0, int index0, const btCollisionObject* colObj1, int partId1, int index1);
94 
95  bool collision;
96 
97  btScalar distance;
98 
99  btVector3 positionWorldOnA;
100 
101  btVector3 positionWorldOnB;
102  };
103 
104  struct RayResultCallback : public btCollisionWorld::RayResultCallback
105  {
107 
108  btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace);
109 
110  btCollisionShape* collisionShape;
111 
112  btVector3 hitPointWorld;
113  };
114  };
115  }
116  }
117 }
118 
119 #endif // _RL_SG_BULLET_SCENE_H_