~ubuntu-branches/ubuntu/maverick/blender/maverick

« back to all changes in this revision

Viewing changes to extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Khashayar Naderehvandi, Khashayar Naderehvandi, Alessio Treglia
  • Date: 2009-01-22 16:53:59 UTC
  • mfrom: (14.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20090122165359-v0996tn7fbit64ni
Tags: 2.48a+dfsg-1ubuntu1
[ Khashayar Naderehvandi ]
* Merge from debian experimental (LP: #320045), Ubuntu remaining changes:
  - Add patch correcting header file locations.
  - Add libvorbis-dev and libgsm1-dev to Build-Depends.
  - Use avcodec_decode_audio2() in source/blender/src/hddaudio.c

[ Alessio Treglia ]
* Add missing previous changelog entries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
3. This notice may not be removed or altered from any source distribution.
14
14
*/
15
15
 
 
16
//#include <stdio.h>
16
17
 
 
18
#include "BulletCollision/CollisionShapes/btConvexShape.h"
 
19
#include "BulletCollision/CollisionShapes/btTriangleShape.h"
 
20
#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
 
21
#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h"
 
22
#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h"
 
23
#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h"
17
24
#include "btRaycastCallback.h"
18
25
 
19
26
btTriangleRaycastCallback::btTriangleRaycastCallback(const btVector3& from,const btVector3& to)
29
36
 
30
37
void btTriangleRaycastCallback::processTriangle(btVector3* triangle,int partId, int triangleIndex)
31
38
{
32
 
        
33
 
 
34
39
        const btVector3 &vert0=triangle[0];
35
40
        const btVector3 &vert1=triangle[1];
36
41
        const btVector3 &vert2=triangle[2];
99
104
                }
100
105
        }
101
106
}
 
107
 
 
108
 
 
109
btTriangleConvexcastCallback::btTriangleConvexcastCallback (const btConvexShape* convexShape, const btTransform& convexShapeFrom, const btTransform& convexShapeTo, const btTransform& triangleToWorld, const btScalar triangleCollisionMargin)
 
110
{
 
111
        m_convexShape = convexShape;
 
112
        m_convexShapeFrom = convexShapeFrom;
 
113
        m_convexShapeTo = convexShapeTo;
 
114
        m_triangleToWorld = triangleToWorld;
 
115
        m_hitFraction = 1.0;
 
116
    m_triangleCollisionMargin = triangleCollisionMargin;
 
117
}
 
118
 
 
119
void
 
120
btTriangleConvexcastCallback::processTriangle (btVector3* triangle, int partId, int triangleIndex)
 
121
{
 
122
        btTriangleShape triangleShape (triangle[0], triangle[1], triangle[2]);
 
123
    triangleShape.setMargin(m_triangleCollisionMargin);
 
124
 
 
125
        btVoronoiSimplexSolver  simplexSolver;
 
126
        btGjkEpaPenetrationDepthSolver  gjkEpaPenetrationSolver;
 
127
 
 
128
//#define  USE_SUBSIMPLEX_CONVEX_CAST 1
 
129
//if you reenable USE_SUBSIMPLEX_CONVEX_CAST see commented out code below
 
130
#ifdef USE_SUBSIMPLEX_CONVEX_CAST
 
131
        btSubsimplexConvexCast convexCaster(m_convexShape, &triangleShape, &simplexSolver);
 
132
#else
 
133
        //btGjkConvexCast       convexCaster(m_convexShape,&triangleShape,&simplexSolver);
 
134
        btContinuousConvexCollision convexCaster(m_convexShape,&triangleShape,&simplexSolver,&gjkEpaPenetrationSolver);
 
135
#endif //#USE_SUBSIMPLEX_CONVEX_CAST
 
136
        
 
137
        btConvexCast::CastResult castResult;
 
138
        castResult.m_fraction = btScalar(1.);
 
139
        if (convexCaster.calcTimeOfImpact(m_convexShapeFrom,m_convexShapeTo,m_triangleToWorld, m_triangleToWorld, castResult))
 
140
        {
 
141
                //add hit
 
142
                if (castResult.m_normal.length2() > btScalar(0.0001))
 
143
                {                                       
 
144
                        if (castResult.m_fraction < m_hitFraction)
 
145
                        {
 
146
/* btContinuousConvexCast's normal is already in world space */
 
147
/*
 
148
#ifdef USE_SUBSIMPLEX_CONVEX_CAST
 
149
                                //rotate normal into worldspace
 
150
                                castResult.m_normal = m_convexShapeFrom.getBasis() * castResult.m_normal;
 
151
#endif //USE_SUBSIMPLEX_CONVEX_CAST
 
152
*/
 
153
                                castResult.m_normal.normalize();
 
154
 
 
155
                                reportHit (castResult.m_normal,
 
156
                                                        castResult.m_hitPoint,
 
157
                                                        castResult.m_fraction,
 
158
                                                        partId,
 
159
                                                        triangleIndex);
 
160
                        }
 
161
                }
 
162
        }
 
163
}